1. java程序执行:
2. jdk和jre的区别:
jdk面向开发人员,可以进行调试;
jre面向使用人员,只能运行java程序。
3. 输入数据方法:
BufferedReader buf =
new BufferedReader(new InputStreamReader(System.in));
String str = buf.readLine();
/*-------------优化后--------------*/
Scanner reader = new Scanner(System.in);
double num = reader.nextDouble();
4. 浮点数之间不能做“==”的比较,结果不正确。
5. >>与>>>的区别:
>>区分正负数右移,正数补0,负数补1。
>>>不区分正负数右移,一律补0。
6. 栈内存和堆内存:
基本数据类型和引用变量都存放在栈内存,当new了一个变量时,便会在堆内存产生一个对象变量,而栈内存存放这个对象变量的首地址。当变量置为 null 时,在堆内存的此变量将会在特定时间内被垃圾回收器回收。
7. 成员变量修饰符volatile:易失修饰符,指定改变量可以同时被多个线程控制和修改。
成员方法修饰符synchronized:同步修饰符,对同步资源加锁,以防止其他线程访问。
8. 方法中的可变参数:
返回值类型 方法名(固定参数列表,数据类型…可变参数名)
eg:void display(int x,String…arg) //arg相当于数组名,用数组名提取可变参数的值。
9. 构造方法:一个类中只定义了有参的构造方法,则不能调用无参的构造方法。
10. 静态初始化器:在类被加载入内存时只执行一次,与创建多少对象无关,而构造方法new多少次就被调用多少次。
静态修饰的成员优先被执行。
static{
}
9. Java语言的垃圾回收:当一个对象没有被引用时,系统就会自动清除这些无用对象进行内存回收。当一个对象只要被引用了,系统就不会回收它,这也是Java占内存的原因。
10. 字符串比较:使用“==”是比较两者在内存中的地址是否相同,而使用“equals()”是比较两者的内容是否相同。
11. 使用覆盖时,才存在父类对象调用子类成员。而子类只需继承即可使用父类非私有成员。
12.抽象类
抽象类方法也已为一般方法也可以为抽象方法。
继承抽象类的子类必须实现抽象类的所有抽象方法。
13. 接口
接口的成员都是公共的,在定义时可省略,而在实现时不可省略。
接口的数据成员都是静态且初始化的,默认为public static final。
接口的抽象方法(省略修饰符),默认为public abstract。
默认方法可以不被实现,也可被覆盖。
14. 线程
通过继承Thread或实现Runnable接口,并重写run()来激活线程。run()为实现线程的代码。
一般通过start()启动线程,而不是通过run()。
Runnable接口本身并无线程功能,需要注入到线程对象中。