java基础测试

1、
下面程序结果是多少

pablic class Test{
	public static void main(String[] args){
		int a = 11,b = 20;
		if(a-- == 10 && b++ == 21){
			system.out.pringtln("ok");
		}
		System.out.println("a="+a);
		System.out.println("b="+b);
	}
}
// 10
// 20

++i先自增再运算
i++先运算再自增		i--  --i同理
&&短路运算符 与   前一个条件不成立则后面不执行    ||同理

2、
什么是方法重载,重载对方法的返回值和访问修饰符有什么要求
答:
方法重载是指在一个类中定义多个同名的方法,重载对方法的返回值和访问修饰符没有要求。
3、
以下代码是否报错,如果有报错请指出哪一行,并说明原因,如果没有直接写出结果即可

public class Test{
	public static void main(String... args){
		short a = 1,b = 2;//第一行
		a = a + 1;//第二行
		b++;
		System.out.println(a);//第四行
		System.out.println(b);//第五行
	}
}

第二行报错,int类型需要强转成short
如果赋的一个不确定的值会报错,因为可能会有溢出的危险。

4、
将两个数进行交换位置。(三种方案)

a = a+b;		a=a^b;		int temp;
b = a-b;		b=a^b;		temp = a;
a = a-b;		a=a^b;		a = b;
							b = temp;

5、
请写出下面程序的结果

classA{
	private String name ="日辉";

	public A(){
		System.out.println(getNmae());
	}
	public String getName(){
		return name;
	}
}
public class Test extends A{
	private String name = "灰灰";
	public Test(){
		System.out.println(getName());
	}
	public String getName(){
		return name;
	}
	public static void main(String[] args){
		new Test();
	}
}
//null
//灰灰

new了一个子类对象,先调用子类构造器,有一个默认super 再看父类构造器,但是父类没有当前对象。

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);
//true
//false

   false的原因是超出缓冲区,new了一个新的Integer对象
		integer缓冲区[-128,127]

7、
拥有静态成员的内部类一定是静态内部类吗?如果不是请举例

答:一定是,其他内部类里不可以加静态成员。静态代表了为类所拥有,而不是对象。

8、
抽象方法是否可以被static关键字修饰,如果可以请说明原因,不可以也说明原因

答:不可以,因为如果可以,那么就可以通过类名去调用,而抽象方法没有方法体无法去执行该抽象方法 。或者 抽象方法就是用来被子类重写的,而静态方法不能够被重写,所以冲突。

9、
在java中什么是泛型的上限和下限,请使用List接口声明局部变量的方式来说明该问题

答:上限:<? extends 父类>
下限:<? super 子类>		
List<? extends Object> list = new ArrayList<>();
List<? super String> list = new ArrayList<>();	

10、

抽象类中允许构造器的重载,接口没有构造器,所以不允许构造器的重载,接口允许存在静态方法。

11、
请对下面数组进行扩容,要求是原来的2倍

 int[] a= {3,4,6,8};

	int[] b=new int[8];

             //固定的写法a为扩容前的变量名   0是从数组a的第几个数开始传递

            // b为a目标扩容的数量   0是b数组从第几个元素开始接受来自数组a的元素

            //a.length是元素a的元素量

	System.arraycopy(a,0,b,0,a.length);
	a=b;

12、
下列程序在1处是否会有异常,如果没有,输出是什么?是否会运行到2处,如果会,输出是什么?为什么会有这样的结果?

piblic class TestClass{
	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("aaaa");
	}
}	
//0
//1

13、
java中常见类加载器有哪些?他们分别的作用是什么?
答:
启动类加载器 bootstrapClassLoader 专门加载java系统中最重要最基本的类
扩展类加载器 ExtClassLoader 专门加载系统中额外添加的一些功能的jar包
应用类加载器 AppClassLoader 专门加载系统中用户自己编写的项目代码
14、
假如T1线程和T2线程出现了死锁状态,那么说明该状态下,线程和锁的持有情况
答:
T1线程先锁A,请求B
T2线程先锁B,请求A 出现死锁状态
15、
下面程序结果是多少

String a = "11";
String b = "22";
String c = "11"+"22";
String d = new String("1122").intern();
System.out.println(c == d);
//true

intern()方法把常量池引用赋给了新new的   

16、
1、java中equals和==的区别 值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
  2、==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即 栈中的内容是否相同。
  3、equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
  4、==比较的是2个对象的地址,而equals比较的是2个对象的内容,显然,当equals为true时,==不一定为tr ue。
17、
写出Java中所有的基本数据类型
答:
基本数据类型:byte short int long float double boolean char
18、
获取类类型的Class对象的几种方式?基本数据类型是否可以获取其Class对象,举例说明
答:
1)知道类的全限类名,
Class.forName(全限类名);
2)只知道类的类名,Student
Student.class;
3)知道有个对象的名字,stu1
stu1.getClass();

基本数据类型可以获取其Class对象,基本数据类型可以获取Class对象,方式为: 基本数据类型.class

19、
如何退出多层嵌套循环(两种)
答:
break;终止一层的循环方法,可以结束嵌套循环
return;结束方法,循环随之结束
20、
下面两句代码是否都可以编译通过,请对每局代码进行说明,能否编译通过的原因

byte b = 1;		通过;Java 中,byte 占一个字节,取值范围是128~127(-2^7~2^7-1) 
		因为java自动进行了底层转换,效果和byte b = (byte)1;是一样的。另外如果赋的一个不确定的值会报错,因为可能会有溢出的危险。
float a = 1.5;	不通过,默认double

21、
子父类关系中,创建子类对象就会调用父类的构造方法,请问调用父类构造方法一定会创建父类对象吗?请举例说明。

答:不会。子类会实现父类的方法,子类没有new一个父类对象出来。

22、
A类如果实现B接口就必须实现里面所有的抽象方法,请给出一种方案,A类想要实现B接口,又不想实现所有的抽象方法。

答:1.用一个类去实现B接口,再用A继承那个类
    2.用一个接口继承B接口,再让A去实现那接口

23、
下面程序结果是

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

1、finally中的代码总会被执行。
2、当try、catch中有return时,也会执行finally。return的时候,要注意返回值的类型,是否受到finally中代码的影响。
3、finally中有return时,会直接在finally中退出,导致try、catch中的return失效。

24、
在Java中,产生一个对象的时候,最终是否一定会调用该类的构造方法?如果不是请举例说明。

答:不一定,当反序列化创建对象时就不会调用构造方法。
创建对象:
通过new关键字创建对象,这个过程一定是需要调用构造函数的。
反射Class.forName(classFullPathName).newInstance()创建对象,一定要调用默认的无参构造函数
通过反射Player.class.getConstructor(int.class,String.class).newInstance()创建对象,一定要调用相应的构造函数
我们思考在序列化时写入字节流中确实有类的全路径名,从中我们可以获得Class信息,并可以通过调用构造函数的方式创建对象,但是我们在序列化时并不是将所有的域都序列化了,如果类存在某个构造函数中验证了某些参数的合法性,如果不合法抛出异常的这种逻辑,那么调用构造函数创建对象就会直接抛出异常。这样想来也确实不能够通过调用构造函数创建对象。当然了我们在序列化时并没有要求被序列化的类,一定要提供无参的公共构造函数。这样一分析在不涉及父子继承关系的类进行反序列化时,是不太可能通过调用构造函数进行创建对象的。

还有如处理日期的Calandar类  
	Calandar rightNow = Calandar.getinstance();

25、
写出5个运行时异常和两个编译时异常

答:运行时异常:
	NullPointerException 空指针异常
	ArithmeticException 算术异常
	ArrayIndexOutOfBoundsException 数组下标越界
	IndexOutOfBoundsException 索引越界异常
	NumberFormatException 数字格式异常
	编译时异常:
	IOException io异常
	ClassNotFoundException 类无法加载异常

26、
类A中有非静态方法x,类B中有非静态方法y,请问在x方法和y方法上直接使用synchronized关键字分别修饰这两个方法,那么在多线程环境下,这两个方法x和y,是否可以实现线程同步的效果?如果不可以请说明原因,并简单说明如果修改让他们实现线程同步的效果?

答:不可以,当synchronized修饰非静态方法时,锁对象为this,因此不可以实现同步将同步方法换车同步代码块并且使用同一个锁对象。

27、
抽象类与接口的区别是什么?抽象类与接口是否都有构造器,为什么?

答:
抽象类:
抽象类中可以拥有抽象方法也可以拥有非抽象方法
抽象类中可以拥有普通变量也可以拥有常量
抽象类中可以拥有着自己的构造器
接口:
接口里面所有得方法都是抽象方法
接口里面所有得变量都是静态常量
接口没有构造器
抽象类有构造器,接口没有,因为类与类是继承关系,当创建子类对象时会调用父类中的构造器。而类与接口是实现关系,当创建该类对象时会调用该类的父类的构造器。

28、
定义一个类Person,将多个Person对象存入TreeSet中,此时几种方式可以对集合中的对象进行排序?如果是把这些对象存放在List集合中,又该如何排序?

将Person存入TreeSet排序有两种方式:
a)	第一种是自然排序,实现Comparable
b)	第二种是在创建TreeSet时传入一个比较器
List本身是有序的,按照放入先后顺序去进行排序
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值