package Lianxi2;
public class People {
private int age;
private String name;
private String country;
People(){}
People(int age, String name,String country){
setAge(age);
setName(name);
setCountry(country);
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public String getCountry() {
return country;
}
public void setAge(int age) {
if(age>0&&age<250){
this.age = age;
}else{
System.out.println("年龄不合理");
}
}
public void setName(String name) {
this.name = name;
}
public void setCountry(String country) {
this.country = country;
}
public void show(){
System.out.println("我是"+ getName()+"来自"+getCountry()+getAge()+"岁了");
}
}
package Lianxi2;
public class PeopleTest {
public static void main(String[] args) {
People p = new People(20, "guo ", "中国 ");
p.show();
People p2 = new People(50, "guo ", "中国 ");
p2.show();
}
}
static存在方法区。
不加static的时候,每个成员变量都属于对象层级,每次新new对象的时候就会创建一次。
非静态可以访问静态,但是静态的方法不能访问非静态。 因为非静态的成员或者方法是在创建对象之后才产生的,如果没有创建对象那么就不存在,因此访问是没有效果的,java设置成不能访问。
静态成员中没有this关键字,因为是通过类名.的方式调用的。
如果priviate修饰,不管后面是什么,哪怕是static,在外面访问的时候也要用共有的get set方法。
static修饰之后,就不可以用this,this一般是在对象层级。
country被static之后,下面的get set 方法也得是static修饰的,此时,原来get set 中写的this就要修改成类名.来引用。
只要是private修饰了,在main中(类外)就不能访问,必须用set get。
其实就是没有用private之前,可以直接访问成员变量:p.age
但是private之后,就要写成:p.getage,因此private还要提供get set方法。
构造块的执行要优先于构造方法。
比如可以对成员变量进行统一初始化。
由于可以有多个构造方法可以有很多个版本,但是构造块只有一种,因此单单使用构造方法对成员变量进行初始化会太局限。
静态代码块:用static修饰的构造块。
由于static是类层级,因此静态代码块优先于构造块执行,随着类的加载执行,且由于类的加载只有一次,即使对象可以创建无限次,静态代码块也依然只能执行一次。但是 代码块会随着对象的创建而无限次。