java基础知识梳理
- 数据类型
- 8种基本数据类型
- 装箱拆箱和缓存池技术
- String对象
- 传递规则
- 面向对象支持
- 关键字
- 抽象类与接口
- 重写与重载
- Object类
- 反射
- class对象
- 反射机制
- 优点
- 缺点
- 异常机制
- 注解
数据类型
8种基本数据类型
- 整型:byte(8) short(16) int(32)long(64)
- 浮点型:float(32)double(64)
- 字符型:char(16)
- 布尔型: boolean(1)
装箱拆箱和缓存池技术
- 装箱:将基本数据类型变为包装数据类型,例如
Integer i= 1
,除此之外还可以使用Integer.valueOf()
函数进行装箱 - 拆箱:将包装数据类型转换为基本数据类型,例如
int 1 = i +1
,虚拟机自动使用intValueOf()
函数进行拆箱 - 缓存池:对于整型和字浮型数据,虚拟机会在堆(1.7)中创建一个含有[-128,127]范围内对象的的Integer对象池,当使用
valueOf()
时,虚拟机会在对象池中搜索对应的对象并返回它的引用,因此在使用valueOf()
创建整型对象时可能会返回同一个对象。但是虚拟机不会创建浮点数的对象池。
String对象
String对象是不可变的,在String内部是用一个由final
修饰的char
数组实现的,直接使用双引号声明出来的String对象会直接存储在常量池中。如果是使用new String()
生命的对象可以使用intern()
方法主动将字符串放到常量池
为什么要这样设计?
1.这样字符类型就可以作为hashMap的key
2.可以提升使用String的效率
3.可以保证线程安全
传递规则
在函数的参数列表中采用的是值传递而不是引用传递,即传递的是指针的copy
面向对象支持
关键字
- private 使用private关键字声明的方法或参数只能在当前类访问
- protect 使用protect关键字声明的方法或者参数只能由其子类或者当前类访问
- public 使用public关键字声明的方法或者参数能被所有地方访问
抽象类与接口
抽象类:方法可以不必全部实现,只能继承一个
接口:方法必须全部实现(1.7支持有默认实现),能继承多个
重写与重载
重写:重写父类的方法
重载:和当前方法名字相同但是参数列表不相同
Object类
- hashcode 获得当前类的hash值,默认实现是返回当前对象的地址
- equals 判断两个实例是否相等,如果要将实例放在hash表结构中,则需要同时重写hashcode方法,具有equals相同,hashcode的值也相同
- clone 复制当前对象,被protect修饰,不能直接调用必须先继承类并重写这个方法,而且要实现cloneable接口不然会抛出异常
- toString 默认是打印出类的标识符,格式是:类名@hashcode
- getClass 返回当前对象对应的类的信息
- notify 随机唤醒在相应等待队列的一个线程
- notifyAll 唤醒在相应等待队列的所有线程并让他们竞争资源
- wait 时当前线程等待
反射
class对象
图中可以得出以下几点:
- Class 类的实例对象表示正在运行的 Java 应用程序中的类和接口。也就是jvm中有很多的实例,每个类都有唯一的Class对象。
- Class 类没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机自动构造的。也就是说我们不需要创建,JVM已经帮我们创建了。
- Class 对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法
反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射可以根据类的信息在运行时动态的加载类。Class
和java.lang.reflect
一起对反射提供了支持。reflect
类库主要包含了以下三个类:
- Field:可以使用get和set方法读取和修改Field对象相关字段
- Methed:可以使用invoke方法调用与Method对象关联的方法
- Constructor:可以使用它创建新的对象
反射的使用:
优点
- 可拓展性:通过全限定名加载对象,可以加载来自外部的用户自定义类
- 可以可视化开发环境:IDE可以通过反射机制获取类之间的结构
- 方便调色与测试
缺点
- 性能开销较大,JVM无法对反射类进行优化
- 安全性不行
- 会导致内部方法被暴露
异常机制
java异常指在程序运行时可能出现的一些错误,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,中断了正在执行的程序的正常指令流。Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。当条件生成时,错误将引发异常
原文:
- try-catch-finally 对于try-catch-finally语句:先执行try 块中的代码,如果正常运行没有发生异常则执行完后执行finally 代码块中的代码;如若在try 中发生异常且被catch 捕捉到则执行catch 中的代码块,然后执行finally 块中的代码;
注解
注解时附加在代码中的一些元信息,用于一些工具编译、运行时进行解析和使用,起到配置说名的功能。