package stage1;
/*
* this 关键字
* this 存储在堆内存的对象中,保存了一个指向该对象的地址
* this 是一个引用&变量
* this 不能用在带static 的方法中
* 没有关键字static 的方法被称为实例方法
* 没有关键字static 的变量被称为实例变量
* 实例方法/变量需要通过引用访问
* 带有static 的用类名.的方式调用
* static 方法没有this
* 用来区分局部变量和实例变量时this.不能省略
* 可以直接在构造方法中用this(实参)调用另一个构造方法
* this()只能出现在构造方法第一行
*/
public class Day008 {
int num=0;
static int sum=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Day008 dy=new Day008();
String s="hello";
//-----------------
Day008.show(s);
show(s);
//----------------
// Dy008 s1=new Dy008();
// s1.name="s1";
// s1.show();
//不带static 用对象访问
System.out.println(dy.num);
//带static 用类名.的方式
System.out.println(sum);
//与show(String s)同理,无法直接访问fun()
//fun();
}
public static void show(String s) {
System.out.println(s);
//不能直接访问fun()
//fun();
}
//不能带String 参数,否则和带static的show冲突
//show()是实例方法需要用引用.的方式调用
public void show() {
System.out.println("hello");
}
//调用fun()方法必须要有对象,对象中默认带有this,所以能直接调用show()
public void fun() {
show();
//等同于
this.show();
}
}
class Dy008{
String name;
public Dy008(String s) {
this.name=s;
}
public void show() {
System.out.println(this.name);
}
//不能省略this的情况
public void setName(String name) {
//实例变量name 局部变量name
this.name = name;
//java 就近原则
//name=name
}
//设置name 默认值mmm
public Dy008() {
//一下两行代码效果一样
this("mmm");
this.setName("mmm");
}
}