1面试题:数据类型提升
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?
b=b1+b2;编译失败: byte,short,char之间相互不转换,一旦进行运算的,默认提升为 一个int类型。
变量相加,是先看数据类型,最终相加后的结果是否在当前这个类型范围 之内。
b=3+4; 编译正确: 常量相加,是运算,看当前结果是否在范围之内!
2看程序写结果:拼接符“+”
System.out.println("hello"+'a'+1); //helloa1
System.out.println('a'+1+"hello");//'a'+1= 98 +(拼接符) "hello" 98hello
System.out.println("5+5="+5+5); //"5+5=55"
System.out.println(5+5+"=5+5");//10=5+5
字符串拼接符号:
字符串+(字符串拼接符)任何数据=字符串
+:不仅指的是运算符,还可以去当做字符串拼接符号去使用!
3算术运算符扩展(++、--)
int a = 10;
int b = 10;
int c = 10;
答案:a = b++; //a=10,b=11, c=10
c = --a;// a=9, b=11,c=9
b = ++a;//a=10,b=10,c=9
a = c--;//a=9, b=10,c=8
int x = 4;
int y = (x++)+(++x)+(x*10);
答案://x = 4
// y = 4 + 6 + (6*10)
4面试题:
short s=1;
s = s+1;
错-----改进:s=short(s+1);
short s=1;
s+=1;
对-------
对于扩展的赋值运算符
s+=1
不等价于 :s = s +1 ;
等价于: s = (s)(s+1) ;
扩展的赋值运算符隐藏了强制类型转换!
5面试题: 逻辑双与&& 和逻辑单与&的区别?
a:共同点:效果是一样的
b:逻辑双与&& ,如果左边的表达式如果是false,那么右边不执行(具有短路效果)
逻辑双|| :如果左边的表达式是true,那么右边不执行(具有短路效果)
实际开发中:
逻辑双与&& 用的是最多的!
6看程序写结果
(1) int x = 2 ;
int y = 3 ;
switch(x) {
default:
y++;
break ;
case 3:
y++ ;
case 4:
y++;
}
System.out.println("y的值是:"+y);
结果:y=4
(2) int a =2 ;
int b = 3 ;
//switch语句的结束条件: 1)语句break结束,2)程序默认执行的末尾
switch(a) {
default :
b++ ;// 4
case 3:
b++ ;//5
case 4:
b++;//6
}
System.out.println("b的值是:"+b);
结果:b=6
7 while循环和for循环的区别?
1)如果从内存角度考虑,for循环要优于while循环,for循环语句执行完毕之后,变量会及时被GC垃圾回收期回收掉
while循环,它可以去访问循环语句中的变量
2)根据具体需求具体分析,
如果循环次数明确的情况下,应用for循环
如果不知道要循环多少次,应该去使用while循环
8 for循环,while循环,do-while循环,他们之间的区别?
do-while和前两者之间最大的区别:循环体语句至少执行一次
实际开发:优先考虑 for循环,其次while循环,最后,do-while
9 面试题
跳转控制语句break、continue、return的区别?
break:表示中断,结束的意思,结束语句;
break:不能单独使用,一般在switch语句,或者循环语句中使用
continue:继续的意思,跳出当前循环,直接进入一次循环
continue:单独是不能使用的,在循环语句中使用多
retrun :方法的返回值 ,会带回一个结果
10 笔试题:
for(int x=1; x<=10; x++) {
if(x%3==0) {
//在此处填写代码
}
System.out.println(“Java基础班”);
}
我想在控制台输出2次:“Java基础班“
break;
我想在控制台输出7次:“Java基础班“
Continue;
我想在控制台输出13次:“Java基础班“
System.out.println(“Java基础班”);
常见死循环:
注意事项:时刻控制循环语句中的变量
while(true){ 用的多
很多逻辑..
结束掉;
}
for(;;){
}
11面试题:
* 成员变量和局部变量的区别
* 1)在类中位置不同
* 成员变量:类中,方法外
* 局部变量:方法声明上,或者再方法定义中
* 2)在内存中的位置不同:
* 成员变量:堆内存
* 局部变量:栈内存
* 3)生命周期不同:
* 成员变量:成员变量是随着类的加载而加载,随着类的消失而消失
* 局部变量:随着方法的调用而存在,随着方法调用完毕而消失
* 4)初始化值不同
* 成员变量:初始化由系统默认初始化,
* 对于成员变量,可以不给初始化值,由系统给,然后显示初始化;
* 局部变量:定义一个局部变量,必须进行初始化,如果不初始化,无法使用(在使用之前进行初始化)
12面试题:
* 有一个学生类:Student 里面有一些属性
* 在测试类中创建学生类对象,经历了哪些属性:
* Student s = new Student() ;
13面试题:
* 构造代码块,构造方法,静态代码的优先级?
* 静态代码块>构造代码块>构造方法
*
* 静态代码:只能执行一次
* 构造代码块在每次执行构造方法之前都会被执行.
final,finally,finalize的区别?
15.方法重写和方法重载的区别?
Overload:给多个方法起同一个名字,还不报错---->方法重载方法重载: 指的是方法名相同,参数不同,返回值没有关系
参数不同:
1)参数个数不同
2)参数类型不同
Override:由于子类继承父类的时候,提供一摸一样的方法声明,然后会将父类该方法覆盖掉(重写,复写)