1
1、一个\源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致。
2、Java 有没有 goto?
java 中的保留字,现在没有在 java 中使用。
3、说说&和&&的区别。
相同点:&&和&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为 true 时,整个运算结果才为 true,
不同点:&&如果第一个表达式为 false,则不再计算第二个表达式,&都计算 &还可以用作位运算符,当操作符两边的表达式不是 boolean 类型时,&表示按位与
4、在 JAVA 中如何跳出当前的多重嵌套循环?
1.可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的 break 语句. 2.让外层的循环条件表达式的结果可以受到里层循环体代码的控制,
5、switch 语句能否作用在 byte 上,能否作用在 long 、 String上?
在 switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体)由于byte,short,char 都可以隐含转换为 int,
但是long 和 String 类型都不符合 switch 的语法规定,并且不能被隐式转换成 int 类型
6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
对于前者;由于 s1+1运算时会自动提升表达式的类型,所以结果是 int型,再赋值给 short 类型 s1时,编译器将报告需要强制转换类型的错误。
对于后者;由于 +=是 java 语言规定的运算符,java 编译器会对它进行特殊处理,因此可以正确编译。
7、char 型变量中能不能存贮一个中文汉字?为什么?
char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字,所以, char 型变量中当然可以存储汉字啦。不过,某个特殊的汉字没有被包含就不能存储
8、用最有效率的方法算出 2 乘以 8 等于几?
2 << 3 因为将一个数左移 n 位,就相当于乘以了2的 n 次方,位运算 cpu 直接支持,效率最高,
9、请设计一个一百亿的计算器
计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。要实现一个一百亿的计算器,我们得自己设计一个类可以用于表示很大的整数,并且提供了与另外一个整数进行加减乘除的功能,大概功能如下:(1)这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数(2)有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中(3)提供加减乘除的功能
10、使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
11、\和 equals 方法究竟有什么区别?
==操作符专门用来比较两个变量的值是否相等,
equals 方法是用于比较两个独立对象的内容是否相同,多用于字符串的比较
2
12、静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加 static 关键字,而实例变量前则不加。
在程序运行时的区别:实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
13、是否可以从一个 static 方法内部发出对非 static 方法的调用?
不可以。因为非 static 方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而 static 方法调用时不需要创建对象,可以直接调用。
14、Integer 与 int 的区别
int 是 java 提供的8种原始数据类型之一。Integer 是封装类。默认值为0,而 Integer 的默认值为 null,int 不适合作为 web 层的表单数据的类型。Integer 提供了多个与整数相关的操作方法,
15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math 类中提供了三个与取整有关的方法:ceil(向上取整)、floor(向下取整)、round(四舍五入),Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
16、下面的代码有什么不妥之处?
1. if(username.equals(“zxx”){}:username 可能为 NULL,会报空指针错误;改为\2. int x = 1;return x==1?true:false; 这个改成 return x==1;就行
17、请说出作用域 public,private,protected,以及不写时(friendly)的区别 作用域 当前类 同一包(package) 子孙类 其他包(package) public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × ×
18、Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型?
Overload 是重载的意思,Override 是覆盖的意思,也就是重写。
重载 Overload 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。 重写 Override 表示子类中的方法可以与父类中的某个方法的名称和参数完全相同。
如果父类的方法是 private 类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
19、构造器 Constructor 是否可被 override?
构造器 Constructor 不能被继承,因此不能重写 Override,但可以被重载 Overload。
20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的 main 方法?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的 main 方法。抽象类与普通类的唯一区别:抽象类就是不能创建实例对象和允许有 abstract 方法。
21、写 clone()方法时,通常都有一行代码,是什么?
clone 有缺省行为,super.clone();
22、面向对象的特征有哪些方面
3
封装:面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个类中,属性用变量定义,行为用方法进行定义,方法可以直接访问同一个对象中的属性。 抽象:
抽象:就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。
继承:子类自动共享父类数据和方法的机制,提高了软件的可重用性和可扩展性。 多态:在面向对象语言中,接口的多种不同的实现方式
23、java 中实现多态的机制是什么?
父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
24、abstract class 和 interface 有什么区别?
抽象类是含有 abstract 修饰符的 class ,不能创建实例对象
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。
应用上的区别:接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,
25、(抽象)abstract 的 (方法)method 是否可同时是 (静态)static,是否可同时是 native,是否可同时是 synchronized?
abstract 的 method 不可以是 static 的,因为抽象的方法是要被子类实现的,而 static 与
类扯不上关系!native 方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它也不能是抽象的,不能与 abstract 混用。
关于 synchronized 与 abstract 合用的问题,synchronized 应该是作用在一个具体 的方法上才有意义。而且,方法上的 synchronized 同步所使用的同步锁对象是 this,而抽象方法上无法确定 this 是什么。
26、什么是内部类?Static Nested Class 和 Inner Class 的不同。
内部类就是在一个类的内部定义的类,内部类中不能定义静态成员,内部类可以直接访问外部类中的成员变量,内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中,
static Nested Class 能访问外部类的非 static 成员变量(不能直接访问,需要创建外部类实例才能访问非静态变量)。
27、内部类可以引用它的包含类的成员吗?有没有什么限制?
完全可以。如果不是静态内部类,那没有什么限制!静态内部类不能访问外部类的成员,
28、Anonymous Inner Class (匿名内部类)是否可以 extends(继承)其它类,是否可以 implements(实现)interface(接口)?
可以继承其他类或实现其他接口。不仅是可以,而是必须!
29、super.getClass()方法调用
在test 方法中调用 getClass().getName()方法,其实是在调用从父类继承的 getClass()方法,
30、String 是最基本的数据类型吗?
基本数据类型包括 byte、int、char、long、float、double、boolean 和 short。(8个)
java.lang.String 类是 final 类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用 StringBuffer 类