把代码的细节私有化,对外提供代码的功能
具有安全性
信息隐藏
封装性就是把普通的对象进行私有化,并对外提供get和set方法进行使用私有化对象。
什么是权限修饰?
权限修饰是对代码的一种访问权限。
权限修饰的等级
private < (不给任何权限) < protected < public
private:私有化,只有本类才能访问,其他类需要间接访问。
(不给任何权限):只有在同一个包或者在同一个类里,才能访问,其他需要导包
protected:只有在不同包的子类或者在同一个包或者在同一个类里,才能访问,其他需要导包
public:对外公开,随时访问。(文件必须只包含一个public访问基本的class(可以包含多个非public级别的class))
权限修饰只针对于,方法、变量、成员方法、成员变量。
权限修饰代码演示
class test{ //成员变量修饰 public int num = 1; protected int num2 = 2; int num3 = 3; private int num4 = 4; //成员方法修饰 public void test(){} protected void test2(){} void test3(){} private void test4(){} }
定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中
作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用
默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样
什么是构造方法
构造方法是用来初始化对象,构造方法其实就是对象new之后的右边对象( Person() ),类名称就是构造方法
创建以后可以立即给对象赋值。
方式一(无参构造方法)
public 类名称(){ //... }
方式二(全参构造方法)
public 类名称(成员变量类型 成员变量名,...){ //给成员变量赋值 成员变量名 = 成员变量名; }
注意!
构造方法不要写void, 返回值类型也不要写,构造方法不能写return。
如果你没有编写任何构造方法,编译器就会赠送你一个默认构造方法(普通构造方法),但是如果你编写了一个,那么编译器就不会再赠送默认构造方法
代码演示
//不用导包 public class main { public static void main(String[] args) { //立即给对象赋值 test test = new test("茶仙°",1); //调用方法 test.show(); //调用成员变量 System.out.println("姓名"+test.name); System.out.println("年龄"+test.age); } } class test{ //成员变量 String name; int age; //成员方法 public void show(){ System.out.println("我叫" + name + ",我" + age + "岁了"); } //构造方法 //无参构造 public test(){} //全参构造 public test(String text, int num){ name = text; age = num; } }
我们先看下面的代码
//不用导包 public class main { public static void main(String[] args) { //立即给对象赋值 test test = new test("茶仙°",1); //调用方法 test.show(); } } class test{ //成员变量 String name; int age; //成员方法 public void show(){ System.out.println("我叫" + name + ",我" + age + "岁了"); } //构造方法 //无参构造 public test(){} //全参构造 public test(String name, int age){ name = name; age = age; } }
当局部变量和成员变量名字重名的时候,由于Java采用的是就近原则,构造方法内部赋值是参数 赋值给参数,没有赋值给成员变量。
那么这时候关键字this就有作用了
this有什么作用?
this关键字是用来访问成员变量
格式
this.成员变量名 = 局部变量名;
当成员变量和局部变量的名字相同时我们想用成员变量的时候,那就要用:this关键字
如何使用this关键字
代码演示
//不用导包 public class main { public static void main(String[] args) { //立即给对象赋值 test test = new test("茶仙°",1); //调用方法 test.show(); } } class test{ //成员变量 String name; int age; //成员方法 public void show(){ System.out.println("我叫" + name + ",我" + age + "岁了"); } //构造方法 //无参构造 public test(){} //全参构造 public test(String name, int age){ this.name = name; this.age = age; } }
谁调用this谁就是this
代码测试
public class main { public static void main(String[] args) { test test = new test(); System.out.println(test);//code2.test@1b6d3586 test.addressTheThis();//code2.test@1b6d3586 } } class test{ public void addressTheThis(){ System.out.println(this); } }
这里this其实可以理解为test. xxx();
Set Get方法是当成员变量被私有化以后,Set Get方法对私有化成员变量进行间接的形式,赋值和获取。
Set方法:这个成员方法,专门用于向成员变量设置数据
格式创建
public void set变量名称(首字母大写)(int num){ 变量名称 = num; }
Get方法:这个成员方法,专门私语获取age的数据
创建格式
public 返回值类型 get变量名称(首字母大写)(){ return 变量名称; }
代码演示
public class main { public static void main(String[] args) { test test = new test(); // 这时候name 和 age不能直接调用,只能通过Set(赋值)Get(获取)方法来调用 test.setName("茶仙");//给name赋值 test.setAge(1);//给age赋值 System.out.println("名字:"+test.getName()+",年龄:"+test.getAge()+"岁");//获取name和age } } class test{ //创建成员变量,并且对其私有化:private private String name; private int age; //创建成员方法 public void show(){ System.out.println("我叫" + name + ",我" + age + "岁了"); } //创建构造方法 public test() {} public test(String name, int age) { this.name = name; this.age = age; } //创建Set Get方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
私有化(private)所有成员变量
创建无参和有参的构造方法
创建set和get方法
//标准类 class Person{ //1.私有化(private)所有成员变量 private String name;//姓名 private int age;//年龄 private String sex;//性别 //成员方法...(我这里没有写) //2.创建无参和有参的构造方法 public Person(){}//无参构造 public Person(String name, int age, String sex){//全参构造 this.name = name; this.age = age; this.sex = sex; } //3.创建set和get方法 public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setAge(int age){ this.age = age; } public int getAge(){ return age; } public void setSex(String sex){ this.sex = sex; } public String getSex(){ return sex; } }