四:java类与对象

39 阅读4分钟

用一个对象可以管理多个属性

类与对象的区别

  1. 类是抽象的,概念的,比如人类,猫类,它是数据类型
  2. 对象是具体的,实际的,代表一个具体的事物,即实例
  3. 类是对象的模板,对象是一个个体,对应一个实例

访问修饰符

public
ptroctected
privite

jav内存的结构分析

栈:一般存放基本数据类型 堆:存放对象 方法区:常量池,类加载信息 image.png

java创建对象的流程分析

  1. 先加载persion类信息(只会加载一次)
  2. 在堆中分配空间,进行默认初始化
  3. 把地址赋给p,p就指向对象
  4. 指定初始化,比如p.name = "xiao ming"

成员方法

  1. 当程序执行到方法,就会开辟一个新空间
  2. 方法执行完毕,或者执行到return,就会返回
  3. 返回到调用方法的地方
  4. 返回后,执行方法后面的代码

成员方法的好处

  1. 提高代码的复用性
  2. 可以将细节封装起来,供其他用户使用

成员方法的定义

public 返回的数据类型 方法名(形参列表) {
    语句
    return 返回体
}

成员方法注意细节

  1. 返回可以任意数据类型
  2. 如果返回要求指定类型,则方法必须有return值,且必须返回指定类型或者兼容类型
  3. 如果方法是void,则可以没有指定类型

成员方法的传参机制

  1. 基本数据类型,传递的是值(值拷贝),形参的改变不影响实参
  2. 引用类型传递的的是地址(传递也是值,但是值是地址),可以通过形参改变实参

方法的重载OverLoad

java允许在同一个类当中,有多个同名方法的存在,但要求形参列表必须不一致。 比如System.out.printIn,out是PrintSteam类型

可变参数

java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。使用可变参数的时候可以当做数组来使用。

注意点

  1. 可变参数可以和普通参数一起使用,但必须保证可变参数在最后
  2. 可变参数只能有一个

基本语法

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

public int sum(String str, int... sum) {
    System.out.printIn(sum.length)
    return sum.length
}

作用域

  1. 在java中,主要变量有属性(成员变量)和局部变量。
  2. 局部变量是指在成员方法中定义的变量或者代码块中的变量 。
  3. java作用域的分类:全局变量整个类都能用,局部变量只能在定义它的代码块中使用
  4. 全局变量可以不赋值,因为会有默认值,局部变量必须赋值。
  5. 属性和作用域的变量可以重名,访问时遵循就近原则。
  6. 属性可以加修饰符,局部变量不可以。
class Cat {
    // 全局变量,可以在整个类中使用
    int age = 10;
    {
        // 代码块中的变量
        int age2 = 20;
        System.out.println(age2);
    }
    public void cry() {
        // 局部变量,只能在当前方法使用
        String name = "kang";
        System.out.println(name);
        System.out.println(age);
        // System.out.println(age2); // 报错
    }
}

构造器constructor

特点

  1. 方法与类名相同
  2. 没有返回值,也不能写void
  3. 在创建对象的时候,系统自动调用该类的构造器完成对该对象的初始化
  4. 一个类可以定义多个构造器,即构造器重载。
  5. 构造器是完成对象的初始化,不是创建对象。
  6. 如果程序员没有定义构造器,系统会自动生成一个无参构造器。
class Cat {
    int age;
    // 构造器
    public Cat(int page) {
        System.out.println("构造器在对象初始化的时候就会被调用");
        age = page;
    }
}

对象创建的流程(经典基础面试题,背下)

  1. 先加载类信息(只会加载一次)
  2. 在堆中分配空间(地址)
  3. 完成对象初始化,分为三步
    1. 默认初始化(age = 0)
    2. 显示初始化(age = 10)
    3. 构造器初始化(age = page)
class Cat {
    int age = 10;
    // 构造器
    public Cat(int page) {
        System.out.println("构造器在对象初始化的时候就会被调用");
        age = page;
    }
}
Cat c = new Cat(15)
  1. 在对象在堆中的地址,返回给c(c是对象名),也可以理解为对象的引用。

this

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

this的本质:java虚拟机创建一个对象后,这个对象会有一个隐藏的属性this,this指向当前这个对象。

image.png

class Cat {
    int age = 10;
    public Cat(int age) {
        this.age = age;
    }
}
Cat c = new Cat(15)

this注意事项和细节

  1. this可以访问本类的属性,方法,构造器。
  2. 访问构造器的语法:直接this(参数),这句必须要放在构造器内的第一句,且不能早构造器外使用
  3. this用于区分当前类的属性和局部变量。
  4. this不能在类定义外使用。