Test01
public class Demo {
public static void main(String[] args) {
short s1 = 2;
short s2 = 3;
//报错,因为byte、short、char类型的数据运算时,会自动转型为int类型,无法赋值给short类型的s1
s1 = s1 + s2;
//正确,隐含强制类型转换 s1 = (short)(s1+s2);
s1 += s2;
//正确,底层会做一个判断,2+3=5,在short类型取值范围内,则赋值给short类型
s1 = 2 + 3;
//正确,隐含强制类型转换
s1++;
}
}
//在下划线位置填入什么代码,程序不会报错:
public class Demo {
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
for (int i = 0; i < arr.length; i++) {
if (i == 2) {
__请填入代码__
}
if (i == 2) {
arr[3] = 10;
}
}
}
}
/*
A break B continue C 什么都不填 D arr=new int[4] E arr={1,2,3,4}
*/
/*
对于A和B两个选项,程序执行到该位置则终止,系统不会报错
对于C选项,程序执行到此继续往下执行,逻辑层面是正确的,故编译期不会报错;由于数组只有三个元素,所以arr[3]是不存在的,所以代码执行层面有错误,故会报运行期错误
对于D选项,相当于在堆内存重新开辟内存空间,动态初始化一个数组长度为4的数组,将其堆内存空间的地址值赋值给了栈内存引用变量arr,故此时的arr指向的是堆内存长度为4的数组,与原来的数组断开了连接,所以此时arr[3]为0
对于E选项,不可以将数组直接赋值给栈内存引用变量,引用变量只能接收数组的地址值
*/
Test03
/**
* 需要在横线处填入什么,得到如下结果:
* 清华大学
* 也叫五道口职业技术学院
*/
public class Student {
public _____ String school = "清华大学";
}
class Test{
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.school);
_____.school = "也叫五道口职业技术学院";
System.out.println(s.school);
}
}
A static Student B final Student C final new Student() D static new Student()
/**
* 分析:1、被static修饰的成员表示类的属性,被类的所有成员共享,并且建议通过类名调用,也可以通过对象调用;static修饰的
* 成员变量如果重新赋值,相当于用一个新的值替换掉原来的值,原来方法区存储的值将不存在
* 2、被final修饰的成员变量,当为基本类型时,数值不可更改;当为引用类型时,索引值不可更改;String被初始化后直接
* 方法区存储String类型的值,每次改变其值都需要重新开辟内存空间,相应的索引值也改变,所以String类型的数值
* 一旦赋值不可改变。
* 所以,BC选项是错的,对于AD选项,通过类型访问和对象访问效果一样,建议通过类名访问
*/
Test04
/**
*该程序最终的执行结果是多少?
*
*这段代码中return的作用:
*1. 返回一个值给调用方
*2. 结束当前方法, 如果碰到异常中有finally先执行finally中的代码,然后再结束方法.
*/
public class Demo{
public static void main(String[] args) {
int number = getNum();
System.out.println("number = " + number);
}
public static int getNum(){
int num = 10;
try{
// Java处理异常的方式是中断处理,一旦产生异常,try中后面的代码不运行了,直接跳转到catch代码
int a = 1/0;
//注意:此处如果用浮点类型,结果为无限大,这和JDK的处理机制有关,喜欢钻研的小伙伴可以研究下源码
System.out.println("try : num = " + num);
return num;
}catch(ArithmeticException e){
num = 20;
return num;// 做两件事情:1. 将num的值保存一份到缓冲区, 2. 然后再去执行finally中的代码
}finally{
num = 30;
System.out.println("finally中的代码执行了 num = " + num);
}
}
}
//所以执行结果为:finally中的代码执行了 num = 30
number = 20
如果将finally中的代码改为如下所示:
finally{
num = 30;
System.out.println("finally中的代码执行了 num = " + num);
return num;// 1.将num的值保存一份到缓冲区,现在的值变成了30;
}
//程序执行结果为:finally中的代码执行了 num = 30
number = 30