文章目录
- 1、char型变量中能不能存贮一个中文汉字?为什么?
- 2、用最有效率的方法算出2乘以8等於几?
- 3、请说出byte,short,int,long的取值范围:
- 4、写clone()方法时,通常都有一行代码,是什么?
- 5、面向对象的特征有哪些方面
- 6、abstract class和interface 有什么区别?
- 7. 一个类可以实现多个接口,但只能继承一个抽象类。
- 8、super.getClass()方法调用
- 9、String s = new String("xyz");创建了几个String Object?
- 10、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
- 11、关于异常处理:
- 12、说出一些常用的类,包,接口,请各举5个
- 13、能不能自己写个类,也叫java.lang.String?
1、char型变量中能不能存贮一个中文汉字?为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中可以存储汉字。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
2、用最有效率的方法算出2乘以8等於几?
因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高。
3、请说出byte,short,int,long的取值范围:
- byte,内存占8位,所以,结果为:-27~27-1
- short,内存占16位,所以,结果为:-215~215-1
- int,内存占32位,所以,结果为:-231~231-1
- long,内存占64位,所以,结果为:-263~263-1
注意:
首位为符号位;程序中如果涉及小数点计算,推荐使用BigDecimal,避免精度丢失;如果不涉及,应使用BigInteger。
4、写clone()方法时,通常都有一行代码,是什么?
clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。
5、面向对象的特征有哪些方面
封装,抽象,继承,多态
6、abstract class和interface 有什么区别?
- 1.抽象类可以有构造方法,接口中不能有构造方法。
- 2.抽象类中可以有普通成员变量,接口中没有普通成员变量
- 3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
- 4.抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
- 5.抽象类中可以包含静态方法,接口中不能包含静态方法
- 6.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
- abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
- abstract的method不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系!
- native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它也不能是抽象的,不能与abstract混用。
- synchronized与abstract合用的问题,我觉得也不行,synchronized应该是作用在一个具体的方法上才有意义。
8、super.getClass()方法调用
由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在 方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是当前类的类名。
如果想得到父类的名称,应该用如下代码: getClass().getSuperClass().getName();
9、String s = new String(“xyz”);创建了几个String Object?
一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。
10、下面这条语句一共创建了多少个对象:String s=“a”+“b”+“c”+“d”;
javac 编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。
第一行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个String对象。
11、关于异常处理:
- error 表示恢复不是不可能的一种严重问题。比如说内存溢出。
- exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。例如,数组脚本越界,空指针异常。
普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。
java为系统异常和普通异常提供了不同的解决方案:
编译器强制普通异常必须try…catch 处理或用throws 声明继续抛给上层调用方法处理,所以普通异常也称为checked异常;
系统异常可以处理也可以不处理,所以系统异常也称为unchecked异常。
12、说出一些常用的类,包,接口,请各举5个
- 常用类:String、Long、Date、HashMap、ArrayList
- 常用包:java.lang、java.io、java.util、org.hibernate、java.sql
- 常用接口:List、Map、Runnable、Servelt、HttpServeltRequest
13、能不能自己写个类,也叫java.lang.String?
可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载jre.jar 包中的那个java.lang.String。
由于在tomcat的web应用程序中,都是由webapp自己的类加载器先自己加载WEB-INF/classess目录中的类,然后才委托上级的类加载器加载,如果我们在tomcat 的web应用程序中写一个java.lang.String,这时候Servlet程序加载的就是我们自己写的java.lang.String。
但是这么干就会出很多潜在的问题,原来所有用了java.lang.String 类的都将出现问题。
另外,java 提供了endorsed技术,但是,能够被覆盖的类是有限制范围,反正不包括java.lang 这样的包中的类。