【JAVA】基础知识_常见问题1
1、一个“.java”的源文件中是否可以包含多个类
当然可以包含多个类,但是用public修饰的类只能有一个,并且类的名字要与文件的名字一致。
2、&和&&有什么区别
这个问题很多人理解的不是很透彻。
首先:&和&&都是逻辑与运算符,当运算符两边的表达式都为true时,整个运算结果为true,反之为false。但是&和&&也略有不同,&&为短路与,什么意思哪,比如:if(null != str && “”.equals.(str)),当str是null时,就不会执行第二个条件。如果用&,还是会执行第二个条件。
其次:&还可以表示位运算符,当&两边的表达式不是boolean类型时,&表示按位与操作,0x111 & 0x01 结果为0x01,用这样的方式来判断一个数的奇偶性是不是不错啊,当然这只是一个实例,还有别的用法,可根据实际情况而定。
3、switch语句能否作用在byte上,能否作用在long上,能否作用在String上
在switch(expr1)中,expr1只能是一个整数表达式或枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于byte、short、char可以隐含装换为int,所以这些类型以及这些类型的包装类型也是可以的。显然long、String类型都不符合switch的语法规定,并且不能被隐式转换为int类型,因此不能用于switch语句中。
4、char类型变量中能否存储一个中文汉
char类型变量是用来存储Unicode编码字符的,Unicode编码字符集中包含了汉字,因此char类型变量当然可以用来存储汉字。但是如果是特殊汉字,既没有包含在Unicode编码字符集中,那么这个char就无法保存这个特殊汉字。
注意:Unicode编码占用两个字节,所以char类型变量也是占用两个字节。
5、使用final关键字修饰一个变量时,时引用不能变还是还是引用的对象不能变
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向对象中的内容还是可以改变的。
6、“==”和equals方法究竟有什么区别
==操作符是用于两个变量的值是否相等,也就是比较变量所对应内存中的数值是否相等。比较基本数据类型或两个引用变量是否相等,应该用==操作符。
如果一个变量指向的数据是一个对象类型,那么此时是涉及了两个内存,对象本身占用了一块内存(堆内存),变量也占用了一块内存,存放堆内存的首地址。对于两个引用类型变量用==比较,表示两个变量是否指向同一块堆内存,比较的是两个变量存储的地址是否相等。
equals方法用于比较两个真实独立对象的内容是否相同,如下:
String a = new String(“abc”);
String b = new String(“abc”);
想要比较a和b中的字符串是否一致,就要用:a.equals(b)返回结果会是true;
此时如果用a==b来比较,那返回的结果就会是false,因为a和b是两个不一样的对象,地址是完全不一样的。
7、静态变量和实例变量有什么区别
语法定义区别:静态变前面要加static关键字,实例变量前不加。
程序运行区别:实例变量本质是属于某个对象的属性,必须创建的实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个具体的实例对象,而是属于类,所以也称类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
总之,实例变量必须创建对象后才可以通过这个对象来使用,而静态变量则可以直接使用类名来引用。
8、一个static方法内部是否可以发出对非static方法的调用
不可以。
非static方法是与对象关联在一起的,必须创建一个具体对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。当一个static方法内部发出对非static方法调用时,那这个非static方法到底关联的是哪个对象那?不知道到,理论上走不通。因此一个static方法内部是不可以发出对非static方法的调用。
9、Integer与int的区别
int是Java提供的8钟基本数据类型之一。Java为每个基本数据类型都提供了封装类,Integer是Java为int提供的封装类,int的默认值为0,Integer的默认值为null。
10、说说public、private、protected作用域以及不写是的区别
具体作用域见下表。如果不加修饰符则表示friendly。
作用域
当前类
同一包
子孙类
其他包
public
OK
OK
OK
OK
protected
OK
OK
OK
NO
friendly
OK
OK
NO
NO
private
OK
NO
NO
NO