一、关于java类的构造方法
在java中,构造方法是用来初始化一个实例对象的,与一般的实例方法不同之处在于三个方面:修饰符、返回值、命名
1.构造方法不能有非访问性质的修饰符,如static、final、abstract等。
2.构造方法是没有任何返回值类型的,看上去是默认带了个void,实际上是啥也没有。
3.命名的话,直接就是采用类名,然后自己没有写构造方法的话,系统会默认给加一个无参构造,如果自己写了一个有参构造的话,最好也给加上一个无参构造。因为如果这个类有子类的话,new 子类的实例对象时,子类的构造器会调用父类的无参构造。
然后我们可以知道抽象类实质上是有构造方法的,因为它是可以被继承,所以它必定需要有一个无参构造。
哦,对了,在类的静态方法中是不能用this,和super这两个关键字去取实例对象中的东西的,因为这两个关键字属于非静态的。
二、String的三种类型
- String
String是不可变类。在他的源码中可以看到,String类是带final修饰符的。
在每次对String的实例进行修改时,实质上是新new了一个String类,然后将生成的子串,放在了这个新的String实例中的,最后将原来的引用指向这个新的实例。 - StringBuffer
StringBuffer对象是一个可变序列的字符串,是一个线程安全的类。
能通过toString转换成String对象。 - StringBuilder
StringBuilder对象基本和StringBuffer相同,可变,方法也差不多,但没有实现线程安全,相应的,速度也更快,通常情况下使用可变子串,都是用StringBuilder类的。
三、equals与== 的真正区别
==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
==指引用是否相同, equals()指的是值是否相同
这几个都是在上次java测试中发现的不足的一部分。