您的位置:首页 > 职场人生

Java面试——基础

2016-07-27 15:18 411 查看
1,作用域,Java只有public,protect,private,默认是default相当于friendly

作用域当前类 同一package子类 其它package
publicTTTT
protectTTTF
privateTFFF
defaultTTFF
    值得注意的是默认default,同一个package下的其它类可以访问,当如果是子类就不可以访问。

2,String

String str = new String("hello");究竟做了什么,与String str="hello"    

      String str = "hello"; 如果内存中已经为hello字符串分配了内存,那么str指向hello内存对象的地址;
      String str = new String("hello"); 内存中重新分配一片内存区域存放hello, 然后str指向hello,也就是内存中实际有2个hello对象,而且存放的地址不一样


String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);


输出是false. == 比较的是对象的地址,str1是指向hello的引用,而str2是指向he的和llo地址的地址的引用。

equals()比较的是对象的内容。

3,基本数据类型

  boolean:false

  byte: 0,-128-127

  int:0,4个字节,-2的31次方-2147483648,2的31次方

  short:0,2个字节,-2的15次方-32768,2的15次方-1,-1:32767

  long:0L.64位

  float:0.0,

    初始化时:float f = 1.0f;

  double:0.0,

  object:null,

  char:/u0000

char a = 10;//打印a,什么都没有
char s = '2';//打印s,2

自动装箱和自动拆箱:

  
Integer i =
10
;
//装箱


0.6332的数据类型是()

A float B double C Float D Double

答案:B

解析:默认为double型,如果为float型需要加上f显示说明,即0.6332f

存在使i + 1 < i的数吗()

  答案:存在

  解析:如果i为int型,那么当i为int能表示的最大整数时,i+1就溢出变成负数了,此时不就<i了吗。

扩展:存在使i > j || i <= j不成立的数吗()

答案:存在

解析:比如Double.NaN或Float.NaN

下面程序的输出结果

class People {
String name;

public People() {
System.out.print(1);
}

public People(String name) {
System.out.print(2);
this.name = name;
}
}

class Child extends People {
People father;

public Child(String name) {
System.out.print(3);
this.name = name;
father = new People(name + ":F");
}

public Child() {
System.out.print(4);
}

}


View Code
  new Child("mike")

  输出:132

  执行顺序:总之,一句话:子类没有显示调用父类构造函数,不管子类构造函数是否带参数都默认调用父类无参的构造函数,若父类没有则编译出错。

7,Java关键字

transient:不会被序列化

static:Java中是否可以覆盖(override)一个private或者是static的方法?

"static"关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。
static方法跟类的任何实例都不相关,所以概念上不适用。

8,GC

  名词解释:

年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC
Major GC 是清理永久代。
Full GC 是清理整个堆空间—包括年轻代和永久代。

  垃圾回收机制在什么时候运行?

    系统自身决定,不可预测的时间/调用System.gc(),具体来讲,新生代对象区满时,当升级的老年代对象大于老年代占用的空间,

    从gcroot搜索已经不可达标记过重新扫描仍然没有复活,

  垃圾回收的对象是什么?

    从gcroot搜索不到,而且经过第一次标记、清理后,仍然没有复活的对象。垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身

  垃圾回收的机制?

9,JDK JRE

  JDK:开发环境,有各种工具包,包括jre

  JRE:运行环境,包括jvm.

  10,java控制语句

    switch:case如果没有break,从适合的条件下依次运行。输入为2时,case2开始执行,case3执行。最后返回10。

public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
System.out.println(1+":"+result);
case 2:
result = result + i * 2;
System.out.println(2+":"+result);//打印
case 3:
result = result + i * 3;
System.out.println(3+":"+result);//打印
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: