在第五天的时候,学习了private关键字的使用,今天首先来对它进行简单的运用
我们先定义一个学生类
public class Student { //成员变量 private String name; private int age; //get/set方法 public void setName(String n){ name=n; } public String getName(){ return name; } public void setAge(int a){ age=a; } public int getAge(){ return age; } public void show(){ System.out.println(name+","+age); } }
再写一个测试类,把他作为主类
public class StudentDemo { public static void main(String[] args) { //创建对象 Student s = new Student(); //使用set方法给成员变量赋值 s.setName("林青霞"); s.setAge(30); s.show(); //使用get获取成员变量的值 System.out.println(s.getName() + "----" + s.getAge()); } }
接下来学习this关键字,继续使用上面的实例,将学生类改为
public class Student { //成员变量 private String name; private int age; //get/set方法 //public void setName(String n) { // name = n; //} public void setName(String name) { //用了this修饰的name是成员变量,没有修饰的是局部变量 this.name = name; } public String getName() { return name; } //public void setAge(int a) { // age = a; //} public void setAge(int age){ this.age=age; } public int getAge() { return age; } public void show() { System.out.println(name + "," + age); } }
测试类保持不变,发现在进行setName方法的时候假如方法中的局部变量名称也设为相同的,name或者age时,在输出的时候会变成null
这是因为程序无法自动识别局部变量和成员变量,此时this关键字的作用就提现了出来
①this修饰的变量用于指代成员变量
方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
方法的形参没有与成员变量同名,不带this修饰的变量值的是成员变量
②什么时候用this呢?解决局部变量隐藏成员变量
③this:代表所在类的对象引用
方法被哪个对象调用,this就代表哪个对象
在学习了this的基本使用后,需要了解this的内存原理
在学习完关键字后,终于进入了封装的学习,java是一个面向对象的语言,他有三大特征,封装,继承,多态。
封装的原则:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供 的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法
封装的好处:通过方法来控制成员变量的操作,提高了代码的安全性。
把代码用方法进行封装,提高了代码的复用性。
在上面的代码练习中,其实已经学习了封装的使用,下面要学习一种特殊的方法
构造方法:它的作用是创建对象,功能主要是完成对象数据的初始化。
格式:
public class 类名{
修饰符 类名(参数){
}
}
下面来看一个实例,创建一个学生类
public class Student { //成员变量 private String name; private int age; //构造方法 public Student() { System.out.println("无参构造函数"); } public void show() { System.out.println(name + "," + age); } }
再写一个学生测试类
public class StudentDemo { public static void main(String[] args) { //创建对象 Student s = new Student(); s.show(); } } /*最后输出结果为 无参构造函数 null,0 */
可以看到构造函数在测试类中没有被调用,却出现在了结果中,在我们在调用Student()的时候就调用了构造函数。
在没有构造方法使用的调用方法,系统会默认调用一个无参的构造方法,自然也不会有输出,但是如果使用了构造方法,系统将不会再提供默认的无参构造方法,要使用需要手动给出
新建一个学生类
public class Student { //成员变量 private String name; private int age; // public Student() { // System.out.println("无参构造函数"); // } //手动给出的无参构造函数 public Student() { } public Student(String name) { this.name = name; } public Student(int age) { this.age = age; } public Student(String name, int age) { this.name = name; this.age = age; } public void show() { System.out.println(name + "," + age); } }
测试类
public class StudentDemo { public static void main(String[] args) { //创建对象 Student s = new Student(); s.show(); Student s2 = new Student("林青霞"); s2.show(); Student s3 = new Student(30); s3.show(); Student s4 = new Student("林青霞",30); s4.show(); } } /* 最后输出结果为 null,0 林青霞,0 null,30 林青霞,30 */
今天的最后,了解一下标准类的制作
①成员变量
使用private修饰
②构造方法
提供一个无参构造方法
提供一个带多个参数的构造方法
③成员方法
提供每一个成员变量对应的getXxx()/setXxx()
提供一个显示对象信息的show()
④穿件对象并未其成员变量赋值的两种方式
无参构造方法创建对象后使用setXxx()赋值
使用带参构造方法直接创建带有属性值的对象