在第五天的时候,学习了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()赋值
使用带参构造方法直接创建带有属性值的对象