封装:通俗一点来说就是把类中的某些信息进行隐藏,从而使外部程序不能直接对这些信息进行直接的访问,只能通过类中定义的方法对这些隐藏的信息进行操作和访问。
把变量私有化,并提供setter and getter方法
public class Person {
private String name;
private int age;
}
public void setage(int age)
{
this.age = age;
}
public int getage()
{
return age;
}
public void setname(String name)
{
this.name = name;
}
public String getname()
{
return name;
}
*采用 this 关键字是为了发生同名的冲突。
public class Application {
public static void main(String[] args) {
person s1 =new person();
s1.setName("宝宝");
System.out.println(s1.getName()); //输出
}
*之后赋值或者改变里面的内容要用setter,输出要用getter
静态变量:被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。更推荐用类名访问。
1.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。(通过创造一个对象来调用)
2.静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法
3.静态代码块(如果使用 static 修饰初始化块,就称为静态初始化块。):执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
4.非静态代码块在每个对象生成时都会被执行一次
5.普通成员方法内部是可以使用静态的成员方法的
6.静态方法里面是不能使用this的
7.静态代码块的执行顺序:静态代码块----->非静态代码块-------->构造函数
8.静态的最先执行,父类优先子类执行
//Animal类
public class Animal {
static {
System.out.println("Animal static{}");
}//静态代码块
{
System.out.println("Animal{}");
}
public Animal(){
System.out.println("Aniamal()");
}//非静态代码块
}
//Dog类
public class Dog extends Animal {
static{
System.out.println("Dog ststic{}");
}//静态代码块
{
System.out.println("Dog{}");
}
public Dog(){
System.out.println("Dog()");
}//非静态代码块
}
Test类
public class Test {
public static void main(String[] args) {
Dog dog=new Dog();//前面会自动补super()
}
}
输出:Animal static{} 即:父类的静态
Dog ststic{} 子类的静态
Animal{} 父类的实例(类里面方法外面)
Aniamal() 父类的构造方法
Dog{} 子类的实例
Dog() 子类的构造方法