文章目录
article
封装
AI文章摘要
qwen-turbo-latest
加载中...
Java类
Java类可以和C++一样, 可以封装属性和方法, Java是纯面向对象语言, 一切逻辑交由类完成.
- 非静态成员: 属于某个对象而不属于类. 非静态成员的调用必须于指定特定的对象, 特定对象使用
- 非静态成员方法: this和super关键字, 可变参数(当参数类型确定, 单个数不确定时可以使用可变参数, 可变参数底层是一个数组, 所以我们可以传递一个数组进去)
- 构造方法: 注意super调用父类构造方法必须在第一行
- 普通方法:
- 非静态成员变量:
- 非静态内部类: 创建这个类的对象必须指定外围类的对象
- 非静态内部类只能拥有非静态成员
- 非静态内部类的非静态成员方法可以访问外部类的所有非静态成员, 当重名时需要使用Outer.this.变量名 指定
- 静态成员: 属于类. 静态成员必须使用类名调用. 静态成员使用static关键字修饰
- 静态成员方法:
- main方法: java的方法入口也封装在类内部, 它可以被jvm通过类名直接调用
- 普通方法:
- 静态成员方法:
- 非静态成员方法: this和super关键字, 可变参数(当参数类型确定, 单个数不确定时可以使用可变参数, 可变参数底层是一个数组, 所以我们可以传递一个数组进去)
- 静态成员变量
- 静态内部类: 静态内部类的对象创建不需要依赖外围类对象, 也叫静态嵌套类,
- 静态内部类可以拥有普通类所有的成员
- 静态内部类的成员方法可以访问外部类所有成员
- 静态内部类: 静态内部类的对象创建不需要依赖外围类对象, 也叫静态嵌套类,
- Java中的类成员有以下几种权限类型.
- private: 只有本类可以使用
- 缺省不写: 只有本类以及同一包下的类可以访问, 这是java类的默认权限
- protected: 只有本类以及同一包下的类, 在加上继承类可以使用
- public: 所有位置可以使用
- 局部类定义在方法中的类叫做局部类, 它只能在方法内使用.
- 局部类不能限定权限
- 局部类不能拥有静态成员
- 局部类只能使用方法中的final常量或只进行过一次赋值的变量
java中所有的类都直接或间接继承自Object类, 它封装了所有类的共性方法.
//无参构造:
Object()
//返回此对象的类的Class对象, 也可以通过 className.class的方法获取
Class getClass()
//返回对象的类所在的包路径以及对象的内存地址
string toString():
//单纯比较两个引用是否相等(比较物理内存地址), 它和\=\=号功能是相同的
bool equals(Object o):
//native是系统调用方法, hashCode也叫哈希摘要, 或内容摘要. 不同的内容哈希值一定不同, 相同内容的哈希值一般不同, 当哈希值相同时还需要比对内容.
native int hashCode()
基础类型封装
java定义了一些基本数据类型的包装类, 它们可以执行一些有用的方法。
- 自动拆箱: 从jdk1.5开始, 可以直将接基本数据类型赋值给包装类对象, 解释器自动装箱
- 自动装箱: 从jdk1.5开始, 基本数据类型和包装类之间可以直接参与运算, 解释器自动拆箱.
//常见的方法:
public Integer(int val)
public Integer(String s)
public static Integer valueOf(int val )
publc static Integer valueOf(Stirng s)
public intValue()
public int praseInt(String s)
public static String toString(int val)
字符串封装
java代码中双引号引用的内容都是String类型, String封装的是一个被final修饰的byte数组. 可以使用StringBuilder构建一个字符串
//初始化新创建的 String对象,以使其表示空字符序列。
String()
//通过当前参数中的字符数组来构造新的String。
String(char[] value)
//通过使用平台的默认字符集解码当前参数中的字节数组来构造新的
String(byte[] bytes)
//返回此字符串的长度。
int length ()
//将指定的字符串连接到该字符串的末尾。
String concat (String str)
//返回指定索引处的 char值。
char charAt (int index)
//返回指定子字符串第一次出现在该字符串内的索引。
int indexOf (String str)
//返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
String substring (int beginIndex)
//返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。
String substring (int start, int end)
//判断是否字符串是否包含str(CharSequence是一个接口, String同样实现了它)
boolean contains(CharSequence str)
startWith(String s);
//将此字符串转换为新的字符数组。
char[] toCharArray ()
//使用charset字符集将 String编码转换为新的字节数组, 缺省默认平台的默认字符集将.
byte[] getBytes (String charset)
//替换所有
String replace (
CharSequence target,
CharSequence replacement)
String replaceAll (CharSequence target, CharSequence replacement)
String[] split(String regex) 将此字符串按照给定的regex(规则)拆分为字符串数组。
String valueOf(int val) 将基本数据类型转换为String类型
//构造一个空的StringBuilder容器。
public StringBuilder()
//构造一个StringBuilder容器,并将字符串添加进去。
public StringBuilder(String str):
系统功能封装
包含与系统相关的大量静态方法
//系统从时间原点到现在所经历的毫秒数
currentTimeMillis()
//从原数组的pos1位置复制count个元素到des数组的pos2位置
arrayCopy(srcArray , pos1 , desArray , pos2 , int count)
数学运算封装
java提供常用数学运算的静态方法, 它们封装在java.lang.Math
//返回 double 值的绝对值。
public static double abs(double a)
//返回大于等于参数的最小的整数。
public static double ceil(double a)
//返回小于等于参数最大的整数。
public static double floor(double a)
//返回最接近参数的 long。(相当于四舍五入方法)
public static long round(double a)
Java接口
Java接口是一种特殊的抽象类, java接口需要一个类去实现, 若类没有完全实现一个接口, 则这个类必须是抽象类, 它只能包含一下的内容
- public权限的非静态抽象成员方法(abstract可加可不加)
- public权限的静态常量(final)
以下是新JDK新增加的内容
- public非静态成员方法可以包含方法体但得default修饰, 用来解决添加public权限的非静态抽象成员方法时导致的频繁修改. 可以设计private非静态成员方法, 用来解决public静态成员需要使用但不能对外公开的方法
- public或private权限的静态成员方法, 但只能通过接口名调用
函数式接口
函数式接口是接口中只有一个方法的接口,
封装函数时尽量编写无状态函数,及函数不会向函数外记录数据的状态。
java.util.function
包下定义了很多实用的函数式接口
Java注解
- 注解其实是一个接口, 它继承了
java.lang.annotation.Annotation
这个接口 - 返回值类型只能是基本数据类型、String、枚举、注解、以上类型的数组
- 注解的方法被解释成属性, 返回值即它的类型. 在使用注解时需要按声明顺序赋值(仅有一个属性且其名称为value时传值可以不用输入属性名)
- 注解在加载到内存中是编译器会实现注解并产生一个子类对象, 通过该对象调用注解方法可以获取注解配置的属性值
@Target(value={ElemType.type,...}) //描述注解作用位置,type可以作用于类上
@Retention(Retention.RUNTIME) //描述被保留的阶段, RUNTIME保留到运行期
@Documented //注解是否被抽取到文档
@Inherited //使用该注解的类被继承时子类是否同样使用该注解
public @interface MyAnnotation{
int baseTyep();
String string() default "张三"
MyAnnotation annotation();
int[] arr();
}
//
@MyAnnotation(baseTyep=1,string="张三", annotation=@MyAnnotation, arr={1,2,3})
//文档注解
@author:
@version:
@
//jdk内置注解
@Override
@Deprecated
@SuppressWarnings("all")压制警告
Java枚举
Java反射
类加载过程
- java类的生命周期: java类从定义到对象创建需要经历三个阶段
- Source阶段里, JVM将java源代码编译成Java字节码文件(class文件)
- Class阶段里, ClassLoader对象将字节码文件加载进内存并产生Class对象
- Runtime阶段里, 由Java Class对象创建指定类的对象
- java类对象的创建 注意: 类的数组默认值为null, 不自动调用构造方法, 需要手动调用并赋值
- 普通创建: className target = new className(参数或缺省);
- 匿名对象创建: new className(参数或缺省)
- Class对象创建: Class.forName(“类名”).getConstructor().newInstance()
Class类是描述class字节码文件的类. 封装了维护字节码文件的一些方法. 每个类的字节码文件通过ClassLoader加载进内存后会生成一个唯一的Class类对象. 可以通过
类名.class
或对象名.getClass()
获取这个对象, 还可以通过Class类的静态方法forName(类的全引用)
来加载Class对象
//构造方法:
Class()
//成员方法: 获取类的成员之后调用
String getName(): 获取类的全名
String getSimpleName(): 获取简单类名
Field[] getFields(): 获取所有public修饰的成员变量
- Field getField():
- Field类中由get()和set()方法设置该字段值
Constructor<?>[] getConstructors()
- Constructor<T> getConstructor(类<?>... parameterTypes)
- Constructor类中有newInstance()方法创建创建类对象
Method[] getMethods()
- Method getMethod(String name, 类<?>... parameterTypes)
Field[] getDeclearFields(): 获取所有成员变量, 不考虑修饰符
- Field getDeclearField()
Constructor<?>[] getDeclaredConstructors()
- Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
Method[] getDeclaredMethods()
- Method getDeclaredMethod(String name, 类<?>... parameterTypes)
//静态方法
forName(String className): 尝试查找该类的字节码文件, 并加载到内存中返回该类的Class对象
//构造方法
//成员方法
URL getResource(String name); 获取根路径下资源的绝对路径
//静态方法