Java-类与对象复习总结


类和对象

1.对象可以理解成客观事物的抽象;
2.把对象按照一定的规则分类,就得到一些类;
3.类是高配结构体,也是一种“自定义类型”;
4.对象是这个自定义类型所创建出的变量。

类的定义:

class ClassName{
    field;//成员属性
    method;//成员方法
}
//class为定义类的关键字,ClassName为类的名字,{}中为类的主体。

1.类的成员

字段、方法、代码块、内部类和接口等。

1.1字段/属性/成员变量

在类中,但是方法外部定义的变量称为“字段/属性/成员变量”。

1.2方法

描述一个对象的行为。

2.对象的初始化和构造方法

2.1默认初始化

(1)成员变量默认值:(全局变量
如果针对对象中的成员没有显示的进行初始化,此时也是存在一个默认值;
(2)默认值规则:
a.数字类型(包括整数和浮点数)默认初始化为0;
b.布尔类型,默认初始化为false;
c.引用类型,默认初始化为null;

2.2就地初始化

2.3构造方法初始化

Java中通过“构造方法”对类进行初始化
(1)构造方法的方法名和类名相同
(2)构造方法没有返回值
(3)构造方法不需要显示调用,而是在new的时候自动被调用;
相比于前面几种的优点
(a)构造方法可以传一些参数,动态的获取到要针对对象初始化的值
(b)构造方法可以支持重载,可以有多个构造方法,不同的构造方法所支持的参数的个数或者类型是不同的

2.4代码块初始化

实例化对象时的初始化执行顺序:
(1)默认把成员初始化成0/false/null;
(2)执行就地初始化int x = 0;
(3)执行代码块中初始化 x = 10;
(4)执行构造方法中的初始化 x = 100;
其中(2)(3)谁在前先执行谁,这二者并列;

构造方法的特性
(1)名字与类名相同,没有返回值类型
(2)在创建对象时由编译器调用,并且在对象内只调用一次
(3)构造方法可以重载
(4)如果类中没有提供任何的构造参数,那么编译器会默认生成一个带有任何参数的构造函数
(5)若类中定义了构造方法,则默认的无参构造将不再生成

3.this关键字

this引用的特性
(1)this引用的类型:
对应类类型引用,即哪个对象调用就是哪个对象的引用类型
(2)this引用只能在“成员方法中使用”
(3)this引用具有final属性,在一个成员方法中,不能再去引用其他的对象
(4)this引用是成员方法第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this引用负责来接收
(5)在成员函数中,所有成员变量的访问,都会被编译器修改成通过this来访问

使用场景:
需要在一个构造方法中调用当前类的另一个构造方法的时候,通过this()的形式调用
必须放在第一行,且只能调用一个

4.补充

toString方法

任何一个类里面都可以有toString方法
通过这个方法,就可以把一个对象转成一个String
转成String之后,就可以把String打印出来,或者保存到文件中,或者通过网络发送。
注:
toString这个方法,一般不需要显式调用(显式调用也是完全ok),不写显式调用时,当代码中把这个对象当成字符串来使用的场景中,就会自动触发toString(比如System.out.println())。

5.包(package)

Java中,包和目录是一一对应的。
使用包的主要目的是保证类的唯一性。

6.static

static的用途/含义,和字面意思没半毛钱关系。

注1:
(1)如果一个成员没有被static修饰,这是一个对象的属性/成员/字段。
(2)如果一个成员被static修饰了,这就是这个类的属性/成员/字段

注2:
(1)使用static修饰的,这个成员就是隶属于类的成员
(2)使用这个成员的时候,通过 类名.成员 的方式来使用
(3)类成员在内存中只有一份,因为类在内存中也就只有一份

注3:
(1)static修饰的代码块执行始终在普通代码块之前
(2)static代码块是在类加载的时候执行的
(3)普通代码块是在创建实例的时候执行,类加载式中在创建实例之前

注4:
(1)通过 对象名.静态成员 的方式也能访问类的属性
(2)对于静态方法,从属类,也是通过 类名.静态方法名
(3)静态方法不能使用this
(4)静态方法只能在类主体中定义,不能在方法中定义,静态变量又称为类变量,只能定义在类里,不能定义在方法中,静态方法也不行

注5:
(1)静态方法可以访问静态数据成员,并可以更改静态数据成员的值
(2)静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的)
(3)this和super两个关键字不能在静态上下文中使用(this是当前实例的引用,super是当前实例中父类实例的引用,也是和当前实例相关)

注6:
(1)main方法为static方法
(2)static修饰代码块,代码块只在类加载的时候执行一次,往往用来初始化静态成员

7.访问限定符

面向对象的特性:
(1)类和对象
(2)抽象
(3)封装
(4)继承
(5)组合
(6)多态
(7)反射

其中,封装、继承、多态三个特性最具代表。

封装 → 访问限定符:
public、private、protected、default(不写)
前提条件:两个类,一个当前的类A,另一个是要调用A的类B;

public:修饰的成员可以被外部的类随意访问;
private:只能在类内部被使用;
protected:搭配继承;
default(不写):包级权限;

访问权限大小:public > default > private

注:
如果某个成员不包含public和private关键字,此时这个成员可以在包内部的其他类使用,但是不能在包外部的类使用;

8.内部类

把类的定义写到另一个类中;
(1)普通的内部类/成员内部类
(2)静态内部类(内部类前面用static)
(3)匿名内部类(相对比较常用)
(4)局部内部类(没啥用)

9.类和对象的内存布局

JVM先从操作系统中申请一大块内存空间;
栈:方法和方法之间的调用关系;
堆:new出来的对象/实例

注:
方法执行完毕之后要回到调用位置继续执行;

JVM中的内存区域除了堆和栈之外,还有一个非常重要的区域:方法区
方法区里存的是一个一个的“类相关的信息”(每个类的方法的二进制的指令也是在这里)

注:
(1)对于属性来说:
如果属性是一个实例属性,那么不在方法区,而是跟着实例走(实例一般都在堆上)
如果属性是一个类属性(static修饰),那么也就在方法区中
(2)对于方法来说,不管是加static还是不加,对应的内容都是在方法区中

注:
(1)栈不是只有一个,每个线程都有自己的栈;
(2)堆和方法区,每个JVM都是只有一份的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

KI-LK

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值