面试题(二)
1、一个.java源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个public的类,并且public类名必须与文件名一致。
2、&和&&的区别?
1、&和&&都可以做逻辑与的运算符,表示逻辑与(and),当运算符两边表达式的结果为true时,整个运算结果才为true,否则只要有一个是false就是false
2、&&具备短路功能,如果第一个表达式为false时,不会在计算第二个表达式
3、&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示位与操作,通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位
3、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。但是在JDK7的新特性中,switch语句可以用字符串
4、char型变量中能不能存一个中文汉字?为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
5、用最有效的方法算出2乘以8等于几?
2 << 3,因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3
6、使用final关键字修饰一个变量时,是引用不能变,还是引用对象不能变?
1、使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
2、在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
3、在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
7、是否可以从一个static方法内部发出对非static方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用
8、Integer和int的区别?
1、int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。
2、Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量
9、Math.round(11.5)等于多少?Math.round(11.5)等于多少?
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
10、Overload(重载)和Override(重写)的区别,Overloaded是否可以改变返回值类型?
1、方法重载(Overload):在本类中出现了方法名相同但参数列表不同的方法,与返回值无关,可以改变返回值类型,只看参数列表;
2、方法重写(Override):子类中出现了和父类中方法声明一模一样的方法,与返回值有关,返回值和类型都是一样的。
本文链接: https://programmerxiaobo.github.io/2020/05/02/java%E5%AE%9E%E4%B9%A0%E7%94%9F%E9%9D%A2%E8%AF%95%E9%A2%98%EF%BC%88%E4%BA%8C%EF%BC%89/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!