Java day6

面向对象

(Object Oriented Programming,OO)

1.面向对象的思想

  • 面向过程思想

    • 线性思维,一步一步做,步骤清晰简单适合一些较为简单的问题
    • 适合解决一些小的问题
    • 造轮子
  • 面向对象思想

    • 物以类聚,分类的思维模式,思考问题首先解决问题需要那些分类。最终才对某个分类下的细节进行全面向过程的思索。
    • 面向对象更适合处理一些复杂的问题,是和处理需要多人协作的问题。
    • 造车
  • 对于描述复杂的事物,为了从宏观上把握,从整体上合理的分析。

2.面向对象三大特性

  • 封装
  • 继承
  • 多态

3.类与对象的关系

  • 从认识论的角度考虑是,先有对象后有类。对象,是具体的事物。类是对对象的抽象

  • 在编程中是相反的,是先有类后又对象。类是对象的模板。

1.类-方法

  • 定义一个方法
1
2
3
4
5
6
7
8
9
10
11
12
public class Demo01 {
public static void main(String[] args){

}
// 修饰符 返回值类型 方法名(....){
//
// }
public String sayHello(){
return "hello,world";
}

}
  • 一个类中只能有一个public class

2.break 和 return区别

  • return

    • 函数的结束
    • 返回值必须与函数返回值一样
  • break

    • 跳出循环

补充 可变形参

  • Java中函数参数不确定有多少

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class Demo01 {
    public static void main(String[] args){

    }
    // 修饰符 返回值类型 方法名(....){
    //
    // }
    // 可变形参
    public void sayHello(int ...i){
    System.out.print("这个函数可以有多个参数");
    }
    public void sayHello(int j, int ...i){
    System.out.print("函数为可变形参时候要注意,可变形参必须在最后一位");
    }
    }

    • 补充 ,一个函数定义只能一个可变形参,多个形参会报错

3静态方法与非静态方法调用

  • 静态方法 在定义类的时候就创建
  • 非静态方法 实例化一个对象后才存在
  • 静态方法与非静态方法不是在一个层级,静态与类一起加载而非静态与实例化对象一起加载,
    • 定义一个类,静态方法不能调用非静态方法(静态方法存在时,非静态方法还是未定义)
1
2
3
4
5
6
7
8
9
public class Student {
public static void static_say(){
System.out.println("调用静态方法 public");
}

public void say(){
System.out.println("调用非静态方法");
}
}

学生类:

1
2
3
4
5
6
7
8
9
10
11
public class Main {
public static void main(String[] args) {
// 静态方法调用
Student.static_say();
// Student.say();//这是一个非static修饰的方法 非静态方法只能创建一个实列对象来初始化
// 非静态方法调用 实例化这个类
Student student = new Student();
student.say();

}
}

4Java是值传递

  • 通过函数实参传递给形参时,不会改变实际参数的值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import com.Skr.Student;

    public class Main {
    public static void main(String[] args) {
    // 静态方法调用
    Student.static_say();
    // Student.say();//这是一个非static修饰的方法 非静态方法只能创建一个实列对象来初始化
    // 非静态方法调用 实例化这个类
    Student student = new Student();
    // 通过实例化才能 通过实例化对象使用非静态方法
    student.say();

    }
    }
  • 通过引用改变其值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class Demo01 {
    public static void main(String[] args){
    Person person = new Person();
    // 输出为空
    System.out.println(person.name);


    // 引用传递改变其值
    change(person);
    System.out.println(person.name);
    }

    public static void change(Person p){
    p.name = "通过引用改变的值";
    }
    }

    class Person{
    String name;
    }

5.new关键字

类似于C中 malloc()

  • 使用new关键字创建对象,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中的构造器的调用

  • 类中的构造器也称为构造方法,构造函数是在进行创建对象的时候必须要调用的,并且构造器有一个特点

    • 必须和类的名字相同
    • 必须没有返回类型,也不能写void
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
26
27
import com.Skr.Student;

public class Main {
public static void main(String[] args) {
// 类实例化后会返回一个自己的对象
Student student = new Student();
student.study();

student.name = "小明";
student.study();
}
}

//x学生类
package com.Skr;

//学生类
public class Student {
//属性
String name;
int age;

//方法
public void study(){
System.out.println(this.name+"在学习");
}
}
  • ps 类中属性 要声明public 外部才能访问,否则只能通过内部方法调用