Java基础复习02

11、重载

在类内,若成员方法的方法名相同,但参数列表不同,则构成方法的重载
参数列表中参数类型、参数个数、参数顺序三者其一不同则可认为两个参数列表不同
在SVM调用重载方法,如无完全符合要求的方法,则SVM会尝试对参数自动转型,如f(10),在对象中方法f没有参数为Int类型的方法,但有f(float k)、f(double k),SVM按照就近原则系统选择f(float k)  参数匹配-就近原则

12、Java虚拟机-内存区域

了解Java虚拟机内存区域的分布及使用,避免过分依赖java的自动垃圾回收(GC,garbage Collection)机制导致内存泄露等错误

Java中内存区域由栈(SS,Stack Segment),堆(Heap Segment),静态区(DS,Data Segment,代码区(CS, Code Segment)等四部分组成

栈
由编译器自动分配释放,存放局部变量及方法的参数值等。在方法执行结束后,栈区内存由系统自动释放JVM内存资源
堆
用于动态分配和释放程序所使用的对象,是一个对象的真正存放位置,主要存放new出来的东西,包括对象、数组、枚举对象,JVM会定时查看对象,如果没有外部引用指向这个对象就回收该块内存
静态区
主要用来存放静态变量,静态方法的引用和直接常量
注意:字符串常量存放在静态区,而通过new声明的String对象还是存在堆区中
代码区
存放程序要执行的代码,而且是多个对象共享一个代码空间区域

13、静态

1、static变量
类成员变量可分为两种
静态变量:JVM只为静态分配一次内存,存于静态区,用类名可直接访问、也可以用对象访问(不推荐)
实例变量:每创建一个实例变量就会为实例变量分配一次内存
2、static方法
静态方法中不能使用this、super关键字,因为它不在对象中,所以不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员方法),只能访问所属类的静态变量和静态方法
3、static代码块
静态代码块是在类中独立于类成员的静态语句块,可有多个,位置随便放,JVM加载类时会优先执行静态的代码块,且按照静态代码块出现先后顺序执行
4、访问权限static
Public static 变量
Public static 方法
当声明其他类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量

Static可用private修饰,表示这个变量可以在类的静态代码中,或类的其他静态成员方法中使用,但不能在其他类中通过类名直接引用
即private-访问权限控制
    Static-不需实例化即可使用

14、默认值

所有存在于"栈"中变量,在声明之后必须初始化值,否则无法使用;
所有存在于“堆”中变量,在声明之后如果没有显式初始化值,系统为其指定默认值,final型变量除外(常量)

15、继承

指向自身的指针-this
指向父类对象的指针-super

1、重写
在子类对象外部引用子类的重写方法表现为子类重写的方法体,同时屏蔽了父类被重写方法,这种屏蔽机制称为多态
重写的方法一定要和被重写的方法具有相同的方法名和参数列表,如果仅方法名相同,但参数列表不一致,则构成重载
子类重写方法的权限要小于等于父类的被重写方法,否则编译错误

16、final变量

常量,表示该变量是一次性注入值的,不能再改变
final关键字修饰方法    表示该方法不能在其子类中被重写
final关键字修饰类 表示该类不能被继承

17、引用类型的转型

类型转换又名塑形,分为基本数据类型和引用数据类型
子类型转换为父类型称为上转型,它是自动的,因为子类一定符合父类要求
父类型转换为子类型称为下转型,它是强制的,因为父类未必符合子类要求

18、继承中的构造方法

子类对象在构造时也构造了一个父类对象
子类构造方法也可以调用父类构造方法,但必须符合以下:
1、显式调用父类构造方法    “super(参数列表)”必须在子类构造方法第一行,这样子类就会调用父类中参数列表相同的构造方法
2、无显式“super(参数列表)”语句    系统默认调用父类无参数构造方法,
3、若子类构造方法需要调用本类重载的构造方法  则需要加入“this(参数列表)” 即显式调用子类(本类)无参构造方法 必须在子类构造方法第一行
即使子类没有显式调用父类构造方法,系统也默认调用父类无参构造方法

多个构造方法的调用顺序图
若构造一个存在父类的类的对象时,其构造函数的调用顺序如下:
先祖先-再客人-最后是自己
祖先  指父类对象的构造方法
客人  指引用类型的成员变量  包括8种基本数据类型变量
自己  指子类对象的构造方法
若在祖先类的构造方法中访问该子类的成员变量,但因为未对客人变量初始化(即子类未实例化,客人变量未被赋值),此时客人为默认值(0、null),故为保持祖先类和子类的客人变量一致,当要在构造方法中调用本类中方法,推荐只调用标定为final或private的方法和变量

19、抽象类

1、抽象类不能实例化
2、一个类A继承了抽象类B,若A中未重写B所有的抽象方法,则A必须声明为抽象类,若全部重写则可以实例化
3、抽象方法的访问控制符不能为private,因为抽象方法本身出现的意义就是了被重写,不能破坏多态机制
4、抽象方法不能是static 抽象方法属于一种不完整地方法,只含有一个声明,没有方法主体

20、接口

接口是一般行为的定义和契约,只负责定义不考虑实现
接口与抽象类的区别:
1、抽象类可以包含某些实现代码,而接口没有任何实现部分
2、抽象类可以包含成员变量而接口没有
3、抽象类可以有构造方法而接口没有
4、抽象类可以继承来自其他类和接口而接口仅仅能继承继承接口
5、接口支持多继承而抽象类只支持单继承

接口用来定义两个对象通信的契约,抽象类用来封装对象间公用的行为,抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
不同类型的组件互相调用是通过接口,而同一类型的对象群,则通过抽象类组织在一起的,即接口对外通信,抽象类是对内组织的 

接口的定义
1、接口中的成员变量默认是public、static、final类型的(可省略),必须初始化即声明赋值,为静态常量
2、接口中的成员方法默认都是public、abstract类型的(可省略),没有方法体
3、接口中只能包含public/static/final类型的成员变量,public/abstract类型的成员方法
4、接口中没有构造方法,不能实例化
5、一个接口不能实现另一个接口,但它可以继承(extends)多个其他的接口
6、接口必须通过类实现它的抽象方法
7、接口的实现类必须实现接口的所有抽象方法,否则这个类声明为抽象的
8、不允许创建接口的实例化,但允许定义接口类型的引用变量,该引用变量指向实现了接口的类的对象
public class B implements A{
    public static void main(String[] args){
        A a=new B(); //引用变量a被定义为A接口类型,引用实例B
    }
}
9、一个类可实现多个接口   

接口的使用
接口动态加载实例
public class TestInterface {

    public static void main(String[] args){
        Conctrol c1= new Mp3();//Conctrol为接口
        Conctrol c2= new Game();
        c1.run();
        c2.run();
    }
}

接口是一种引用类型

可将接口类型的参数作为方法参数,将接口类型的引用变量(该引用变量指向(被赋值)实现了该接口的类的对象)传递给方法

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

glimmert

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

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

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

打赏作者

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

抵扣说明:

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

余额充值