面试总结(一):HTML/CSS div布局/数组/面向对象

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面试题:

 * 构造代码块,构造方法,静态代码的优先级?

 * 静态代码块>构造代码块>构造方法

 *

 * 静态代码:只能执行一次

 

 * 构造代码块在每次执行构造方法之前都会被执行.

 

14. final关键字的面试题?
  final,finally,finalize的区别?

15.方法重写和方法重载的区别?

Overload:给多个方法起同一个名字,还不报错---->方法重载 
   方法重载: 指的是方法名相同,参数不同,返回值没有关系
参数不同:
1)参数个数不同
2)参数类型不同

Override:由于子类继承父类的时候,提供一摸一样的方法声明,然后会将父类该方法覆盖掉(重写,复写)

猜你喜欢

转载自blog.csdn.net/liuxiaofan_/article/details/79997999