1:math.random()
math.random(11.5)=12
math.random(-11.5)=-11
math.random(11.45)=11
math.random(-11.45)=-11
math.random(11.52)=12
math.random(-11.52)=-12
2:能够应用switch判断的类型:
byte,char,int,short以及所对应的封装对象,此外还有enum类型
3:面向对象特性
封装,继承,多态
一个类实现了一个接口(或继承一个抽象类),就必须实现该接口(该抽象类)里的所有方法,除非该类是抽象类。
4:多线程
进程和线程的联系
每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程之间不能共享变量;
而线程是运行在进程内部的,每个正在运行的进程至少有一个线程,而且不同的线程可以在进程范围内共享数据。
声明一个线程的两种方法:
一:继承自Thread类,
public class ThreadTest1 extends Thread {
public void run() {
System.out.println("threadTest1 invoke");
}
}
二:实现Runnable接口
public class ThreadTest2 implements Runnable {
public void run() {
System.out.println("threadTest2 invoke");
}
}
这两种方法在启动的时候方式有所不同:
ThreadTest1 t1 = new ThreadTest1();
t1.start();
Thread t = new Thread(new ThreadTest2());//第二种ThreadTest2 类就没有start方法。
t.start();
线程分为六种状态:新建,可运行,阻塞,等待,定时等待,死亡状态。
sleep()和wait()的区别
sleep()方法是Thread类中的方法,wait()是object类中的方法
sleep()是一个静态方法,可以这么使用,如在run方法里写Thread.sleep();
实现同步的方式:
给一个方法增加synchrinized就可以使该方法称为同步方法,方法可以是静态的或非静态的,但不能是抽象类里的抽象方法,也不能是接口中的接口方法,
当一个线程进入到一个对象的同步方法以后,这个对象的所有同步方法(还有同步块)就都被锁定了,在此期间,其他任何线程都不能访问这个对象中的任意一个同步方法;在一个对象被某个线程锁定之后,其他线程是可以访问这个对象的非同步方法的。
5:逻辑运算符
逻辑运算符可以操纵byte,short,int,long,char,但不能操纵float,double
逻辑运算符是遵循短路形式的,而按位运算符是不遵循短路形式的。
6:移位运算符
<<:左移:低位补0
>>:右移:正数高位补0;负数高位补1
>>>:无符号右移:无论正负,高位补0
byte,short,char在做移位之前,都会自动被转换成int类型,然后再做移位运算。
byte,short,char,int在移位以后就都是int型
1<<35 = 1<<(35%32) = 1<<3 = 8;