【注】博客在看了java程序设计基础和java语言程序设计(基础篇)总结的,想从头开始复习请请看java-第一章
一、基本数据类型
- Java对大小写敏感
- /* */注释不能嵌套
- 在Java中,整型的范围与运行Java代码的机器无关
- 长整型数值:在后面加L
- 二进制数值:前缀为0b
- 数值写法:数值可用下划线隔开,其原数值不变
- BigDecimal类:在数值计算中不含任何舍入误差
- 整型值与布尔型值之间不能互相转换
- 整数除以0产生异常;浮点数除以0得到无穷大或NaN
- stricrfp:用于修饰方法、类
- stricrfp方法:所有计算按浮点计算
- stricrfp:该类的所有方法的的计算都按浮点计算
- 字符串
- 任何一个java对象都可以转换为字符串,不是序列化
- 字符串常量共享
- 空串:长度为0;是一个Java对象
- Null串:目前没有任何对象与该变量关联
二、输入、输出
- 输入:先创建一个Scanner对象,并与“标准输入流”System.in关联
- Scanner类不适用与从控制台读取密码;用Console类可实现
- 输出
- 格式化输入:printf
- 文件读取:用File对象构造一个Scanner对象
- 写入文件:构建一个PrintWriter对象
三、大数值
- BigInteger类和BigDecimal类
- 方法:add、multiply等
- Java不提供运算符重载
四、数组
- 声明数组:类型[]变量名
- 用new初始化;或用列表初始化
- for each循环:for(variable:collection) statement
- collection必须是一个数组或者实现了Iterable接口的类对象
- 数组复制:Arrays类的copyTo方法或“=”或arraycopy方法
- 增加数组大小:Arrays.copyOf方法
- 排序:Arrays.sort方法
五、类
- 是否将某个方法设置为内联方法有Java虚拟机判断
- 对象引用是按地址传递的
- Finalize方法:在垃圾回收器清除对象之前调用:但不知何时调用
- 对象用完时,可用close方法完成相应的清理
4.7
包
- 使用方式
- Import导入整个包、类、方法、静态方法、静态域
- 类名前面加完整的包名
- 没有放置package语句,则所定义的类放置在默认包中
4.8
注释
- 注释:可在/** */中加入@
4.10
类的设计技巧
- 一定要保证数据私有
- 一定要对数据初始化(构造)
六.继承
- 如果超类没有不带参数的构造,并且在子类的构造中没有显式地调用构造,则Java编译器将报错
- 继承层次:由一个公共的超类派生出来的所有类的集合
- 继承链:从某类到其祖先的路径
- 如果一个类声明为final,只有其方法自动为final,不包括其数据成员
- Instanceof运算符:判断是否可以进行类型转换(父类转子类)
- 抽象方法不能被实例化,但可以创建一个具体子类的对象
- 如果没有明确地为某类指出超类,Object类为该类的超类
- Java中,只有基本类型不是对象
- Equals方法(Object类、Arrays类),hascode方法(Object类、Arrays类),toString方法(Object类),getClass方法(Object类,class类),getName方法(Class类),getSuperclass方法(Class类)
- ArrayList类的trimToSize方法:根据元素量确定数组的大小
- 比较枚举值时不要用equals方法
- 每个枚举类型都有一个静态的values方法,它返回一个包含全部枚举值的数组
- 反射:分析类能力;具体看reflection库
- Class类
- 方法:getName、forName、newInstance等
- newInstance方法:创建一个没有参数的对象;没有无参构造会报错
- Construtor类的newInstance方法:创建一个有参数的对象
- getFields、getMethods、getConstructor方法:分别返回类的public域、方法和构造函数数组,包括超类的公有成员
- getDeclareFields、getDeclareMethods、getDeclaredConstructors方法:分别返回类中声明的全部数据成员(域,常量除外)、方法和构造,但不包括超类的成员
- reflect包
- getName方法(Field类、Method类、Constructor类)
- getModifiers方法(Field类、Method类、Constructor类)
- Field类
- get方法:获取对象表示的域值
- set方法:设置对象的域值
- Array类:动态创建数组
- AccesibleObject类
- 是Field、Method、Constructor类的公共类
- 其方法(setAccessible):设置实例域(或数组)是否可访问
- isAccessible方法:数据成员是否可访问
七.接口与内部类
- 任何实现Comparable接口的类都需要实现CompareTo方法;形参必须有一个Object对象
- 接口绝对不能有实例域(但可以有常量);也不能实现方法
- 类实现某个接口,要定义接口的所有方法;接口的方法都是public的,所以实现其类的接口方法也应是public(子类重写的方法应更公开)
- Object类
- clone方法:拷贝对象;但若被拷贝的对象有子对象,则两个对象共享子对象
- 如果一个对象需要克隆,而没有实现Cloneable接口,就会产生一个已检验异常—CloneNotSupportException异常
- TImer类
- 定时器:以毫秒为单位
- start方法:启动定时器
- stop方法:停止定时器
- 内部类
- 内部类的对象总有一个隐式引用(outer),它指向了创建它的外部类对象;outer不是关键字
八、异常、断言、日志和调试
- 错误
- 用户输入错误
- 设备错误
- 物理内存限制
- 代码错误
- 异常对象都是派生于Throwable类的一个实例
- 直接子类:Error类和Exception类
- Error类:系统的内部错误和资源耗尽错误
- Exception类:IOException类和RuntimeException类(程序问题)
- 未检查异常:Error类和RuntimeException类;其他的为已检查异常
- 常见异常
- ParseException:解析异常;日期字符串转换为日期对象的时候可能抛出的异常
- OutOfIndexException:数组下标越界异常
- OutOfMemoryError:内存不足
- ClassCastException:类型转换异常
- ArithmaticException:除数为零
- NullPointerException:空指针异常
- 遇到无法处理的情况,应抛出异常。下面应抛出异常
- 调用一个抛出已检查异常的方法
- 程序运行过程中发现错误,并且利用throw语句
- 程序出现错误
- Java虚拟机和运行时库出现的内部错误
- 如果一个方法有可能抛出多个已检查异常,应在方法名的后面列出所有异常类
- 子类方法中声明的已检查异常不能比超类的该方法中声明的异常的层次高(说定这里Throwable层次最高);如果超类方法没有抛出已检查异常,则子类该方法不能抛出任何异常
- 抛出异常
- 找到一个合适的异常类
- 创建这个类的对象
- 将对象抛出
- 创建异常类:派生于Exception类或其子类
- try…catch
- catch字句也可抛出一个异常
- try…finall:可没有catch子句
- 堆栈跟踪
- getStackTrace方法:得到StackTraceElement对象的一个数组
- Thread.getAllStackTrace方法:产生所有线程的堆栈跟踪
- java.lang.Throwable
- StackTraceElement[] getStackTrace():获得构造这个对象时调用堆栈的跟踪
- java.lang.StackTraceElement
- getFileName():返回这个元素运行时对应的源文件名
- getLineNumber方法:返回这个元素运行时对应的源文件行数
- getClassName方法:返回这个元素运行时对应的类的全名
- 使用异常技巧
- 只有在异常情况下才使用异常机制
- 不要过分地细化异常
- 利用异常层次:不要只抛出RuntimeException异常,寻找更适合的子类或创建自己的异常类;不要只捕获Throwable异常
- 传递异常要比捕获这些异常更好
- 使用断言
- 某个类或包启用断言(cmd命令):java –ea:类名/包名应用名
- 断言失败是致命的、不可恢复的错误
- 断言检查只用于开发和测试阶段
- 日志
- 程序整个生命周期都可使用
- Logger.global:默认日志记录器
- 取消所有日志:Logger.getGlobal().setLevel(Level.OFF)
- 日志记录器级别
- 默认:SEVERE,WARNING,INFO
- 其他级别:CONFIG,FINE,FINER,FINEST
- 如果虚拟机对执行过程进行了优化,就得不到准确的调用信息
九
.
泛型程序设计
- 编写的代码可以被很多不同类型的对象所重用
- 用继承实现的
- 通配符类型
- 如同c++中的类模板;java可以用类或接口继承泛型程序