构造方法
-
特点
构造方法的名字和类名相同
构造方法的修饰符,只有访问权限修饰符
没有返回值类型或void -
举例
public class Student {
// 属性(成员变量)
String name;
int age;
String clazz; // 班级
String hobby; // 爱好
// 无参的构造方法,创建对象,系统给对象的属性赋默认值
public Student() {}
// 有参的构造法,创建对象、显示地初始化对象的属性
// 局部变量:方法中定义的变量、方法形参列表中的变量
public Student(String name, int age) {
// 将形参的值赋值给对象的对应的属性
/*
* 当方法中的局部变量的名字和成员变量名相同,会在方法中隐藏成员变量,
* 此时,通过this关键字可以访问到被隐藏的成员变量
*/
this.name = name; // this:当前对象
this.age = age;
}
// 成员方法:输出学员信息
public void showMsg() {
System.out.println(name);
System.out.println("年龄:" + age);
System.out.println("就读于:" + clazz);
System.out.println("爱好:" + hobby);
}
}
public class Computer{
// 无参的构造方法
public Computer(){}
}
作用 创建对象,初始化对象的属性。
调用:new 构造方法名();
- 方法的重载
方法的重载:在同一个类中,出现方法名相同、方法的参数列表不同的现象,与方法的其他修饰符无关,称为方法的重载。
参数列表的不同表现为:1,参数的个数 2,参数的数据类型,3,参数的顺序
public int add(int a, int b) {
return a+b;
}
public double add(double a, int b) {
return a+b;
}
public double add( int b,double a) {
return a+b;
}
public int add(int a, int b,int c) {
return a+b+c;
}
- this关键字
(1)代表本类的当前对象
(2)使用场景
1,有参数的构造方法中 2,非静态的成员方法
3,不能出现静态方法中
静态方法的访问,不需要通过对象来访问,直接通过类名访问。
this若可以出现在静态方法中,this指向的是本类的当前对象。
通过类名访问静态方法,没有对象指向this的。
5. static关键字
static:静态的
1、可以修饰成员变量、成员方法、内部类(了解),补充:方法一定写在类里面,类中的方法只有成员方法、构造方法
2、成员变量
(1)静态成员变量(类变量):用static修饰成员变量
特点:
属于类,不属于对象,对于所有的对象,都可以访问,相当于公共资源,
若某一个对象将其修改,其他对象再访问,其值是被修改后的值。
不需要创建对象,通过类名可以直接访问,通过对象也可以访问(不建议)
随着类的加载(类的加载在运行之前的一个过程)而产生
(2)非静态成员变量(实例变量):没有用static修饰成员变量
属于对象的
不同对象的实例变量之间互不影响
必须创建对象,通过对象名去访问
随着对象的创建而产生,随着对象的销毁而销毁
总结:
静态成员通过类名课直接访问。当然,通过对象也可访问(不建议)
非静态成员必须先创建对象,通过对象访问。
this关键字
代表本类的当前对象,
出现的位置:有参的构造方法、非静态成员方法
this不可以出现在静态方法,why?
this代表当前对象,静态方法中不存在当前对象。
如果方法中直接访问了实例变量,该方法必须是实例方法。
public class Student {
// 属性(成员变量)
// 静态成员变量(类变量)
static String school = "西安交通大学";
// 非静态成员变量(实例变量)
String id;
String name;
char sex;
int age;
// 构造方法(无参)
public Student() {
}
// 构造方法(有参)
public Student(String id, String name, char sex, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
// 成员方法(非静态)
public void showMessage() {
System.out.println("学校:" + Student.school); // 访问本类的静态成员变量
System.out.println("学号:" + this.id);
System.out.println("姓名:" + this.name);
System.out.println("性别:" + this.sex);
System.out.println("年龄:" + this.age);
}
public static void main(String[] args) {
// 静态成员变量
System.out.println("1、学校:" + school); // 访问本类的静态成员变量(本类中课省略类名)
Student stu1 = new Student("1001", "田浩丘", '男', 22);
stu1.school = "西北工业大学";
System.out.println("2、学校:" + school);
System.out.println("3、学校:" + stu1.school);
Student stu2 = new Student("1002", "王禹婷", '女', 20);
System.out.println("4、学校:" + stu2.school);
System.out.println("==============================");
// 非静态成员变量
System.out.println();
System.out.println("stu1 学号:" + stu1.id);
System.out.println("姓名:" + stu1.name);
stu1.id = "1004";
System.out.println("stu1 学号:" + stu1.id);
System.out.println("stu2 学号:" + stu2.id);
stu2.showMessage();
}