Java语言基础(七)
A.封装概述:是指隐藏对象的属性和实现的细节,只对外提供公共的访问方式; 好处:隐藏实现的细节,提供公共的访问方式 提供代码的复用性 提高安全性 B.封装原则: 1).将对外不需要提供的内容都隐藏起来; 2).将属性隐藏,对外提供公共的方法; private关键字: 是一个权限修饰符; 可以修饰成员(成员变量和成员方法) 被private修饰的成员只能在本类中被访问; C. private常用的案例: 一个成员变量用private修饰; 对其提供setXxx()方法和getXxx()方法对其访问; 一个标准的案例使用过程; 例如:学生类 姓名 学号 年龄 班级
代码: ************************************************************************************************************************************************************** class StudentNew{ //封装学生类的属性 private String Name; private int Number; private int Age; private String Grade; //得到学生的姓名 public void seName(String Name){ this.Name=Name; } //得到学生的学号 public void setNumber(int Number){ this.Number=Number; } //得到学生的年龄 public void setAge(int Age){ this.Age=Age; } //得到学生类的班级 public void setClass(String Grade){ this.Grade=Grade; } //返回学生的姓名 public String getName(){ return Name; } //返回学生的学号 public int getNumber(){ return Number; } //返回学生的年龄 public int getAge(){ return Age; } //返回学生的班级 public String getGrade(){ return Grade; } //上述代码也可用Alt+shift+s快捷实现增加代码的xiaolv,也可以点source实现; } public class StudentNewDemo { public static void main(String[] args){ //定义一个学生类对象 StudentNew stu=new StudentNew(); stu.seName("高圆圆"); stu.setNumber(7); stu.setAge(18); stu.setClass("初三一班"); //输出这个学生类对象 System.out.println("姓名:"+stu.getName()+"\t"+"学号:"+stu.getNumber()+"\t"+"年龄:"+stu.getAge()+"\t"+"班级:"+stu.getGrade()); //定义第二个学生类对象 StudentNew stu1=new StudentNew(); stu1.seName("赵又廷"); stu1.setNumber(8); stu1.setAge(19); stu1.setClass("初三二班"); //输出这个学生类对象 System.out.println("姓名:"+stu1.getName()+"\t"+"学号:"+stu1.getNumber()+"\t"+"年龄:"+stu1.getAge()+"\t"+"班级:"+stu1.getGrade()); } } ************************************************************************************************************************************************************
输出结果:
姓名:高圆圆 学号:7 年龄:18 班级:初三一班 姓名:赵又廷 学号:8 年龄:19 班级:初三二班
*************************************************************************************************************************************************************
D.this关键字: 代表:所在类的对象引用(方法被哪个对象引用,this就代表哪个对象) 什么时候用: 局部变量隐藏成员变量
例如
class Person{ private int age; public void setAge(int age){ //把局部变量赋值给成员变量这个this.age指的就是类中的age,如果没有this就近原则指的就是局部变量的赋值 this.age=age } }
E.构造方法 构造方法的作用:给对象的数据进行初始化; 构造方法的格式:方法名与类名相同; 没有返回值类型,连void都没有; 没有具体的返回值;
构造方法的注意事项:如果你不定义构造方法,系统会默认一个构造方法; 如果你提供了一个构造方法,系统将不再提供构造方法; 构造方法可以重载; 成员方法 其实就是我们前面讲过的方法 方法具体划分: 根据返回值: 有明确返回值方法 返回void类型的方法
根据形式参数 无参方法
带参方法 F.一个类的基本格式: 类 成员变量 构造方法:无参构造; 有参构造; 成员方法 setXxx(); getXxx(); 给成员变量赋值方式: 无参构造方法:setXxx(); 带参构造方法
标准类案例: 用getXxx()比较麻烦,增加show(),如果不单独获取数据可以不用getXxx();
class Person{ private String Name; private String Country; private String Gender; //使用带参构造初始化 public Person(String Name,String Country,String Gender){ this.Name=Name; this.Country=Country; this.Gender=Gender; } public void showPerson(){ System.out.println("姓名:"+Name+"\n"+"国籍:"+Country+"\n"+"性别:"+Gender); }
} public class PersonDemo { public static void main(String[] args){ Person p=new Person("高圆圆","中国","女"); p.showPerson(); }
} *********************************************************************************************** 输出结果: 姓名:高圆圆 国籍:中国 性别:女
G.类的初始化过程: Person p=new Person();在内存中做了几件事情? 6件事情: 1)给Person p在栈内存中分配空间; 2)给 new Person()在对内存中分配空间; 3)通过加载Person类加载成员变量,默认初始化值; 4)显示初始化:通过构造方法进行数据初始化; 5)通过创建对象进行赋值操作; 6)给堆内存标记一个内存空间的地址值:Person p里面的地址间接指向;