1.是否可以从一个static方法内部发出对非static方法的调用
不可以调用,因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用.
而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部可以发出对非static方法的调用。
2.使用final关键字修饰一个变量时,是引用变量不能变,还是引用的对象的内容不能变?
而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部可以发出对非static方法的调用。
写道
在这里我先解释下, 什么是引用变量不能变?什么是对象的内容不能变?例如下面的代码:
final StringBuffer sb = new StringBuffer("Hello");
sb = new StingBuffer("World");//这就是引用改变.sb指向了新的引用.
sb.append("Itcast");//此时sb中的内容为 "HelloItcast",这就是对象改变了.
那么在上面的代码中, 到底哪个是对的呢?
sb.append("Itcast"); 这句代码是对的,可以编译通过. 而
sb = new StingBuffer("World"); 这句代码会编译报错.
/*
错误: 无法为最终变量sb分配值
sb = new StringBuffer("World");
*/
所以说,被final关键字修饰的变量,是引用变量不能变,但是引用变量的对象中的内容是可以改变的.
3.重载(overload)和重写override 区别
final StringBuffer sb = new StringBuffer("Hello");
sb = new StingBuffer("World");//这就是引用改变.sb指向了新的引用.
sb.append("Itcast");//此时sb中的内容为 "HelloItcast",这就是对象改变了.
那么在上面的代码中, 到底哪个是对的呢?
sb.append("Itcast"); 这句代码是对的,可以编译通过. 而
sb = new StingBuffer("World"); 这句代码会编译报错.
/*
错误: 无法为最终变量sb分配值
sb = new StringBuffer("World");
*/
所以说,被final关键字修饰的变量,是引用变量不能变,但是引用变量的对象中的内容是可以改变的.
写道
verride(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
4.构造器Constructor是否可被override?
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
写道
首先说明,构造器也就是我们所说的构造方法. 也就是方法名和类名一致的那个方法.
例如:
class Person
{
String name;
int age;
Person(){} //这个方法就是无参数的构造方法.
Person(String name, int age) //这个方法就是有参数的构造方法.
{
this.name = name;
this.age = age;
}
}
这个问题,看起来非常简单,但是很多初学者学完继承后,都认为子类可以继承父类的一切,事实上,构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。
希望大家一定注意,不是父类所有的东西都要继承.
5.在JAVA中如何跳出当前的多重嵌套循环?
例如:
class Person
{
String name;
int age;
Person(){} //这个方法就是无参数的构造方法.
Person(String name, int age) //这个方法就是有参数的构造方法.
{
this.name = name;
this.age = age;
}
}
这个问题,看起来非常简单,但是很多初学者学完继承后,都认为子类可以继承父类的一切,事实上,构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。
希望大家一定注意,不是父类所有的东西都要继承.
写道
A:for(int i=0; i<10; i++){ //外循环定义标号A.
for(int j=0; j<10; j++){
System.out.println("i="+i+",j="+j);
if(j==6){
break A; //break A,就是跳到外循环处(也就是整个外循环都结束了).
}
}
}
其实到这为止,这道笔试题就做完了,这是常规做法.那么有没有非常规的呢?这正好显示下我们的编码功力.下面老师就写出另一种形式,大家看看.比如,
我们要在一个二维数组中找某个数是在哪个位置,找到后跳出.
for(int i=0;i<arr.length()&&!flag;i++) 加入flag 标志
6.说出作用域public,private,protected,以及不写时的区别?
for(int j=0; j<10; j++){
System.out.println("i="+i+",j="+j);
if(j==6){
break A; //break A,就是跳到外循环处(也就是整个外循环都结束了).
}
}
}
其实到这为止,这道笔试题就做完了,这是常规做法.那么有没有非常规的呢?这正好显示下我们的编码功力.下面老师就写出另一种形式,大家看看.比如,
我们要在一个二维数组中找某个数是在哪个位置,找到后跳出.
for(int i=0;i<arr.length()&&!flag;i++) 加入flag 标志
写道
说明:如果在修饰的元素上面没有写任何访问修饰符,则表示 默认不写。
这四个作用域的可见范围如下表所示。
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
默认不写 √ √ × ×
private √ × × ×
备注:只要记住了有4种访问权限,4个访问范围,然后将全选和范围在水平和垂直方向上分别按排从小到大或从大到小的顺序排列,就很容易画出上面的图了。
7.Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
这四个作用域的可见范围如下表所示。
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
默认不写 √ √ × ×
private √ × × ×
备注:只要记住了有4种访问权限,4个访问范围,然后将全选和范围在水平和垂直方向上分别按排从小到大或从大到小的顺序排列,就很容易画出上面的图了。
写道
Math类中提供了三个与取整有关的方法:ceil、floor、round,
这些方法的作用与它们的英文名称的含义相对应,例如:
ceil的英文意义是天花板,该方法就表示向上取整,所以,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;
floor的英文意义是地板,该方法就表示向下取整,所以,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;
最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
8.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
这些方法的作用与它们的英文名称的含义相对应,例如:
ceil的英文意义是天花板,该方法就表示向上取整,所以,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;
floor的英文意义是地板,该方法就表示向下取整,所以,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;
最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
写道
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型(byte,short,char 这三种类型在参与运算时,会自动转换成int类型),所以最后的结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误(因为int类型转换成short类型可能会损失精度,计算机只要认为可能出错,这哥们就会提示给我们,它还是比较尽职的)。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,也就是类型自动提升,因此可以正确编译。
9."=="和equals方法究竟有什么区别?
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,也就是类型自动提升,因此可以正确编译。
写道
答案:对于比较基本数据类型来说,==比较的就是数值的大小,例如:
int m = 2;
int n = 3;
boolean b = m==n;
System.out.println(b);//结果为false,因为2和3不等吗.
但是对于引用类型数据来说,==和equals就有些不同了,在大多数类中的equals方法调用的依然是==,但比较的是两个引用变量的地址是否相同.
例如:
int[] arr1 = {1,2,3};
int[] arr2 = {1,2,3};
System.out.println(arr1==arr2);//结果是false,因为比较的是地址值.
System.out.println(arr1.equals(arr2));//结果还是false,因为比较的还是地址值.其实调用的方法还是"=="
但是在字符串String中就不一样了,因为String中的equals方法被重写了,它比较的是两个字符串对象中的内容是否相同.
例如:
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1==s2);//结果是false,因为比较的是地址值.
System.out.println(s1.equals(s2));//结果是true,因为比较的是对象中内容是否相同.
10.对两个整数变量进行互换,要求在不使用第三方变量的前提下?
int m = 2;
int n = 3;
boolean b = m==n;
System.out.println(b);//结果为false,因为2和3不等吗.
但是对于引用类型数据来说,==和equals就有些不同了,在大多数类中的equals方法调用的依然是==,但比较的是两个引用变量的地址是否相同.
例如:
int[] arr1 = {1,2,3};
int[] arr2 = {1,2,3};
System.out.println(arr1==arr2);//结果是false,因为比较的是地址值.
System.out.println(arr1.equals(arr2));//结果还是false,因为比较的还是地址值.其实调用的方法还是"=="
但是在字符串String中就不一样了,因为String中的equals方法被重写了,它比较的是两个字符串对象中的内容是否相同.
例如:
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1==s2);//结果是false,因为比较的是地址值.
System.out.println(s1.equals(s2));//结果是true,因为比较的是对象中内容是否相同.
写道
在这里我把思考的过程和演算的过程都写下,面试的时候,你们只需要写下最终
的结果就可以了。
1,我们知道一个数异或另一个数2次,结果还是这个数。举例:2^3^3=2.这个大家明白吧,应该没问题.同样,3^2^3=2,其实我只是把顺序换了下位置,这个都不难理解.
2, 题目中不是说两个整数变量吗?那么我们就设两个整数变量.比如: int x = 2; int y = 3;现在我们就把这两个数用异或的方法进行数值换位.
3,由于我们人的思想习惯是xy的顺序,那么我们就先来换位x,于是有:
x = x^y;//此时x=2^3.这时再算出y,于是有
y = x^y;//相当于2^3^3=2,这时的y=2,我们完成了一个换位.于是开始换x.
此时x^y=2^3^2=3,那么我们就把这个值赋给x,那么就是
x = x^y;//相当于2^3^2=3.这时x=3;
a=a+b;
b=a-b;
a=a-b;
11.java语言中有没有goto关键字?
的结果就可以了。
1,我们知道一个数异或另一个数2次,结果还是这个数。举例:2^3^3=2.这个大家明白吧,应该没问题.同样,3^2^3=2,其实我只是把顺序换了下位置,这个都不难理解.
2, 题目中不是说两个整数变量吗?那么我们就设两个整数变量.比如: int x = 2; int y = 3;现在我们就把这两个数用异或的方法进行数值换位.
3,由于我们人的思想习惯是xy的顺序,那么我们就先来换位x,于是有:
x = x^y;//此时x=2^3.这时再算出y,于是有
y = x^y;//相当于2^3^3=2,这时的y=2,我们完成了一个换位.于是开始换x.
此时x^y=2^3^2=3,那么我们就把这个值赋给x,那么就是
x = x^y;//相当于2^3^2=3.这时x=3;
a=a+b;
b=a-b;
a=a-b;
写道
其实goto这个词是C语言中的,goto语句通常与条件语句配合使用,可用来实现条件转移, 构成循环,跳出循环体等功能。而在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。但是在java语言中,goto这个词只是作为了保留字,还没有使用。那是因为java语言讲究简单,方便。
12.静态变量和实例变量的区别?
写道
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
不要认为加了static的变量就可以一定被非static成员访问,因为不同的代码块中变量的生命周期是不一样的
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
不要认为加了static的变量就可以一定被非static成员访问,因为不同的代码块中变量的生命周期是不一样的
相关推荐
java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见面试题汇总 java常见...
Java常见面试题 Java是最流行的编程语言之一,掌握Java的基础知识是非常重要的。在这里,我们总结了Java常见的面试题,涵盖了Java的基础部分,包括基本语法、类相关的语法、内部类的语法、继承相关的语法、异常的...
以下是一些基于“java常见面试题合集”的相关知识点: 1. **基础语法**: - 类与对象:理解类的定义、对象的创建与访问权限。 - 继承与多态:掌握单一继承和接口的多实现,以及方法的重写和重载。 - 封装与抽象...
Java 面试题详解 Java 是一种广泛应用于企业级开发的编程语言,了解 Java 的基础知识点对于开发者来说是非常重要的。在面试中,常见的问题包括面向对象的特征、String 和 StringBuffer 的区别、运行时异常与一般...
Java常见面试题中,首先提出的问题是关于同步和异步的区别与应用场景。同步是指在程序中,一个任务的执行必须等待另一个任务完成后才能继续执行。异步则是指任务的执行不需要等待其他任务完成即可继续执行。在数据...
java程序员面试题150例 java常见面试题 java工程师面试题 java面试题大全 带搜索功能,能非常方便的查找到你想要了解的 java面试题目 推荐大家下载。
【Java常见面试题】 java常见面试题及答案.pdf
Java 常见面试题涵盖了从基础到进阶的诸多知识点,对于求职者来说是准备面试的重要参考资料。以下是一些关键点的详细说明: 1. **Java 基本数据类型与引用数据类型**: - Java 的基本数据类型包括实数(float 和 ...
这份“Java常见面试题.rar”压缩包文件显然为求职者提供了全面的准备材料,旨在帮助他们应对可能出现的各种Java面试挑战。 在Java面试中,常见的知识点包括但不限于以下几个方面: 1. **基础语法**:这是面试的...
2018年的Java面试题反映了当时的行业趋势和技术重点,对于求职者和开发者来说,理解这些知识点至关重要。以下是一些可能出现在面试中的关键Java概念和问题: 1. **Java基础:** - **变量与数据类型**:理解基本...
以下是一些常见的Java面试题及其详细解释,帮助你更好地理解和准备Java相关的面试。 1. **Java基础** - **面向对象特性**:Java是一种面向对象的语言,主要包含封装、继承和多态三个基本特征。理解这些概念及其在...
以上是对Java常见面试题中涉及的一些关键知识点的总结。这些知识点不仅对于准备面试的人来说非常重要,同时也是深入理解Java编程的基础。希望这些内容能够帮助读者更好地掌握Java的核心概念和技术。
Java常见面试题及三大框架面试题目解析 Java 基础知识点: 1. 作用域 public,private,protected,以及不写时的区别: 作用域的区别在于访问权限的限制,public为公共访问权限,private为私有访问权限,protected为...
java常见面试题,里面内容涵盖了最近几年的面试题,很详细。
【Java常见面试题】文档包含了Java开发者在面试中可能会遇到的基础和高级问题,这些问题涵盖了Java的核心概念和技术。以下是对部分知识点的详细解释: 1. **面向对象的特征**: - **抽象**:抽象是将复杂的实体...
最新_互联网公司招聘_笔试_开发_【Java常见面试题】_java常见面试题及答案.pdf
以下是从“Java常见面试题集”中提炼出的关键知识点,旨在帮助求职者全面掌握Java的核心概念和技术细节。 ### 1. Java基础 - **面向对象特性**:Java是一种完全面向对象的语言,支持封装、继承和多态三大特性。...
java常见面试题及解析.txt java常见面试题及解析.txt java常见面试题及解析.txt java常见面试题及解析.txt
Java常见面试题汇总 Java是一种广泛使用的编程语言,掌握Java的相关知识点对于程序员来说是非常重要的。下面是Java常见面试题汇总,涵盖了Java基础知识、数据类型、运算符、循环、数组、方法结构、方法重载和重写、...