Java-6-面向对象 01 - 07


Java面向对象 01 - 07

Java面向对象01 - 什么是面向对象

面向对象的本质:以类的的方式组织代码,以对象的组织(封装)数据

  • 抽象
  • 三大特征:
    • 封装
    • 继承
    • 多态

Java面向对象02 - 回顾方法的定义

Java面向对象03 - 回顾方法的调用

  • 调用一
1
2
3
4
5
6
7
8
9
10
11
12
13
package Demo01;

public class Student {

//非静态方法
public void say(){
System.out.println("学生说话了");
}

public static void eat(){
System.out.println("学生吃东西了");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package Demo01;

public class Demo01 {
//main方法
public static void main(String[] args) {

//1.非静态方法实例化
//用new来实例化类
//对象类型 对象名 = 对象值
Student student = new Student();
student.say();

//2.非静态方法实例化
new Student().say();

//3.静态方法实例化
Student.eat();
}
}
1
2
3
学生说话了
学生说话了
学生吃东西了
  • 调用二
    • 两个static的函数互相调用
    • 没有问题
1
2
3
4
5
6
7
8
9
10
11
12
package Demo01;

public class Demo02 {
public static void a(){
b();
}

public static void b(){

}
}

  • 调用三
    • 两个非static的函数互相调用
    • 没有问题
1
2
3
4
5
6
7
8
9
10
11
package Demo01;

public class Demo02 {
public void a(){
b();
}

public void b(){

}
}
  • 调用四
    • 在一个static函数下,调用一个非static函数
    • 报错
1
2
3
4
5
6
7
8
9
10
11
package Demo01;

public class Demo02 {
public static void a(){
b();
}

public void b(){

}
}
  • 调用五
    • 在一个非static函数下,调用一个static函数
    • 没有问题
1
2
3
4
5
6
7
8
9
10
11
package Demo01;

public class Demo02 {
public void a(){
b();
}

public static void b(){

}
}

原理:static方法在类加载时就存在了,但是非static方法在类被实例化的时候才存在,所以static方法不会提前知道非static方法的存在,但是非static方法一定能知道static方法的存在。

  • 修改成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package Demo01;

public class Demo04 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
Demo04.change(person);
System.out.println(person.name);
}

public static void change(Person person){
person.name = "Liang Junyi";
}
}

class Person{
String name; // null
}
1
2
null
Liang Junyi
  • 修改失败
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package Demo01;

public class Demo05 {
public static void main(String[] args) {
int a = 1;
System.out.println(a);

Demo05.change(a);

System.out.println(a);
}

public static void change(int a){
a = 10;
}
}

1
2
1
1

Java面向对象04 - 类与对象的创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package Demo02;


public class Application {
public static void main(String[] args) {
//类,抽象的,实例化
//类实例化后会返回一个自己的对象
//student对象是一个Student类的具体实例

Student xiaoming = new Student();
Student xiaohong = new Student();

xiaoming.name = "小明";
xiaoming.age = 3;
System.out.println(xiaoming.name);
System.out.println(xiaoming.age);

xiaohong.name = "小红";
xiaohong.age = 5;
System.out.println(xiaohong.name);
System.out.println(xiaohong.age);
}


}
1
2
3
4
小明
3
小红
5

Java面向对象05 - 构造器详解

  • 使用new关键字创建对象
  • 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中的构造器的调用
  • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
    1. 必须保持和类的名字相同
    2. 必须没有返回类型,也不能写void

构造器要求

  • 与类名相同的public函数

  • 分为有参数与无参数构造

构造器特点

  • 不创建的时候系统会默认创建一个无参数构造器
    • 反之手动创建了构造器后,不会再自动生成无参构造器
  • 使用new关键字,本质是在调用构造器
  • 构造器被用来初始化值
  • 通常有参构造与无参构造都会写,而且写不止一个有参构造,也就是重载
  • alt + insert 快捷键,可用来生成构造器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package Demo03;

public class Person {
String name;
int age;


public Person(){

}

public Person(String name){
this.name = name;
}

public Person(String name, int age) {
this.name = name;
this.age = age;
}

}
1
2
3
4
5
6
7
8
9
10
11
package Demo03;

public class Application {

public static void main(String[] args) {
Person person = new Person("zhaoxiaoyi",23);

System.out.println(person.name);
}

}

Java面向对象06 - 创建对象内存分析

image-20221109162321337

Java面向对象07 - 简单小结类与对象


Author: Liang Junyi
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Liang Junyi !
  TOC