Java学习小心得
1.接口与抽象类的区别:
- 接口(Interface)默认是public类型的,且不可在接口中实现。而抽象类(Abstract)中可以有非抽象类方法。
- 接口中的变量默认是final类型即常量,而抽象类中不一定。
- 一个类可以继承多个接口,但是只能继承一个抽象类。
- 类继承接口必须重写里面的所以抽象方法,但是继承抽象类不用。
2.成员变量与局部变量:
成员变量初始化未赋值时会有默认值,而局部变量不会自动赋值;static只能用于修饰成员变量。
3.对象及其对象的引用的区别:
对于初学Java的朋友来讲,往往分不清对象和其引用的区别。经常能听到一句形容Java的话:万物皆对象。这指的是所以Java线程进行都伴随着对象的创建,而每个对象的模板就是类(class)。就好比人这个物种和每个独特的人的关系。
在这里举一个例子:
//创建类Demo
public class Demo{
int Number;
String Name;
}
这样就创建了一个类,即一系列对象的模板,每一个对象的Number和Name都可以不一样,但都拥有这些属性,接下来继续使用这项模板进行创建对象。
Demo demo = new Demo();
上面这一行代码其实进行了多步操作,而非仅仅对象的创建。可以分解为以下两步操作。
Demo demo; //创建一个Demo类型的引用
demo = new Demo(); //创建一个新的Demo类型对象并用demo引用指向该对象
new Demo()为创建对象动作,是以Demo类为模板,在堆空间里创建一个Demo类对象。调用的是Demo类内默认的无参构造函数。而Demo demo是创建的一个Demo类引用变量并使其指向刚创建的Demo类对象。
题外话:一个引用只能指向一个对象,但一个对象可以被多个引用所指向。
4.equals与(==)
用于比较两对象是否相等(即其引用地址是否相等),equals()正在用于比较时与相同,但若覆盖了equals方法,仅比较两对象中的内容。
举个例子:
public class test1{
public static void main(String[] args){
String a = new String("ab"); //a为一个引用
String b = new String("ab"); //b为另一个引用
String aa = "ab"; //aa引用指向常量"ab"
String bb = "ab"; //bb引用直接指向常量"ab"
if(a==b) //flase,非同一对象
System.out.println("a=b");
if(aa==bb) //true,aa与bb为常量池中同一对象
System.out.println("aa=bb");
if(a.equals(b)) //true,a与b中的内容相同
System.out.println("a=b");
if(42==42.0) //true
System.out.println("true");
}
}
5.线程有哪些基本状态?
Java线程在运行的生命周期中的指定时刻只可能处于下图的六种不同状态。
线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示。
6.final关键字:
final关键字主要用于修饰:变量,方法,类。
- 就变量,若被final修饰后,不可更改,如果是对象的引用,不可指向其他对象。
- 当final修饰一个类后,该类不可被其他类继承。final类中的所以成员方法均变为final方法。
- 使用final方法原因有俩:第一是用于对方法的锁定使其不可被修改或继承;第二是早期Java版本实现中,会将final方法转为内嵌调用,从而使得程序变得高效。