class Test_Object {
public static void main(String[] args) {
Car r = new Car();
r.color = "red";
r.num = 12;
r.run();
}
}
class Car {
String color;
int num;
public void run() {
System.out.println("run");
}
}
这个图片可能看不清,你可以保存到电脑上看,能看清的!
好了,我们在来谈谈那个让人晕B的this关键字,我们知道在调用对象的方法和实例域是这样的 引用名.方法名(参数1,参数2.....); 其实这条语句有两种类型的参数:1.隐式参数2.显示参数
而this就相当于这个隐式参数,这样说懂了吧,你也就自然而然会用了吧!!!!
好了,在来下一个知识点
三种初始化数据域的方法:
1.构造器中设置值
2.在声明中设置值 在执行构造器之前先执行赋值操作,初始值不一定是常量,还可以调用方法。
3.初始化块
由于初始化数据域有多种途径,相当混乱,让我们看一下他的具体流程:
1)所有数据域被初始化为默认值
2)按照在类中出现的次序,一次执行所有的域初始化语句和初始化块
3)如果构造器第一行调用了第二个构造器,则执行第二个构造器,执行完后执行第一个构造器
而静态域是在第一次类加载的时候初始化的。
例:
class Test1_Student {
public static void main(String[] args) {
Student s = new Student("张三");
s.show();
}
}
class Student {
private String name;
private int age=22;
private int cla;
{
cla = 133;
}
public Student(String name) {
this.name = name;
}
public void show() {
System.out.println(name+age+cla);
}
}
静态域和静态方法
class Test1_Student {
public static void main(String[] args) {
Student s = new Student("张三",22);
s.show();
}
}
class Student {
private String name;
private int age;
static int cla = 133;
public Student(String name,int age) {
this.name = name;
this.age = age;
}
public void show() {
System.out.println(name+age+cla);
}
}
图解如下:
上面提到了初始化块是什么呢??
其实是代码块的一种,代码块有局部代码块,构造代码块,静态代码块,同步代码块(多线程)。
局部代码块
在方法中出现;限定变量生命周期,及早释放,提高内存利用率
构造代码块 (初始化块)
在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
静态代码块
在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。
一般用于加载驱动
在来看一下这段代码:
class Test_private {
public static void main(String[] args) {
Student a = new Student("魏金浩",1388);
Student s = new Student("魏金浩",1386);
a.equal(s);
}
}
class Student {
private String name;
private int num;
public Student(String name,int num) {
this.name = name;
this.num = num;
}
public void equal(Student s) {
if(name.equals(s.name)) { /能执行成功吗??是不是有点奇怪
System.out.println("相等");
}
else {
System.out.println("不相等");
}
}
}
答案是肯定能访问的,用一句话来概括就是Student类的方法能访问Student类的任何一个对象的私有域!!!