封装
private关键字实现封装 private关键字修饰成员变量 //private修饰的成员访问权限在类中 class People{ private String name; //private修饰成员变量,实现封装 private String sex; //private修饰 sex 和 name成员属性的访问权限只能在类中 } public class Test{ public static void main(String[] args) { People people = new People(); people.name; //error 被private不能在类外访问 } }
可能你会奇怪,private修饰的成员确实实现了封装,类外都访问不到,那我们要实现类外访问呢?
getter和setter方法
我们是否想过,虽然我们的成员变量被private修饰了,无法在类外访问,我们可以通过其他方法接口,间接实现对private变量的访问。
getter方法
class People{ private String name; //private修饰成员变量,实现封装 private String sex; //private修饰 sex 和 name成员属性的访问权限只能在类中 public String getName() { return name; } public String getSex() { return sex; } } public class Test{ public static void main(String[] args) { People people = new People(); //people.name; //error 被private不能在类外访问 //通过getter方法对private属性实现间接访问 System.out.println("name:"+people.getName()); System.out.println("sex:"+people.getSex()); } }
setter方法
我们可以通过在类中创建setter方法接口将private私有属性修改!达到在类外间接访问私有属性的目的!
class People{ private String name; //private修饰成员变量,实现封装 private String sex; //private修饰 sex 和 name成员属性的访问权限只能在类中 //setter方法,可以在类外传参,在类中将私有属性修改 public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public String getName() { return name; } public String getSex() { return sex; } } public class Test{ public static void main(String[] args) { People people = new People(); //通过setter方法设置私有属性 people.setName("bug郭"); people.setSex("男"); //通过getter方法对private属性实现间接访问 System.out.println("name:"+people.getName()); System.out.println("sex:"+people.getSex()); } }
getter和setter快捷方式
在IDEA下,编译器提供了setter和getter方法的快捷方式
1.鼠标右键
2.点击Generate
我们可以选择我们要进行的操作,setter方法,getter方法或者toString方法 ,都可以一键生成!
我们也可以直接快捷键,Alt + Insert
代码块
使用{} 定义的一段代码。
根据代码块定义的位置以及关键字,又可分为以下四种:
普通代码块
定义在方法中的代码块!
class Animal{ String name; int age; public void speak(){ //普通代码块,在方法中 { System.out.println("haha"); } } }
构造块
构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。
class Animal{ String name; int age; //构造块 { System.out.println("构造方法"); } }
在new一个对象时,构造块比构造构造方法先执行!
class Animal{ String name; int age; public Animal(){ System.out.println("构造方法"); } //构造块 { System.out.println("构造块"); } } public class Test { public static void main(String[] args) { Animal animal = new Animal(); } }
静态块
静态块:由static定义的代码块!一般用于初始化静态属性!
class Animal{ static String name; //静态代码块 static { name = "bug郭"; } } public class Test { public static void main(String[] args) { Animal animal = new Animal(); System.out.println(Animal.name); } }
new一个对象时,构造方法,构造块,静态代码块三者的优先级!
class Animal{ static String name; //构造块 { System.out.println("构造块"); } //构造方法 public Animal(){ System.out.println("构造方法"); } //静态代码块 static { System.out.println("静态代码块"); } } public class Test { public static void main(String[] args) { Animal animal = new Animal(); System.out.println("========="); Animal animal2 = new Animal();//静态代码块是否还会执行??? } }
注意事项:
1.静态代码块只执行一次!
2.三者执行优先顺序:
静态代码块,构造块,构造方法
同步代码块
bug郭尚未学习到,就不做介绍!
toString方法
既然是父类中的方法我们就可以在子类中重写父类方法!
我们可以通过刚刚我们学习setter和getter快捷方式直接进行重写!
重写toString方法可以返回属性名和属性值!重写后使我们打印一个对象的属性值更快捷方便!
这就是java中类和对象所有的内容!如有遗漏,还望指出!