----this和static关键字
public class Car
{
//属性,
static String brand="红旗";
String color;
double price;
public Car(String brand,String color,double price)
{
this(color,price);
this.brand=brand;
}
public Car(String color,double price)
{
this.color=color;
this.price=price;
}
public void show()
{
System.out.println("品牌:"+Car.brand+" 颜色:"+this.color+" 价格:"+this.price);
}
public void show1()
{
System.out.println(颜色:"+this.color+" 价格:"+this.price);
}
public static void speed()
{
//this.name这是错的,静态的方法中不能调用非静态的东西,而非静态的方法里能调用静态的东西。
System.out.println(brand+"在加速,准备飞起来....");
}
public static void main(String[] args)
{
/*
Car qq = new Car("大众","白色",8000);//main方法也是静态方法,不能调用非静态的成员,但是这里不是调用非静态的成员,是创建了一个非静态的成员。
//比如在静态变量里放的brand属性,是在共享区创建了brand属性。归根结底,我是在共享区中的一个方法(main)中创建,共享区的这个方法中使用,我没出这个方法(main)以外的地方
qq.show();
qq.speed();
Car pst = new Car("黑色",40000);
pst.show();
pst.show1();
pst.speed();
**/
//这两个是类调用,把上面代码注销是为了验证类调用不用new对象,直接使用类名就行。类调用,调用的肯定是静态成员
Car.speed();//类调用静态方法
System.out.println(brand);//等价于System.out.println(Car.brand);类调用静态属性
}
}
-------------------------------------------
总结:
1.用static修饰的属性和方法,都会放在数据共享区,是在程序编译的时候进入数据共享区的。静态变量用类名.变量调用
2.当程序中属性用private修饰的时候,外界的类不能this.属性了,因为属性被那个类私有化了,但是那个类设置了公共的get、set
方法,因此外界类可以this.get方法
3.共享跟封装是对立的,因为封装是只能自己用。封装是把自己的属性和方法放在自己的对象里,用到this关键字(只是平时我们不写this关键字);
this关键字是指对一个数据的,因此this关键字不能放在共享区
4.public Car(String brand,String color,double price)的含义:
1.后面的参数实际上就是在调用带有三个参数的构造方法。
2. 写String brand是在数据共享区开辟了空间(因为他有static),写String color和double price是在堆内存中开辟了空间
3.其实写String color和double price就是在写this.color=color(set方法),这里用到了this关键字;而写static String brand其实是在写Car.brand(类.属性),这里是因为brand用到了static关键字。因为这两个关键字的用法不同,因此写String brand时候在数据共享区开辟了空间,写String color,double price的时候在堆内存开辟了空间。
5.public static void main(String[] args)
{
//1.这句话打印出:大众,白色,8000
Car qq1 = new Car("大众","白色",8000);
//2. 打印出大众,白色,40000,因为brand被共享了,第一次在上面用到了,所以第一次之后brand里面的值为大众,第二次不用在写
Car qq2 = new Car("白色",40000);
//3.这时候打印宝马,红色,66666,因为此时数据共享区的值(大众)被后面的新值覆盖了。
Car qq3= new Car("宝马","红色",66666);
//4.打印宝马,白色,666666。因为这里的brand用的是数据共享区后来的新值
Car qq4 = new Car("白色",40000);
}
6.生产doc文档:cmd-->javadoc 类名.java
public class Car
{
//属性,
static String brand="红旗";
String color;
double price;
public Car(String brand,String color,double price)
{
this(color,price);
this.brand=brand;
}
public Car(String color,double price)
{
this.color=color;
this.price=price;
}
public void show()
{
System.out.println("品牌:"+Car.brand+" 颜色:"+this.color+" 价格:"+this.price);
}
public void show1()
{
System.out.println(颜色:"+this.color+" 价格:"+this.price);
}
public static void speed()
{
//this.name这是错的,静态的方法中不能调用非静态的东西,而非静态的方法里能调用静态的东西。
System.out.println(brand+"在加速,准备飞起来....");
}
public static void main(String[] args)
{
/*
Car qq = new Car("大众","白色",8000);//main方法也是静态方法,不能调用非静态的成员,但是这里不是调用非静态的成员,是创建了一个非静态的成员。
//比如在静态变量里放的brand属性,是在共享区创建了brand属性。归根结底,我是在共享区中的一个方法(main)中创建,共享区的这个方法中使用,我没出这个方法(main)以外的地方
qq.show();
qq.speed();
Car pst = new Car("黑色",40000);
pst.show();
pst.show1();
pst.speed();
**/
//这两个是类调用,把上面代码注销是为了验证类调用不用new对象,直接使用类名就行。类调用,调用的肯定是静态成员
Car.speed();//类调用静态方法
System.out.println(brand);//等价于System.out.println(Car.brand);类调用静态属性
}
}
-------------------------------------------
总结:
1.用static修饰的属性和方法,都会放在数据共享区,是在程序编译的时候进入数据共享区的。静态变量用类名.变量调用
2.当程序中属性用private修饰的时候,外界的类不能this.属性了,因为属性被那个类私有化了,但是那个类设置了公共的get、set
方法,因此外界类可以this.get方法
3.共享跟封装是对立的,因为封装是只能自己用。封装是把自己的属性和方法放在自己的对象里,用到this关键字(只是平时我们不写this关键字);
this关键字是指对一个数据的,因此this关键字不能放在共享区
4.public Car(String brand,String color,double price)的含义:
1.后面的参数实际上就是在调用带有三个参数的构造方法。
2. 写String brand是在数据共享区开辟了空间(因为他有static),写String color和double price是在堆内存中开辟了空间
3.其实写String color和double price就是在写this.color=color(set方法),这里用到了this关键字;而写static String brand其实是在写Car.brand(类.属性),这里是因为brand用到了static关键字。因为这两个关键字的用法不同,因此写String brand时候在数据共享区开辟了空间,写String color,double price的时候在堆内存开辟了空间。
5.public static void main(String[] args)
{
//1.这句话打印出:大众,白色,8000
Car qq1 = new Car("大众","白色",8000);
//2. 打印出大众,白色,40000,因为brand被共享了,第一次在上面用到了,所以第一次之后brand里面的值为大众,第二次不用在写
Car qq2 = new Car("白色",40000);
//3.这时候打印宝马,红色,66666,因为此时数据共享区的值(大众)被后面的新值覆盖了。
Car qq3= new Car("宝马","红色",66666);
//4.打印宝马,白色,666666。因为这里的brand用的是数据共享区后来的新值
Car qq4 = new Car("白色",40000);
}
6.生产doc文档:cmd-->javadoc 类名.java