1、实例(全局)变量系统默认会初始化,全局可使用;局部变量使用时必须初始化,局部可使用。
2、内存分析
public static void main(String[] args) {
Student s1=new Student();
s1.name="高琪";
s1.age=38;
s1.study();
s1.sayHello("大家好");
}
3、多态 三要素继承、重写、父类引用指向子类对象
父类
public class Person {
public void eyes(Person person){
System.out.println("Person.eyes");
header(person);
}
public void header(Person person){
System.out.println("Person.header"+person.toString());
}
}
子类
public class Student extends Person{
@Override
public void header(Person person) {
System.out.println("Student.header");
super.header(person);//一般都写到第一行,这里为了测试
}
}
测试
public class MyClass {
public static void main(String[] args) {
Person p=new Student();
p.eyes(p);
}
}
效果如下:
上述结果的解释说明:调用的是子类重写的Header方法,而不是父类的Header方法;之所以调用父类header方法是因为子类header方法中有super.header方法;全局对象指的就是子类Student对象com.example.javalib.Student@75b84c92。
4、String
public static void main(String[] args) {
String s = "Hello";
String s1 = "Hello";
String s2 = new String("Hello");
System.out.println(s == s1);
System.out.println(s.equals(s1));
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
结果:
new String("Hello")是两个对象 Hello一个 new String一个。
String c=new String("a"+"b");创建了四个对象;分别为"a","b","a"+"b",new String。
String a="a";String b="a"+"b";都是只创建了一个对象。因为是实例化,会计算好后在常量池创建对象。