java面向对象基础知识总结

一 类与对象概述

1类与对象简述

(1)类是抽象的,是一种泛称,比如人类、狗类,是一种概括性的称呼

(2)对象是具体的,是一个个具体的实例,比如一只名叫点点的泰迪狗

(3)类是对象的种类的总称,对象是类下一个个具体的实例

(4)对象属性:用于说明对象具体的特征,比如点点的毛发颜色等

(5) 对象方法:用于说明对象的具体功能

2关系图如下

二 成员方法和成员变量(属性)

1成员变量

(1)概念

成员变量=属性=field(即成员变量是用来表示属性的)

属性是类的一个组成部分,一般是基本数据类型,也可以是引用数据类型(数组,对象)

(2)属性定义语法

public class Explain {
    public static void main(String[] args) {
        Dog dog = new Dog();//创建Dog对象
        System.out.println(dog.name);//对象引用
    }
}
class Dog{
      访问修饰符 属性类型 属性名;
      String name = "点点";
      int age = 3;
}

(3)注意

属性如果不赋值会有默认值,不同数据类型会有不同默认值,int 0、short 0、byte 0、long 0、float 0.0、double 0.0、char \u0000,boolean false,String null

2成员方法

(1)成员方法语法

创建类名为Dog的类


class Dog{
    成员方法的形式:
    修饰符 返回值类型 方法名(参数列表....){
           return 返回值;
    }
    public String bark(){
        return "bark";
    }
}

(2)返回值问题

  1. 当无返回值要求时,即返回值类型为void,方法体中可以没有return语句,或者只写return

  1. 当有返回值时,方法体中最后执行的语句必须是return值

  1. 一个方法最多有一个返回值,如果要返回多个值,那么可以创建一个数组,将值存放在数组当中

  1. 返回值类型可以是任意类型,包含基本类型或引用类型(数组、对象)

(3)参数列表问题

  1. 一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开

  1. 参数类型可以是基本数据类型,也可以是引用数据类型

  1. 调用带参数的方法时,一定对应着参数列表传入相同类型或者兼容类型的参数

  1. 方法定义时的参数称作形式参数,简称形参;方法调用时的参数称为实际参数,简称实参

(4)方法调用细节

//1 一个类中的不同方法,可以直接调用
class A{
    public void print(int n){
        System.out.println("print方法被调用" + n);
    }
    public void printAgain(){
        print(10);
    }
}
//2 跨类方法的调用,A类调用B类的方法,需要通过对象名调用
class A{
    public void a(){
        B b = new B();
        b.b();
    }
}
class B{
    public void b(){
        System.out.println("B类中的方法被调用");
    }
}

注意:跨类的方法调用和方法的访问修饰符十分有关系

(5)成员方法的传参机制

如果方法的参数列表是基本数据类型,那么实参的传入也对应是基本数据类型,注意点基本数据类型传递的是值拷贝,形参(参数列表中的值)的任何改变不影响实参

相反如果是引用类型传递,其传递也是值,但是值是地址,可以通过形参影响实参

(6)成员方法的好处

可以将实现的细节进行封装,然后供其他用户调用

提高了代码的复用性

3 如何创建对象

以声明dog对象为例,类名为Dog//
//1 先声明再创建
Dog dog;
dog = new Dog();
//2 直接创建
Dog dog = new Dog();

三 对象在内存中的存在形式

Java虚拟机运行时的数据区,可以简单的分为栈区、堆、方法区

1栈区

线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。

从引用中可以知道,执行Java方法时,都会新创建一个栈区中创建一个新的空间

局部变量表:存放编译期存在的各种基本数据类型

2堆区

对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组。内部会划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer, TLAB)。可以位于物理上不连续的空间,但是逻辑上要连续。

3方法区

属于共享内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

四 变量作用域

1概述

Java编程中,主要的变量指的是属性(成员变量)和局部变量

2作用域分类

全局变量:指的是属性,作用域为整个类体,例如在Dog类中的方法都可以使用

局部变量:除了属性之外的其他变量,作用域为定义它的代码块中。也就是说局部变量一般指在成员方法中定义的变量

3注意点

  1. 全局变量可以不赋值直接使用,因为其有默认值。

  1. 局部变量必须赋值后,才能使用,因为其没有默认值。

  1. 属性和局部变量可以重名,访问时遵循就近原则

  1. 在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名

  1. 作用域不同:全局变量可以被本类调用,或其他类使用。局部变量只能在本类对应方法中使用

  1. 修饰符不同:全局变量可以加修饰符,局部变量不可以加修饰符

五 方法递归

1 简介

方法递归:递归就是方法自己调用自己,每次调用时传入不同的变量,最终达到目的

2 代码

public class Method {
    public static void main(String[] args) {
        T t = new T();
        t.test(4);
    }
}
class T{
    public void test(int n){
        if (n > 2){
            test(n - 1);
        }
        System.out.println("n=" + n);
    }
}

3 递归重要规则

(1)执行一个方法时,就创建一个新的受保护的独立空间(栈空间)具体可参照对象在内存中的存在形式

(2)方法的局部变量是独立的,不会相互影响

(3)递归必须向退出递归的条件逼近,否则就是无限递归

(4)当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕了

六 方法重载

1 简介

Java中允许同一个类中,存在多个同名方法,但要求形参列表不一致

2 注意事项

方法名:必须相同

形参列表:必须不同(形参类型或者个数或顺序,至少有一样不同,参数名无要求)

返回类型:无要求

七 可变参数

1 简介

Java允许将同一个类中多个同名同功能参数个数不同的方法,封装成一个方法。就可以通过改变参数的个数实现预计达到的效果

2 基本语法

访问修饰符 返回值类型 方法名(数据类型... 形参名){

}

3 注意事项

  1. 可变参数的实参可以为0个或者任意多个

  1. 可变参数的实参可以为数组

  1. 可变参数的本质就是数组

  1. 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数放置在形参列表的最后

  1. 一个参数列表中只能出现一个可变参数

4 案例

//求多个数的和
public class VarParameter {
    public static void main(String[] args) {
        VarMethod varMethod = new VarMethod();
        int i = varMethod.sum(1,2,3);
        System.out.println("总和为" + i);
    }
}
class VarMethod {
    int sum = 0;
    public int sum (int... num){
        //可变参数的本质为数组,所以要访问形参num中的值,就要遍历它
        for (int i = 0; i < num.length; i++) {
            sum += num[i];
        }
        return sum;
    }
}

八 构造器(构造方法)

1 基本介绍

构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化

2 基本语法

【修饰符】 方法名 (形参列表){

}

3 注意事项

  1. 构造器的修饰符可以默认

  1. 构造器没有返回值

  1. 构造器方法名和所在类名字必须一致

  1. 参数列表和成员方法的参数列表一样规则

  1. 在创建对象时,系统会自动地调用该类地构造器完成对对象地初始化

4 构造方法的练习

public class Constructor {
    public static void main(String[] args) {
        //通过构造器指定人的姓名和年龄
        Person person = new Person("Tom",18);
        System.out.println("person对象的名字" + person.name);
        System.out.println("person对象的年龄" + person.age);
    }
}
class Person{
    String name;
    int age;
    public Person(String pName,int pAge){
        System.out.println("构造器已被调用");
        name = pName;
        age = pAge;
    }
}

5 注意事项

  1. 一个类可以定义多个不同的构造器,即构造器重载

  1. 构造器是完成对象的初始化,并不是创建对象

  1. 在创建对象时,系统自动的调用该类的构造方法

  1. 如果没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器)

  1. 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器了

  1. 构造器是完成对象的初始化,对象要具有属性和方法。因此在使用构造器之前,也要给对象设置相应的属性

九 this关键字

1 什么是this

Java虚拟机会给每个对象分配this,代表当前对象

2 this使用的关键

哪个对象调用,this就代表哪个对象

3 注意事项和使用细节

  1. this关键字可以用来访问本类的属性、方法、构造器

  1. this可以用来区分当前类的属性和局部变量

如果将上图中的this.name变成name,则会造成在属性和局部变量重名的情况,其会采取就近原则的方法进行相应处理。造成没有对对象属性初始化的情况

  1. 访问成员方法的语法:this.方法名(参数列表);

  1. 访问构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中访问另一个构造器)

对于此的调用,必须要在构造器中的第一条语句调用

public class thisDetail {
    public static void main(String[] args) {
        Person person = new Person();
    }
}
class Person{
    String name;
    int age;
    public Person(){
        this("jack",18);
        System.out.println("Person() 构造器被调用");
    }
    public Person(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println(name);
        System.out.println(age);
    }
}
  1. this不能在类定义的外部使用,只能在类定义的方法中使用(即不能乱写)

猜你喜欢

转载自blog.csdn.net/qq_67896626/article/details/128536067
今日推荐