书接上文
27.内部类可以访问外部类的私有成员,外部类访问内部类的成员必须通过内部类对象才能实现
28. 非静态内部类不能定义静态变量,不能在静态方法中实例化
public class InnerTest {
private String str;
public InnerTest() {
super();
}
public InnerTest(String str) {
super();
this.str = str;
}
static class InnerA {
private String str1;
// 28
static int s;
public InnerA() {
super();
}
public InnerA(String str1) {
super();
this.str1 = str1;
}
public void Test2() {
}
}
class InnerB {
private String str1;
public InnerB() {
super();
}
public InnerB(String str1) {
super();
this.str1 = str1;
}
public void Test() {
// 27
System.out.println(str);
}
}
public void Test() {
InnerB iB = new InnerB();
InnerA iA = new InnerA();
System.out.println(InnerA.s);
}
public static void main(String[] args) {
InnerTest iTest = new InnerTest();
}
}
29.内部类的一种应用,存储常量并分类
public class ProjectConst {
public static class Const1{
public final static String classs_1="room1";
public final static String classs_2="room2";
public final static String classs_3="room3";
}
public static class Const2{
public final static String NAN = "boy";
public final static String Nv = "girl";
}
}
30. String不可变型,String str = a +b+c+d;(a,b,c,d都是String类型)此时相当于开辟了四个空间,所以因为这个原因写sql语句尽量不要用+连接字符串
31.StringBuffer多线程的;StringBuilder单线程的,不安全
32.for循环相当于使用了迭代器
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Test {
public static void main(String[] args){
Set<Integer> s = new HashSet<>();
s.add(1);
s.add(2);
s.add(3);
s.add(4);
s.add(5);
Iterator<Integer> it = s.iterator();
while(it.hasNext()){
int tmp = it.next();
System.out.println(tmp);
}
System.out.println();
}
}
33.s instanceofHashSet<Integer>会报错,泛型并不是一种类型
34.泛型前不能加static(static T a),静态方法里不能有泛型
35.两个类对象a,b a.equals(b),比较的事两个对象的地址
36.jvm会调用finalize()(垃圾回收方法)
37.arrayList适用于查找,不适用于插入删除,linkedlist适用于修改数据,因为会有下标索引
38.Set存储和查找功能强大,但不是线程安全的,有两个或以上的方法要修改数据时职能通过代码保证同步,set的元素可以是null
39. TreeSet实现了排序
40.Hashcode\equals函数要加上才能比较两个对象内部的属性
public class A {
private String par1;
private String par2;
public A(String par1, String par2) {
super();
this.par1 = par1;
this.par2 = par2;
}
public String getPar1() {
return par1;
}
public void setPar1(String par1) {
this.par1 = par1;
}
public String getPar2() {
return par2;
}
public void setPar2(String par2) {
this.par2 = par2;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((par1 == null) ? 0 : par1.hashCode());
result = prime * result + ((par2 == null) ? 0 : par2.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
A other = (A) obj;
if (par1 == null) {
if (other.par1 != null)
return false;
} else if (!par1.equals(other.par1))
return false;
if (par2 == null) {
if (other.par2 != null)
return false;
} else if (!par2.equals(other.par2))
return false;
return true;
}
public static void main(String[] args) {
A a1 = new A("qwe", "wer");
A a2 = new A("qwe", "wer");
System.out.println(a1.equals(a2));
}
}
true
如果不加hashcode函数,是会返回false的