面向对象笔记

面向对象

编程思想

1.编程语言的思想分类

  • 面向过程的编程语言:c语言

  • 面向对象的编程语言:Java,C++,C#

2.两种编程思想的定义

  • 面向过程的编程思想:仅知道一件事情怎样去做,每一步怎么做,不关心这件事谁在做。

  • 面向对象的编程思想:不仅仅知道一件事怎么去做,更关心这件事谁在做。

注意:面向对象的编程思想和面向过程的编程思想并不是对立关系,面向对象的编程思想包含面向过程的编程思想。

面向对象的编程思想

1.名词普及:

  • 类(Class):具有相同描述和行为的一组个体的总称,并且对其共同的描述和行为抽象所得的就是类的概念。

  • 对象(Object):个体,一切皆对象。在编程中先定义类,在实例化对象。

  • 属性(Field):用来描述和记录一类对象中,信息的变量;在一个对象当中记录属性信息,主要用来区分对象与对象。

  • 方法(method):一组动作的集合,如果区分集合个体的话,这个集合称之为方法(不同的个体执行相同的方法,可能结果不同);如果某一个动作结合,任意对象执行结果都一样,我们把这种结合称之为函数。

2.类和对象之间的关系:

  • 在现实生活中:

一个个体->一组个体->抽象->得到一组个体的描述方式和行为动作->类

  • 在编程中:

编写一个类->类当中最基本的包含属性和方法->实例化(instantation、instance)->对象

  • 类和对象的关系:

对象是按照类创建的实体,类是创建对象的设计图。

3.类的构成

1. 属性:

作用:记录信息。

本质:变量

(1)对象属性:

定义:这个类型的对象都具有,并且取值互不相同,并且修改取值互不干扰的属性。

作用:通过对象的取值不同区分不同的对象。

注意:若通过某一属性不能区分不同对象,那么可通过多个属性区分。

对象属性基本语法:

public class Student {
​
    String id;
    String college;
    String name;
    boolean isMale;
​
    int math;
    int chinese;
​
}
​

对象属性的使用(取名+“.”+赋值)

import java.util.Scanner;
​
public class TestStudent {
​
    public static void main(String[] args) {
        Student s1=new Student();
        //1.对对象属性进行赋值
        s1.id="202002313131";
        s1.name="张三";
        s1.college="计算机";
        s1.chinese=100;
        s1.math=99;
        s1.isMale=true;
        //2.对对象属性的取值操作
        System.out.println("姓名:"+s1.name);
        System.out.println("学院:"+s1.college);
        System.out.println("ID:"+s1.id);
        System.out.println("性别:"+(s1.isMale?"male":"female"));
​
        System.out.println("====================================");
​
​
        Scanner scanner=new Scanner(System.in);
​
        Student s2=new Student();
​
        System.out.println("请输入学号:");
        s2.id=scanner.next();
        System.out.println("是否为男:");
        s2.isMale=scanner.nextBoolean();
        System.out.println("姓名:");
        s2.name=scanner.next();
        System.out.println("学院:");
        s2.college=scanner.next();
​
        System.out.println("姓名:"+s2.name);
        System.out.println("学院:"+s2.college);
        System.out.println("ID:"+s2.id);
        System.out.println("性别:"+(s2.isMale?"male":"female"));
​
    }
​
​
}
​

(2)类属性:

定义:用于描述这个类型本身的一些信息的属性,这个类型的对象都有且取值相同的属性。

特别推荐:类属性的命名最好全大写,单词与单词之间用“_”分开。

//类属性 一般使用static进行修饰,并在定义类属性的时候直接赋值
    static int EYE_NUM=2;
    static int MOUTH_NUM=1;
    static int EAR_NUM=2;

类属性的访问方式:静态访问形式

System.out.println("学生的眼睛的数量:"+Student.EYE_NUM);
System.out.println("学生的耳朵的数量:"+Student.EAR_NUM);

类属性的特点:一改全改 不论是通过对象的形式对类属性进行修改,还是通过类名的的形式修改。

s1.EYE_NUM=1;
System.out.println(s1.EYE_NUM);
System.out.println(Student.EYE_NUM);

final成为最终修饰符,用来修饰的变量会变成常量,一经赋值,不能修改。

  static final int EYE_NUM=2;//常量的定义必须包含赋初值的过程
  static final int MOUTH_NUM=1;

2.方法

(1)对象方法:

方法的定义:一组动作的集合,这一组动作要执行都执行(调用方法),要不执行都不执行。

注意:定义方法的流程是面向过程的,调用方法的过程是面向对象的。

方法的构成:

/*      方法签名{
            方法体
        }
方法签名的构成:
    【修饰符】返回值数据类型  方法名(参数列表)*/
int sss(){
    
    return ...;
}

方法返回值:当前方法执行完毕后,要交代给外界的结果。

注意:适当区分什么样的需要抛出返回值,什么样的方法只需要打印输出。

声明带有返回值的方法:

int ssss(){
    int avg=(math+chinese)/2;
    return avg;
}

类方法

与对象方法区别:

  • 对象方法不适用static关键字进行修饰,类方法使用static关键字进行修饰;

  • 对象方法必须使用对象加 . 调用,类方法可以使用对象加 . 调用,也可以使用类加 . 调用,推荐使用类加 . 调用(静态方法)

对象方法和类方法的使用场景:

  • 对象方法:如果一个方法根据对象的不同,其运行结果有所不同的

  • 类方法:类方法不区分对象的区别,任意本类的对象运行此方法,结果都一致,此时这种方法可以叫做工具方法。

注意:如果一个类当中所有的方法都是工具方法(静态方法),那么这种类被称之为工具类。

常见工具类:Arrays、Math、Collections

  • 关于静态方法的细节:

    在静态方法当中,不能够直接调用非静态结构(对象属性和对象方法)。如果有必要调用对象属性和对象方法的时候,需要在静态方法当中,实例化一个对象(或者通过参数传递一个对象进来),使用这个对象调用相应的对象属性或者对象方法。

注意:不仅仅是静态方法,在任意静态结构(静态方法、静态代码块)当中,都不能够直接调用非静态结构。但是在非静态结构当中(对象方法、非静态代码块),可以直接调用类属性和类方法等静态结构。

总结:静态不能直接调非静态,要调用,new对象;非静态能够直接调用静态。

解释:类加载和对象创建的流程(以Student s = new Student())为例:

  • 步骤1: JVM接到new关键字的通知,表示当前要创建一个对象,JVM需要为这个对象开辟内存空间;

  • 步骤2:这个对象有多大、内存空间开辟多大,这些信息都记录在类的元信息(元数据 metadata)当中;

  • 步骤3:为了得到类的元信息,必须在为对象开辟内存空间之前,先将类信息加载进入内存静态区当中,类的元信息也就携带了静方法和静态全局变量;

  • 步骤4:在得到类的元信息之后,JVM才知道这个对象有多大,开辟多大的内存空间,然后进行内存分配;

  • 步骤5:内存分配完毕之后,执行对象的创建工作(对象属性赋值、对象可以执行的方法的加载)等工作,完成对象创建,并将对象的内存地址返回给创建者。

    经过上述的步骤,一个对象才真正到手,才能够通过这个对象,调用对象属性和对象方法

  •  

类属性、类方法已经存在了,但是对象属性、对象方法不一定存在;对象属性、对象方法已经存在了,那么类属性、类方法是一定存在的。

转换一下:一定存在的结构(静态成员)不能够冒险调用不一定存在的结构(非静态成员);后加载的结构(非静态成员)一定能够调用先加载的结构(类属性、类方法)。

构造方法(构造器、Constructor):

  • 定义:是一种声明在类当中的特殊方法,用来在实例化对象的时候,为对象执行初始化过程。

基本语法结构:

[修饰符] 类名(参数列表) {
    构造方法的方法体
}

手动创建构造器的案例:

public class Student { 
    String id;
    int age;
    String name;
    
    int math;
    int chinese;
    int english;
    
    int totalScore;
    int avgScore;
    
    Student() {  //无参构造器        
        System.out.println("创建了一个Student对象");
    }
    
    Student(String myId, int myAge, String myName) { 
       //带有参数的构造器
       id = myId;
       name = myName;
       age = myAge;
     }       
 }

this关键字的使用:

定义:指向当前对象的一个代名词。

当前对象:谁在调用这个方法(这个方法在为谁服务),谁就是我的当前对象!

this关键字的特殊用法:还可以在对象方法中指代调用其他的对象方法:在对象方法当中通过this.的方式调用其他对象方法、对象属性的时候,this.可以不写,默认就有

注意:(对象方法)

打印输出时,一定要定义一个变量接方法里的返回值,然后直接打印变量。

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tony_ironman

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值