Java基础(一)

Java基础知识点总结
该博客总结了Java基础知识点,涵盖数据类型、运算符、String类、枚举、泛型、异常、注解与反射、动态代理和内部类等内容。介绍了数据类型的字节占用和表示方式,运算符的使用规则,String类的特性,以及不同类型的动态代理和内部类的特点。

一、数据类型
在这里插入图片描述
char 占用两个字节,jvm采用Unicode16编码,每个char占用两个字节。
浮点类型数值后面跟f、l 例如 float f1 = 5.1f double d1 = 4.1d long size = 5L

二、运算符

在这里插入图片描述
①移位运算符:<< 、>>、 >>>。移位运算符是针对int类型的。如果不是int先强转,然后再移位,最后再强转成之前的类型。 << 左移,低位补0。 >>又移 高位补充符号位,正数补0,负数补1。>>> 右移,高位都补0。

②自增运算符:++i、i++ ,他们只有在参与运算的时候有区别,a = ++i +3; a = i++ +3; 前者先自增再运算,后者先运算再自增。

三、String类

①String对象是不可变的
在这里插入图片描述
②String常量池
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。Java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串。对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果常量池中存在即返回该对象。

运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。

运行时常量池相对于CLass文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用比较多的就是String类的intern()方法。

③String、StringBuffer和StringBuilder的区别

StringBuffer 线程安全,增删方法添加了synchronized,StringBuilder没有同步修饰。在非多线程的情况下,StringBuilder效率要高一点。

四、枚举Enum

enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum。EnumTest 经过反编译(javap com.hmw.test.EnumTest 命令)之后得到的内容如下:

public class com.hmw.test.EnumTest extends java.lang.Enum{
    public static final com.hmw.test.EnumTest MON;
    public static final com.hmw.test.EnumTest TUE;
    public static final com.hmw.test.EnumTest WED;
    public static final com.hmw.test.EnumTest THU;
    public static final com.hmw.test.EnumTest FRI;
    public static final com.hmw.test.EnumTest SAT;
    public static final com.hmw.test.EnumTest SUN;
    static {};
    public int getValue();
    public boolean isRest();
    public static com.hmw.test.EnumTest[] values();
    public static com.hmw.test.EnumTest valueOf(java.lang.String);
    com.hmw.test.EnumTest(java.lang.String, int, int, com.hmw.test.EnumTest);
}

所以,实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。

五、泛型

  • 1.泛型通配符:?表示,通常用于操作任意参数类型的泛型。强调的是通用性。

  • 2.泛型的界限:其目的是在一定范围内扩大可以操作的参数类型。分为上界限,和下界限。

泛型上界:表现形式:<? extends A> 表示的含义是:可以操作的参数类型可以是,A类型以及A的子类。通常这种

在集合中取出元素的时候常常使用,通常用A类型来接收取出的元素。<=A

泛型下界:表现形式:<? super A> 表示的含义是:可以操作的参数类型是:A类型及其父类型。通常这种在接收元素

做比较的时候使用,可以使用自己的比较器,也可以使用父类的比较器。泛型下限的使用不多 。>=A

六、异常

所有异常的父类都是Throwable。Throwable(可抛的)主要分为三类:受检测异常(checked exception)、运行时异常(runtime Exception)和错误(error)。

对于可恢复的情况,要抛出受检查异常;对于程序错误,要抛出运行时异常。

七、注解+反射

八、动态代理

动态代理有两种:JDK提供的api、CGLib字节码生成库实现。

JDK动态代理:基于接口的。生成代理类比较快,运行方法比较慢。
CGLib:继承,生成子类。生成代理类比较慢,运行方法比较快。

九、内部类
成员内部类、 静态内部类、 局部内部类、 匿名内部类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值