面向对象
OOP(Object Oriented Programming),面向对象程序设计是一种非常新颖的编程思想,他的基本特征是封装、多态、继承、抽象。本质上是把现实的一些事物看成一个抽象的模型,用模型来反映现实世界的具体事物特征,简单来说就是把现实世界的某些事物抽象化,然后放到计算机中把它实例化,让计算机可以读懂。
// 定义一个类,我们需要考虑的内容没有那么多,大部分的功能都可以利用IDE工具完成。
package com.qfedu.object;
public class Student {
//对学生类的描述
private int id;
private String name;
private int age;
private String className;
public Student() {
}
public Student(int id, String name, int age, String className) {
this.id = id;
this.name = name;
this.age = age;
this.className = className;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", className='" + className + '\'' +
'}';
}
}
Java中定义类的格式
/*
在Java中定义类的格式:
public class 类名 {
对于当前类的属性描述
对于当前类的行为描述
}
1. 使用变量来描述属性!!!
成员变量!!! Field
*/
public class Person {
// 姓名描述 使用的数据类型是String类型,字符串
String name;
// 年龄描述,使用的数据类型是int类型
int age;
// 性别描述. true表示男 false表示女
boolean gender;
}
/*
成员变量是对于当前类所有对象的属性描述,每一个对象中的属性是不尽相同,一般情况下不会初始化!!!
*/
/*
2. 成员方法是用来描述行为!!!
*/
public class Person {
// 姓名描述 使用的数据类型是String类型,字符串
String name;
// 年龄描述,使用的数据类型是int类型
int age;
// 性别描述. true表示男 false表示女
boolean gender;
// 成员方法 对于吃饭行为的描述
public void eat() {
System.out.println("烤羊排!!!");
}
// 成员方法,对于睡觉行为的描述
public void sleep() {
System.out.println("中午不睡,下午崩溃!!!");
}
// 成员方法,对于写代码的行为描述
public void coding() {
System.out.println("只要敲不死,就往死里敲!!!");
}
}
Java中创建类对象的格式
new 关键字:
new关键字是要求JVM在内存的堆区申请一块内存空间。空间的大小受到数据类型约束。
Java创建对象的格式:
类名 类对象 = new 类名(可能用到的初始化参数);
public class Demo1 {
public static void main(String[] args) {
// 类名 类对象 = new 类名(可能用到的初始化参数);
// 这里创建了一个 Person类对象,对象名叫做 perosn
Person person = new Person();
/*
int[] arr = new int[10];
arr.length 获取数组的容量
. 这是一个运算符,中文 的
参考数组的操作,我们在使用类对象的成员变量时可以通过 . 运算符来操作
*/
/*
借助于 Person类对象 person 对当前类对象中的成员变量进行赋值操作
*/
person.name = "XXX";
person.age = 16;
person.gender = true;
/*
借助于 Perosn类对象 perosn 获取当前类对象中保存的成员变量数据
*/
System.out.println(person.name);
System.out.println(person.age);
System.out.println(person.gender);
/*
Scanner sc = new Scanner(System.in);
sc.nextInt(); 调用Scanner扫描器对象 sc 中的 nextInt() 方法
*/
/*
借助于 Person 类对象 perosn 通过 . 运算符调用类内的成员方法
*/
person.eat();
person.sleep();
person.coding();
}
}
类对象内存分析图
构造方法(Constructor)
问题1:
上面的代码中,使用了Person的类的无参构造方法,但是该方法并没有在Person类代码中显式定义!!!
为什么可以使用?
反编译工具:
javap -c -l -private XXX.class
在Java代码中,并没有显式定义使用类名的构造方法,但是Java编译器(javac.exe) 在代码编译阶段给我们程序员提供了一个无参的构造方法,用于初始化当前类对象的成员变量,同时可以和 new 关键字一起使用,创建类对象。
构造方法的格式:
public 类名(初始化参数) {
初始化语句;
}
注:
当代码中定义了其他的构造方法,但是没有定义无参构造方法,那么该无参构造方法不能再使用!!!
要求:
无论什么时候一定要留有一个无参构造方法备用!!!
注意事项:
1. 构造方法的名字一定是类名,而且其他成员方法不能使用类名作为方法名
2. 构造方法没有返回值,并且不需要使用void填充位置
3. 构造方法可以有多个,但是要求方法中参数类型不能完成一致。
构造代码块
初始化当前类的所有类对象,只要调用当前类的构造方法,就一定会执行构造代码块中的内容
格式:
{
构造代码块
}
位置:
成员变量之后
构造方法之前
静态代码块:
开发常用
局部代码块:
现在基本不用了