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里面的地址间接指向;