JavaSE之类和对象

static关键字

1. static的特点

  • static是修饰符, 用于修饰成员
  • static修饰的成员被所有的对象共享
  • static优于对象存在, 因为static修饰的成员已经随着类的加载存在了
  • static修饰的成员多了一种调用方法: 类名.静态成员
  • static修饰的成员是共享数据

2. static修饰变量

  1. 变量分为两种, 一种是被static修饰的静态变量(类变量),一种是没有被static修饰的实例变量.
  • 静态变量在内存中只有一个拷贝, JVM只为静态变量分配一次内存, 在类加载的过程中完成静态变量的内存分配; 而实例变量则是每创建一个实例, 就会为实例变量分配一次内存, 内存中的实例变量可以在内存中存在很多拷贝, 但是互不影响.
  • 静态变量可以通过类名.静态变量名直接访问, 也可以通过对象.静态变量名来访问; 实例变量只能通过对象名.变量名访问.
  1. static变量的初始化按照定义的顺序进行初始化, static不能修饰局部变量
  2. 静态变量一般的使用场景
  • 对象之间的需要共享值时
  • 方便访问变量时

3. static修饰方法

  • 静态方法不用生成类的实例就可以调用, 即static修饰的方法归类所有, 可以理解为共享的方法, 可以通过类名直接调用, 不用消耗资源反复创建对象, 因为在类加载的时候静态方法已经在内存中了, 知道程序结束才会被内存释放, 而实例方法在方法结束后就会被内存收回.
  • 静态方法只能调用本类的静态成员, 不能调用非静态成员
  • 静态方法不能使用任何方式调用this和super关键字(this关键字用于表示当前对象本身, 或当前一个类的实例, 通过this可以调用本对象的所有属性和方法, 成员变量和方法内部的变量重名时, 只能使用this关键字)

4. static修饰类

一般静态内部类由static修饰, 只能访问外部类的static成员, 不能直接访问外部类的实例方法和实例变量.

5. static修饰代码块

  • static静态代码块是在类中独立于类成员的static语句块, 静态代码块可以有多个, 不在任何方法体内部, JVM在执行类加载的时候就会执行这些静态代码块, 如果有多个静态代码块, 则会按顺序执行.

  • 静态代码块是类加载的时候自动执行的, 静态方法是在调用的时候才执行的.

对Java面向对象的理解

什么是类和对象

  • 引用一句书本中的概念"类用于描述客观世界里的某一类对象的共同特征, 而对象是类的具体存在"
  • 面向对象就是将现实世界中的一切事物都看作是对象
  • 类是具有相同属性和行为特征的对象的抽象, 类是对象的概念模型, 而对象是类的一个实例, 通过类来实例化对象, 同一个类的所有对象具有相同的属性和行为特征.

面向对象的三大特征

1. 继承

多个类具有共同的属性(成员变量)与行为(成员方法)的时候, 将这些共同的部分抽取出来定义到一个公共的类中, 其他各个类可以与这个类形成继承关系, 从而在其他的子类中不需要定义这些公共的部分, 这个公共的类就是父类, 也称为超类或者基类, 其他的继承这个公共部分的类就称为子类.子类可以直接访问父类的非私有成员变量, 访问私有成员变量的时候, 需要使用super.get()方法.
(1) Java继承的特点

  • Java只能存在单个继承不可以多继承, 即:一个类只能有一个父类
  • Java继承可以多层继承
  • 子类会继承父类的所有的public字段和方法

(2)Java继承的特点

  • 继承可以很好地提高代码复用率
  • 类与类之间的继承关系, 是实现多态操作的前提
final关键字
  • final在修饰变量或者字段的时候, 表示这个变量或字段不可被修改
  • 如果final修饰一个类, 则表明这个类不能被继承
2. 封装
  • 我们在写代码的时候会涉及到两个角色: 类的实现者类的调用者
  • 封装的本质就是让类的调用者不用太多的了解类的实现者是如何实现这个类的, 只需要知道如何使用就行了
  • 封装指的是隐藏对象的属性及实现细节, 仅对外提供访问方式, 把不需要提供的内容进行隐藏

1)封装的优点

  • 将变化隔离
  • 提高安全性

2)封装的实现形式

  • 在定义类时, 对成员进行private修饰, 并对外提供get和set方法

3.多态

Java程序中定义的引用变量所指向的具体类型和通过该引用类型发出的方法在调用时不确定, 该引用变量发出的方法到底应该调用哪个类实现的方法, 必须在程序运行期间才能决定, 这就是多态.
(1) 多态存在的前提

  • 必须有子类和父类, 具有继承和实现
  • 子类必须重写父类的方法
  • 父类的引用变量指向子类的对象

(2) 多态的优点

  • 可替换性: 多态对于存在的代码具有可替代性
  • 可扩充性: 增加的子类不影响已经存在的类的特性的运行和操作
  • 灵活性: 在应用中体现了灵活多样的操作, 提高了使用的效率
向上转型
Animal animal = new Bird("皇皇");

此时 animal 是一个父类的引用,指向的是子类的实例,这就称为向上转型.

动态绑定

在java中, 调用某个类的方法, 到底执行了那段代码(是父类方法的代码还是子类方法的代码), 要看这个引用指向的是父类对象还是子类对象(即调用一个方法的时候, 不能看引用是啥类型的, 得看引用指向啥类型的对象), 这个过程是在程序运行时决定, 而不是编译时决定的, 这叫做"动态绑定"

方法重写

子类重写父类的同名方法
详见博客
https://blog.csdn.net/qq_45914985/article/details/107107073

对于多态详见博客:
https://blog.csdn.net/qq_45914985/article/details/104755018

抽象类

  • 用abstract修饰的类就是抽象类.
  • 没有实际工作的类一般把它设计成一个抽象类, 用于被继承
抽象类的规则
  • 抽象方法没有方法体(只声明, 不实现, 具体的实现由继承他的子类来完成)
  • 抽象类不能被实例化
  • 抽象方法不能是private的, 因为就不能被继承了
  • 抽象类中可以包含其他非抽象方法, 也可以包含字段.(这个非抽象方法和普通方法的规则一样, 可以被重写, 也可以直接被子类调用)

接口

  • 接口是抽象类的更进一步, 抽象类中还可以包含非抽象方法和字段, 但是接口中只有抽象方法, 字段只能包含静态常量(final static)
  • 一个类通过继承接口的方式, 从而继承接口的抽象方法.
  • 使用interface定义一个接口, 使用implement实现一个接口
  • 接口中的方法一定是public的
  • 接口不能被单独实例化
  • java不可以多继承, 但是可以实现多个接口
  • 接口可以继承自另一个接口, 使用extends关键字, 达到复用效果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值