1.1 面向对象

面向对象是指注重结果,不关系具体步骤(面向步骤)。比如调用一些包和类来进行工作->代替自己的编码过程。

特点(三大特征)

面向对象思想可以将复杂的事情简单化,并将我们从执行者变成了指挥者。

面向对象的语言中,包含了三大基本特征,即封装、继承和多态。

1.2 类与对象

  • :是一组相关属性和行为的集合。
  • 属性:就是该事物的状态信息。
  • 行为:就是该事物能够做什么。

    1. 举例:小猫。
    2. 属性:名字、体重、
    3. 行为:吃、走、叫
    4. **对象**:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的**属性** 和**行为**。
    5. 举例:一只小猫
    6. **属性**:tom5kg2 yearsyellow
    7. **行为**:溜墙根走、蹦跶的跑、喵喵叫。

类与对象的关系

  1. 类是对一类事物的表述,是**抽象的**。
  2. 对象是一类事物的实例,是**具体的**。
  3. **类是对象的模板,对象是类的实体。**

1.3类的定义

  1. **成员变量**:对应事物的属性
  1. **成员方法**:对应事物的行为
  1. public class ClassName {
  2. //成员变量 ->成员变量直接定义在类中
  3. String name;//姓名
  4. int age; //年龄
  5. //成员方法 ->不要写static关键字
  6. public void eat(){
  7. System.out.println("吃饭!");
  8. }
  9. public void sleep(){
  10. System.out.println("睡觉!");
  11. }
  12. public void study(){
  13. System.out.println("学习");
  14. }
  15. }
 **定义类**:就是定义类的成员,包括成员变量和成员方法。
**成员变量**:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
 **成员方法**:和以前定义方法几乎是一样的。只不过把static去掉,static的作用在面向对象后面课程中再详细 讲解。

1.4 对象的使用

对象的使用格式

    导包:指出需要使用的类在什么位置
import 包名称.类名称;
import roderick.java9.demo04.Student;
    创建对象:
类名 对象名 = new 类名();
Student stu = new Student();
    使用对象访问类中的成员:
对象名.成员变量; 
对象名.成员方法()
//如果成员变量没有进行赋值,则有默认值,规则和数组一样 -> int-0 float-0.0 ...
    改变成员变量内容:
//给成员变量赋值     
s.name = "赵丽颖";     
s.age = 18;
    使用成员方法:
 //调用成员方法     
 s.study(); // "好好学习,天天向上"     
 s.eat(); // "学习饿了要吃饭"

类对象也可作为方法的参数进行传递(传递地址)

也可作为返回值->同样返回地址

1.5 对象内存图

蓝色箭头为入栈,X代表出栈。方法运行完毕则从内存中出栈,**直到main方法也运行完毕出栈。**

两个对象使用同一个类中的方法时,他们各自定义的成员变量在内存中不一样,他们会分别传入同样的内存方法然后反馈;

(两个对象都进行了new)

1.6 局部变量和成员变量

区别

  • 在类中的位置不同
    成员变量:类中,方法外
    局部变量:方法中或者方法声明上(形式参数)
  • 作用范围不一样
    成员变量:类中
    局部变量:方法中
  • 初始化值的不同
    成员变量:有默认值
    局部变量:没有默认值。必须先定义,赋值,最后使用
  • 在内存中的位置不同
    成员变量:堆内存
    局部变量:栈内存
  • 生命周期不同
    成员变量:随着对象的创建而存在,随着对象的消失而消失
    局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

2.1 封装概述

封装性在Java当中的体现:

    1.**方法就是一种封装**

    2.关键字private也是一种封装

封装就是将一些细节信息隐藏起来,对于外界不可见。

2.2 封装的步骤

1.使用 `private` 关键字来修饰成员变量。

2.对需要访问的成员变量,提供对应的一对 `getXxx` 方法 、 `setXxx` 方法

2.3 private的操作

private的含义

  • private是一个权限修饰符,代表最小权限。
  • 可以修饰成员变量和成员方法。
  • 被private修饰后的成员变量和成员方法,只在本类中才能访问。

private的使用格式

private 数据类型 变量名;

1.使用private修饰成员变量:

public class Student{
    private String name;
    private int age;
}

2.提供getXxx方法 / setXxx方法,才能访问

public class Student{
    private String name;
    private int age;

    public void setName(Sting n){
        name=n;
    }

    public String getName(){
        return name;
    }


    public void setAge(int a){
        if(a< 100 && a >0)
        {
            age=a;
        }
        else
        {
            System.out.println("数据不合理"); //封装方法的一种使用
        }
    }

    public int getAge(){
        return name;
    }
}

特例:

布尔值boolean

对于private 后的boolean类型,他的getXxx方法要写成 isXxx

2.4 封装优化 this关键字

this代表所在类的当前对象的引用(地址值),即对象自己的引用。

public class Person {
    String name;

    public void sayHello(String name)
    {
        System.out.println(name+",你好。我是"+this.name);
    }
}

2.5 封装优化2 构造方法

构造方法 -> 用来创建对象

1.构造方法的名称必须和所在的类名称一模一样

2.构造方法不要写返回值类型,连void都不写

3.构造方法不能return一个具体的返回值

例子:

public class Student
{
    private String name;
    private int age;

    //无参构造
    public Student(){}

    //全参重载
    public Student(String name,int age)
    {
        this.name=name;
        this.age=age;
    }
    public void setName(String name)
    {}
    .....
}
-------------------------------
Student one = new Student(name:"骆瑜",age:20);
//可以这样创建对象

1.如果你不提供构造方法,系统会给出无参数构造方法。

2.如果你提供了构造方法,系统将不再提供无参数构造方法。

3.构造方法是可以重载的,既可以定义参数,也可以不定义参数。

2.6 标准类—JavaBean

JavaBean是Java语言编写类的一种标准规范

要求:

public class ClassName{
    //成员变量
    //构造方法
    //无参构造方法【必须】
    //有参构造方法
    //成员方法
    //getXxx()
    //setXxx()
}