javaSE-内部类
内部类内部类概述
内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)
内部类的使用场景、作用
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整结构又只为外部提供服务,那么整个内部的完整结构可以选择使用内部类来设计。
内部类通常可以方便的访问外部类的成员,包括私有成员
内部类提供了更好的封装性,内部类本身就可以使用private protected等修饰,封装性可以做更多控制。
匿名内部类
本质上是一个没有名字的局部内部类,定义在方法中,代码块中、等
作用:方便创建子类对象,最终目的为了简化代码编写
格式:
特点总结:
匿名内部类是一个没有名字的内部类
匿名内部类写出来就会产生一个匿名内部类的对象
匿名内部类的对象类型相当于是当前new的那个类型的子类类型
javaSE-多态
多态什么是多态
同类型的对象,执行同一个行为,会表现出不同的行为特征
多态的常见形式
多态中成员访问特点
方法调用:编译看左边,运行看右边
变量调用:编译看左边,运行也看左边(多态侧重行为多态)
多态的前提
有继承/实现关系;有父类引用指向子类对象;有方法重写
优势
在多态形式下,右边对象可以实现解耦合,便于扩展和维护
定义方法的时候,使用父类型作为参数,该方法就可以接收这父类型的一切子类对象,体现出多态的扩展性与便利
多态下会产生一个问题:
多态下不能使用子类的独有功能
多态下引用数据类型的类型转换自动类型转换(从子到父):子类对象赋值给父类类型的变量指向强制类型转换(从父到子):
此时必须进行强制类型转换:子类 对象变量 = (子类)父类类型的变量
作用:可以解决多台下的劣势,可以实现调用子类独有的功能
注意:如果转型后的类型和对象真实类型不是同一种类型,那么在转换的时候就会出现ClassCastExceptionjava建议强转转换前使用instanceof判断当前对象的真实类型,在进行强制转换
javaSE-接口
接口接口的定义和特点
接口的格式如下:
接口的用法:
接口是用来被实现(implements)的,实现接口的类被称为实现类。实现类可以理解成所谓子类
基本小结
类与类的关系:单继承
类和接口的关系:多实现
接口和接口的关系:多继承,一个接口可以同时继承多个接口
接口多继承的作用
规范合并,整合多个接口为同一个接口,便于子类实现
javaSE-抽象类
抽象类
在java中abstract是抽象的意思,可以修饰类、成员方法
abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法
注意事项
抽象方法只有方法签名,不能声明方法体
一个类中如果定义了抽象方法,这个类就必须声明成抽象类,否则报错
抽象的使用场景
抽象类可以理解成不完整的设计图,一般作为父类,让子类继承
当父类直到子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成。此时这个类就可以声明称抽象类
继承抽象类有哪些需要注意
一个类如果继承了抽象类就必须重写完这个抽象类的全部抽象方法,否则这个类也必须定义抽象类
特征和注意事项
类有的成员(成员变量,方法,构造器)抽象类都有
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
不能用abstract修饰变量、代码块、构造器-最重要的特征:得到了抽象方法,失去了创建对象的能力
final和abstract是什么关系?
互斥关系
abstract定义的抽象类作为模板让子类继承,final定义的类不能被继承
抽象方法定义通用功能让子类重写,f ...
javaSE-final
finalfinal 的作品:
final关键字是最终的意思,可以修饰(类,变量,方法)
修饰类:表明该类是最终类,不能被继承
修饰方法:表明该方法是最终方法,不能被重写
修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次)
final修饰变量的注意事项:
如果修饰的是基本数据类型:那么变量存储的数据值不能发生改变
如果修饰的是引用数据类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容可以发生变化
常量
常量是使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变
常量的作用和好处:可以用于做系统的配置信息,方便程序额维护,同时也提高可读性
常量的执行原理
在编译阶段会进行“宏替换”,把使用常量的地方全部替换成真是的字面量
这样做的好处是让使用常量的程序的执行性能与直接使用字面量是一样的
枚举枚举的概述
枚举是java中的一种特殊类型
枚举的作用:是为了做信息的标志和信息的分类
定义枚举的格式:
枚举的特征:
枚举类都是继承了枚举类型:java.lang.Enum
枚举都是最终类,不可以被继承
...
javaSE-权限修饰符
权限修饰符什么是权限修饰符
权限修饰符:是用来控制一个成员能够被访问的范围
可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制
权限修饰符的分类和具体作用范围:
权限修饰符:有四种作用范围从小到大(private->缺省->protected->public)
javaSE-继承
继承什么是继承?
java类中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起父子关系1public class Student extends People{}
Student类称为子类(派生类),People称为父类(基类,超类)
作用:当子类继承父类之后,就可以直接使用父类公共的属性和方法了
优点:
提高代码复用性
减少代码冗杂
增强类的功能扩展性
继承后子类的特点
子类继承父类,子类可以得到父类的属性和行为,子类可以使用
java中子类更强大
继承设计规范
子类们的相同特征(共性属性,共性方法)放在父类中定义,子类独有的属性和行为应该定义在自己的类中
继承的内存原理
继承的特点
子类可以继承父类的属性和行为,但是不能继承父类的构造器
java是单继承模式:一个类只能继承一个直接父类
java不支持多继承、但是支持多层继承
java中所有的类都是Object类的子类
子类是否可以继承父类的构造器?
不可以的,子类有自己的构造器,父类构造器用于初始化父类对象
子类是否可以继承父类的私有成员?
可以的,但是不能直接访问
...
javaSE-static
staticstatic是什么
static是静态的意思,可以修饰成员变量和方法
static修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问、修改
成员变量可以分为两类
静态成员变量(有static修饰,属于类,内存中加载一次):常表示如在线人数信息、等需要被共享的信息,可以被共享访问
实例成员变量(无static修饰,存在于每个对象中):常如表示姓名name、年龄age、等属于每个对象的信息
两种成员变量各自在什么情况下定义
静态成员变量:表示在线人数等需要被共享的信息
实例成员变量:属于每个对象,且每个对象的该信息不同时
static修饰成员变量的内存原理
成员方法的分类:
静态成员方法(有static修饰,归属于类),建议用类名访问,也可以用对象访问
实例成员变量(无static修饰,归属于对象),只能用对象触发访问
使用场景
表示对象自己的行为的,且方法中需要访问实例成员的,则方法必须申明成实例方法
如果该方法是以执行一个公用功能为目的的,则可以声明成静态方法
static修饰成员方法的内存原理
static访问注意事项:
静态方法只能访问静态成员,不 ...
javaSE-String
StringString概述
java.lang.String类代表字符串,String类定义的变量都可以用于指向字符串对象,然后操作该字符串
java程序中的所有字符串文字(例如:“abc”)都为此类的对象
String类的特点详解
String其实常被称为不可变字符串类型,它的对象在创建后不可被更改
字符串对象存在哪里?
以“”方式给出的字符串对象,在字符串常量池中存储
String是不可变字符串的原理
String变量的每次修改其实都是产生并指向了新的字符串对象
原来的字符串对象都是没有改变的,所以称为不可变字符串
创建字符串对象的两种方式
方式一:直接使用 “” 定义。(推荐方式)String name = “abulivyet”
方式二:通过String类的构造器创建对象
两种创建字符串的方式有什么区别?
以 “” 方式创建出来的字符串对象,在字符串常量池中存储,而且相同的内容只会在其中存储一份。
通过构造器new对象,每new一次都会产生一个新新对象,放在堆内存中。
通过 “” 定义字符串内存原理
通过new构造器得到字符串对象内存原理
String常 ...
面向对象
面向对象对象在内存中的运行机制多个对象的内存图对象到底放在哪个位置
堆内存中
Car c = new Car(); c变量名中存储的是什么?
存储的是对象在堆内存中的地址
成员变量(name、price)的数据放在哪里,存在于哪个位置?
对象中,存在于堆内存中
两个变量指向同一个对象内存图
垃圾回收
注意:当堆内存中的对象,没有被任何变量引用(指向)的时候,就会被判定为内存中的“垃圾”
构造器构造器的作用
定义在类中,可以用于初始化一个类的对象,并返回对象的地址
构造器的分类和作用
无参构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值
有参构造器:在初始化对象时,同时可以接收参数为对象进行赋值
构造器的注意事项
任何类定义出来,默认就带了无参构造器,写不写都有
一旦定义了有参构造器,那么无参构造器就没有了,如果还想要无参构造器,此时就需要自己手写一个无参构造器
this关键字this关键字是什么
可以出现在构造器、方法中
代表当前对象的地址
this关键字的作用
可以用于指定访问当前对象的成员变量、成员方法
封装什么是封装?
告诉我们如何 ...