文章目录
设计对象并使用
java
public class 类名{
1. 成员变量(代表属性,一般是名词)
2. 成员方法(代表行为,一般是动词)
3. 构造器
4. 代码块
5. 内部类
}
Person类
java
public class Person {
String name;
String major;
int age;
double height;
double weight;
public void selfIntroduction() {
System.out.println("大家好,我的名字是" + name + ",我今年" + age + "岁了,身高" + height + ",体重" + weight + "公斤,大学主修" + major + ".");
}
}
Test类
java
public class Test {
public static void main(String[] args) {
Person you = new Person();
you.name = "法外狂徒张三";
you.major = "法律";
you.age = 23;
you.height = 176;
you.weight = 70;
you.selfIntroduction();
}
}
类名首字母建议大写、英文、有意义,满足驼峰模式,不能用关键字,满足标志符规定
一个代码文件中可以定义多个类,但是只能一个类是public修饰的
publi修饰的类名必须是Java代码的文件名称
对象内存图
构造器
构造器定义格式
java
修饰符 类名(形参列表) {
...
}
// 例如
public class Car {
...
// 无参数构造器
public Car() {
...
}
// 有参数构造器
public Car(String name, double price) {
...
}
}
无参数构造器(默认存在的):初始化的对象时,成员变量的数据均采用默认值。
有参数构适器:在初始化对象的时候,同时可以为对象进行赋值。
需要注意的是,如果没有写无参数构造器,只写了有参数构造器,默认的无参数构造器将会失效
this关键字
作用:出现在成员方法、构造器中代表当前对象的地址,用于访问当前对象的成员变量、成员方法
示例:
java
public class Car {
String name;
public Car(String name) {
this.name = name;
System.out.println("给当前对象的name属性赋值为:" + name);
}
}
封装
是面向对象三大特征之一:封装,继承,多态。
一般会把成员变量使用 private 隐藏起来
通过 getter 和 setter 方法暴露其访问
好处:加强了程序代码的安全性
适当的封装可以提升开发效率,同时可以让程序更容易理解与维护
标准JavaBean
- 成员变量使用 private 修饰
- 提供每一个成员变量对应的 setXxx() / getXxx()
- 必须提供一个无参构造器
java
public class Person {
String name;
String major;
int age;
double height;
double weight;
public Person() {
}
// 可选项
public Person(String name, String major, int age, double height, double weight) {
this.name = name;
this.major = major;
this.age = age;
this.height = height;
this.weight = weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
}
成员变量&局部变量
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中,方法外 | 常见于方法中 |
初始化值不同 | 有默认初始化值 | 没有,使用之前需要完成赋值 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结束而消失 |
类中位置不同 | 在所归属的大括号中 |
综合案例
写一个简单的学生注册系统:
java
public class Student {
private String name;
private int age;
private String major;
private int yearOfEnrollment;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public int getYearOfEnrollment() {
return yearOfEnrollment;
}
public void setYearOfEnrollment(int yearOfEnrollment) {
this.yearOfEnrollment = yearOfEnrollment;
}
}
java
import java.util.Scanner;
public class EnrollSystem {
public static void main(String[] args) {
// 学校只能容纳 100 人
Student[] schoolStudents = new Student[100];
enroll(schoolStudents);
}
public static void welcomeMenu() {
System.out.println("###############欢迎加入Java工程师###############");
}
public static void enroll(Student[] studentArr) {
while (true) {
welcomeMenu();
Student student = createStudent();
for (int i = 0; i < studentArr.length; i++) {
if(studentArr[i] == null){
studentArr[i] = student;
break;
}
}
printStudents(studentArr);
}
}
public static void printStudents(Student[] students) {
for (int i = 0; i < students.length; i++) {
if (students[i] == null) {
break;
}
System.out.println("学生编号: " + i);
System.out.println("学生姓名: " + students[i].getName());
System.out.println("学生年龄: " + students[i].getAge());
System.out.println("学生专业: " + students[i].getMajor());
System.out.println("入学时间: " + students[i].getYearOfEnrollment());
System.out.println();
}
}
public static Student createStudent() {
Scanner sc = new Scanner(System.in);
Student student = new Student();
System.out.println("请输入你的姓名: ");
String name = sc.next();
System.out.println("请输入你的年龄: ");
int age = sc.nextInt();
System.out.println("请输入你的专业: ");
String major = sc.next();
System.out.println("请输入你的入学年份: ");
int yearOfEnrollment = sc.nextInt();
student.setName(name);
student.setAge(age);
student.setMajor(major);
student.setYearOfEnrollment(yearOfEnrollment);
return student;
}
}