1.下面程序结果是多少
package ch00;
public class Test1 {
public static void main(String[] args) {
int a = 11, b = 20;
if (a-- == 10 && b++ == 21) {
System.out.println("ok");
}
System.out.println("a=" + a);
System.out.println("b=" + b);
}
}
2.什么是方法重载,重载对方法的返回值和访问修饰符有什么要求
3.以下代码是否报错,如果有报错请指出哪一行报错,并说明原因,如果没有直接写出结果即可
package ch00;
public class Test3 {
public static void main(String[] args) {
short a = 1, b = 2;//第一行
a = a+1;//第二行
b++;//第三行
System.out.println(a);//第四行
System.out.println(b);//第五行
}
}
4.将下面两个数进行交换位置(不允许使用中间变量,至少写出两种方案)
5.请写出下面程序的结果
package ch00;
class A {
private String name = "小李";
public A() {
System.out.println(getName());
}
public String getName() {
return name;
}
}
public class Test5 extends A{
private String name = "小红";
public Test5() {
System.out.println(getName());
}
public String getName() {
return name;
}
public static void main(String[] args) {
new Test5();
}
}
6.下面程序结果是什么
Integer a = 127;
Integer b = 125;
Integer c = 2;
Integer d = b+c;
Integer f = 128;
Integer g = 128;
System.out.println(d == a);
System.out.println(f == g);
7.拥有静态成员的内部类一定是静态内部类吗。如果不是请举例说明。
8.抽象方法是否可以被static关键字修饰,如果可以请说明原因,不可以也请说明原因。
9.在java中什么是泛型的上限和下限,请使用List接口声明局部变量的方式来说明该问题
10.抽象类中是否允许构造器的重载,接口是否也允许构造器的重载,接口中是否允许存在静态方法。
11.请对下面的数组进行扩容,要求是原来的两倍
int[] arr = {3,4,6,8}
12.下列程序在1处是否会有异常,如果没有,输出是什么?是否会运行到2处,如果会,输出是什么?为什么会有这样的结果?
package ch00;
import java.util.ArrayList;
import java.util.List;
public class Test12 {
public static void main(String[] args) {
List list =new ArrayList();
test2(list);
System.out.println(list.size());//1处
test3(list);
System.out.println(list.size());//2处
}
public static void test2(List list) {
list=null;
}
public static void test3(List list) {
list.add(list);
}
}
13.java中常见类加载器有哪些,它们分别的作用是什么?
14.假如T1线程和T2线程出现了死锁的状况,那么请说明该状态下,线程和锁的持有情况。
15.下面程序结果为多少
String a = "11";
String b = "22";
String c = "11"+"22";
String d = new String("1122").intern();
System.out.println(c == d);
16.== 与equals的区别是什么
17.请写出java中所有的基本数据类型
18.请写出获取一个类类型的Class对象的几种方式?基本数据类型是否可以获取其Class对象,如果不可以直接写不可以,如果可以,请举例说明
19.如果退出多层嵌套循环(写出至少两种方案)
20.下面俩句代码是否都可以编译通过,请对每句代码进行说明,能否编译通过和原因
byte b= 1;
float a = 1.5;
21.子父类关系中,创建子类对象就会调用父类的构造方法,请问调用父类构造方法一定会创建父类对象吗,请举例说明。
22.A类如果实现B接口就必须实现里面所有的抽象方法,请给出一种方案,A类想要实现B接口,又不想实现所有的抽象方法。
23.下面程序结果为:
package ch00;
public class Test23 {
public static void main(String[] args) {
System.out.println(result());
}
public static int result() {
try {
return 1;
}catch (Exception e) {
return 2;
}finally {
return 3;
}
}
}
24.创建对象一定会调用构造方法吗?如果是直接写出结果即可,如果不是请举例说明。
25.请写出五个运行时异常
package ch00;
public class Test1 {
public static void main(String[] args) {
int a = 11, b = 20;
if (a-- == 10 && b++ == 21) {
System.out.println("ok");
}
System.out.println("a=" + a);
System.out.println("b=" + b);
}
}
a=10
b=20
解析a=11,a--为本身为11,运行后减1.
if中(a-- ==10)为false
由于&&一个为false,if即为false,因此不执行(b++ == 21)
因此输出结果为上
发生在本类中,方法名相同参数参数列表不同
方法重载对返回值和修饰符没有影响
package ch00;
public class Test3 {
public static void main(String[] args) {
short a = 1, b = 2;//第一行
a = a+1;//第二行
b++;//第三行
System.out.println(a);//第四行
System.out.println(b);//第五行
}
}
第二行编译报错
在计算时会先将short转换成int类型数据进行计算,两个int类型数据相加最后的结果也为int
int类型的数据不能够直接赋值给short类型变量
正确应该为a = (short) (a + 1);
// 第一种
a = a ^ b;
b = a ^ b;
a = a ^ b;
// 第二种
a = a + b;
b = a - b;
a = a - b;
package ch00;
class A {
private String name = "小李";
public A() {
System.out.println(getName());
}
public String getName() {
return name;
}
}
public class Test5 extends A{
private String name = "小红";
public Test5() {
System.out.println(getName());
}
public String getName() {
return name;
}
public static void main(String[] args) {
new Test5();
}
}
null
小红
解析
主函数中new Test5()对象,会先调用父类的构造器,再调用子类的构造器,而父类没有进行对name进行显示初始化,则name输出为空null
Integer a = 127;
Integer b = 125;
Integer c = 2;
Integer d = b+c;
Integer f = 128;
Integer g = 128;
System.out.println(d == a);
System.out.println(f == g);
true
false
解析
d=b+c,值为127,和a=127,相等,且都在常量池,因此(d==a)为true
而Integer 范围为(-128到127) f与g,超出了常量池,会进行new对象存储128,因此(f==g)为false
拥有静态成员的内部类一定是静态内部类
不可以,因为如果可以,那么就可以通过类名去调用,而抽象方法没有方法体无法去执行该抽象方法。
或者 抽象方法就是用来被子类重写的,而静态方法不能够被重写,所以冲突。
向下限定:
List list = new ArrayList<>();
泛型只能为 Object或者Object的子类
向上限定:
List list = new ArrayList<>();
泛型只能为:String以及String的父类
是 否 是
解析
抽象类中允许构造器重载
接口中没有构造器所以不允许重载
jdk1.8之后接口中允许存在静态方法
int[] arr = {3,4,6,8}
int[] arr= {3,4,6,8};
int[] newArr = new int[arr.length * 2];
System.arraycopy(arr,0,newArr,0,arr.length);
arr = newArr;
package ch00;
import java.util.ArrayList;
import java.util.List;
public class Test12 {
public static void main(String[] args) {
List list =new ArrayList();
test2(list);
System.out.println(list.size());//1处
test3(list);
System.out.println(list.size());//2处
}
public static void test2(List list) {
list=null;
}
public static void test3(List list) {
list.add(list);
}
}
1处没有异常,输出结果为0
可以运行到2处,结果为1
因为方法的传递为引用传递,传递的是地址,对地址操作就是对堆里面的内存进行操作
类装载器:
(分为4步)1》2》3》4
1、启动类装载器:bootstrap class loader
从jdk的安装目录下 jdk/jre/lib/rt.jar
rt.jar 是个包,放的是Java作为开发环境的所有的库
2、扩展类装载器:extensible class loader
从jdk的安装目录下 jdk/jre/lib/ext/*.jar
jdk下的所有的.jar 文件
3、系统类装载器:system class loader
$CLASSPATH
你所配置的classpath
4、网络类装载器:network class loader
类加载器:从一个指定路径下面去加载代码运行时需要用到的java类
有两个锁,T1线程锁住第一个,T2线程锁住了第二个,同时T1试图锁第二个,失败,因为T2已经锁住了,T1只能等待.就在这时T2试图锁第一个,结果失败,因为T1已经锁住了,T2只好等待
String a = "11";
String b = "22";
String c = "11"+"22";
String d = new String("1122").intern();
System.out.println(c == d);
true
解析
如果没有调用intern方法的情况下,大家都了解应该为false,但是调用以后,这个方法作用是返回字符串常量池,因此为“true”
== 可以用来比较基本数据类型也可以用来比较引用类型
equals 只能用来比较引用类型数据
== 比较引用类型数据比较的是地址
equals如果被重写比较的则是内容
byte short int long float double char boolean
Class.forName(“全类名”);
类名.class
对象名.getClass();
可以
基本数据类型可以获取Class对象,方式为:基本数据类型.class
lable + break 跳出多层循环
return 跳出多层循环
byte b= 1;
float a = 1.5;
第一行编译通过
byte b = 1; 不会报错是因为 字面量 1 默认为int类型,但是其数值在byte所表示的范围内
float a = 1.5; 因为1.5默认为double类型数据 所以不能够将double类型赋值给a
调用父类方法不会创建父类对象
当父类是抽象类时,创建子类对象也会调用父类构造方法,但是抽象类是不能够创建对象的
答案1:
写一个中间类C去实现B接口,并且空实现接口里面所有的方法
A 类 继承 C类,当想要重写某个方法时直接重写即可
答案2:
写一个抽象类,把A类定义为抽象类,也可以满足只实现部分抽象方法
package ch00;
public class Test23 {
public static void main(String[] args) {
System.out.println(result());
}
public static int result() {
try {
return 1;
}catch (Exception e) {
return 2;
}finally {
return 3;
}
}
}
3
解析
try,catch语句块中,必定会执行finally 中的语句return 3
会先执行try语句块的,但是返回值只有一个,考虑有try执行不了的情况下,所以只能返回finally的return
不一定,通过反序列化创建对象就会不调用构造方法
NullPointerException
ClassCastException
ArrayIndexOutOfBoundsException
ArrayStoreException
ArithmeticException