(wait()或者notify()必须采用当前锁调用 ) && (类.方法VS对象.方法)

public class Test1 {
public static void main(String[] args) {
Integer a = 100;
Integer b = 100;
System.out.println(a==b); //true
System.out.println(a.equals(b)); //true

    Integer c = 500;
    Integer d = 500;
    System.out.println(c==d);  //false
    System.out.println(c.equals(d)); //true
}

}
/**
* Integer 的封装类中,其内部开辟了一块缓存区,用于存放-128~127 的大小的数,当从外部创建的对象值(int)在此区域是,直接从缓存区中区数据的引用即可,即,a 和 b 元素都是内存将同一块的地址的引用返回;即相同的地址;当数据不在此区域时,此时类的内部实现是重新在堆上new 一块区域,此时地址肯定肯定不一样;就像c 和 d 都是分别各自new 了一块区域,此时== 肯定不一样,equal()系统的实现方法是直接是值的比较所以都是true.
*/

/*public class Test2 {
public static void main(String[] args) {
Object obj = new Object();
synchronized(Thread.currentThread())

{
    obj.wait();
    obj.notify();
}

}
}
/**
* 1 编辑通过不了,其的结果:
*Exception in thread “main” java.lang.Error: Unresolved compilation problem:
Unhandled exception type InterruptedException
*/
/*public class Test2 {
public static void main(String[] args) {
Object obj = new Object();
synchronized(Thread.currentThread())
{
try {
obj.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

    obj.notify();
  }

}*/
/*
* 2 编辑可以通过,其结果:
* Exception in thread “main” java.lang.IllegalMonitorStateException
*/

/**
*最佳方法:
* 1 wait()函数必须进行异常捕获;
* 2 调用wait()或者notify()必须采用当前锁调用,即必须采用synchronized中的对象
*/

package secondDay;

public class Test3 {
public static void main(String[] args) {

   String str = new String("xyz");

   System.out.println(2<<3); //16   
}

}
/*
* 1 描述JVM 加载 Java 文件的过程和目的?
* 答:.java 文件先通过编译器(如eclipse)先编译成.class 文件,他是字节码文件,不是机器最终运行的机器码,程序运行的时候,虚拟机再把每一条要执行的字节码送给解释器(不同的平台,解释器的解释方式不同),解释器,将其翻译成特定的机器上的机器码。不同的平台的解释器的解释方式不相同,翻译出来的机器码也不相同,所以可以跨平台。
* 2 String s = new String(“XYZ”):创建了几个String Object?
* 答:两个。
* 3 char 型变量中能不能存储一个中文汉字,为什么?
* 答: 可以的,因为java 是一unicode编码,一个char 占16 个字节,一个汉字也是16个字节。
* 4 两个对象值相同(x.equal(y)== true),却可以有不同的hash code 对吗?
* 答: error .hash code 肯定相同
* 5 两个对象有相同的hash code ,两个对象的(x.equal(y) == true )对吗?
* 答:error。
*/

public class Test4 {
private static void testMethod()
{
System.out.println(“testMethod”);
}
public static void main(String[] args) {
((Test4)null).testMethod(); //运行正常 输出 testMethod
}
}
/**
* 注解:
* 1 此处是类对方法的调用,不是对象对方法的调用,
* 2 方法是static 静态方法, 直接使用”类.方法” 即可, 因为静态的方法使用不依赖对象是否被创建,null 可以被强制转换成任意类型(不是任意类型对象), 于是,可以通过它来执行静态方法
* 3 非静态的方法用”对象.方法”的方式, 必须依赖对象别创建后才能调用, 若将,testMethod()方法前的
* static 去掉,则会报空指针异常,此处也验证了2 的观点.
*
*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值