JAVA 面试知识点 1 -- core java 细节

会保持更新

找工作复习java的时候发现之前的一些笔记。整理到这里好了,还可以用ctrl + f 迅速查找。
一些java细节的问题,平时注意不到,但是面试的时,online测试会冒出来。 或者是注意不到就会踩到坑的问题。

关于Object:

Object 的方法们:

很重要因为所有的object都会有这些方法:

  • clone() 复制一个自己,以后再说。
  • equals(Object obj) 判断一个obj是不是和自己相等,通常需要被override。 如果不override就会判断 reference。 就是 x==y。
  • finalize() 用来删除这个object在garbage collection的时候.
  • getClass() 返回 这个object runtime 的class . 不是编译的时候的class
  • hashCode() 返回一个int。通常需要和equals同时被override。
  • toString() 返回一个用来描述自己的string。
  • notify()
  • void notifyAll()
  • void wait()
    上面三个方法跟多线程/并发有关。以后再说。

note:

  1. equals 和hashCode
    这两个是经常被需要override的,
    关于hashCode的override需要注意以下general contract:

    • 对同一个object,不管调用多少次hashCode()必须返回相同的值。比方说不能返回一个random的int。
    • 如果两个object – obj1 和obj2。 如果obj1.equals(obj2), 那么需要obj1.hashCode() == obj2.hashCode()。 反过来不需要(string就是例子)。
    • 虽然obj1.hashCode() == obj2.hashCode()并不要求obj1.equals(obj2)。 但是hashCode的值需要尽量均匀分布。

    最后,重要的事说三遍:
    hashCode中间的C 是大写
    hashCode中间的C 是大写
    hashCode中间的C 是大写

  2. equals 和 “ == ”

  • equals是object自己定义的判断条件。在下面string的例子里,equals被override成如果是一样的值则返回true,所以 a.equals(c)返回true。
  • “ == ”通常用来比较primitives, 像int, boolen,float。如果用来比较object, 则是比较reference。
  • 如果equals没有被override,则比较的也是reference。

关于String

String是Object的子类,但是比较特殊, 因为有string pool的存在。

String a ="a string";
String b = "a string";
String c = new String("a string");
System.out.println(a==c); // false
System.out.println(a.equals(c)); //true
System.out.println(a==b); // true

a 和b是常用的创建String 的方法, 第一行代码在memory创建了一个String, 它的名字叫做a. a被放到了一个叫做string constant pool的地方。 当我们创建b的时候,b和a 是一样的字符串,这时候java就会简单的把b指向已经存在在string pool里的 “a string”。但是用new关键词创建的string不会进string pool。
string pool工作原理另: memory heap 是run-time的时候操作用的。用来装classes和objects的。

Wrapper class(Integer/int, Doble/double)

int和double是 primitive type。 Integer 和 Double是class, 是Object 的儿子,所以有object的所有方法和属性。
每一个primitive type都有wrapper class

  • byte – Byte
  • short – Short
  • int – Integer
  • long – Long
  • boolean – Boolean
  • char – Character
  • float – Float
  • double – Double
    从java 5 开始有了autoboxing, primitive和wrapper class之间可以自动转换。
Integer x = 10, y = 10;
System.out.println(x==y); // true 
System.out.println(x>=y); // true (Autoboxing is applied)

Integer x = 1000, y = 1000;
System.out.println(x==y); // false (10 is out of the range between -128 and 127)
System.out.println(x>=y); // true (Autoboxing is applied)
Double x = 3.1, y = 3.1;
System.out.println(x==y); // false (compare real references)
System.out.println(x>=y); // true (Autoboxing is applied)

double x = 3.1, y = 3.1;
double u = 3.1 + 0.05;
double v = 3.2 - 0.05;
System.out.println(x==y); // true
System.out.println(u==v); // false

int x = 5, y = 0
System.out.println(x/y); // throws ArithmeticException
double x = 3.5, y = 0;
System.out.print(x/y); // infinity 

java程序入口

先来个hello world

public class HelloWorld {
    public static void main(String[] args) {
        // Prints "Hello, World" to the terminal window.
        System.out.println("Hello, World");
    }
}

main方法是整个application的入口,看上去很简单。那么。。。

来套问题

1.两个public分别是什么意思,可以改成别的值么
2. static是什么意思,可以去掉么
3. void是什么意思,可以改成别的值么
4. String[] 是什么意思,可以改成别的类型么
5. args是什么意思
6.可以加一个final么
7. 可以throw 一个exception么
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值