Java知识点:琐碎知识点(2)
2013-08-06 18:51
162 查看
49个关键字一览
abstract | default | if | private | this |
boolean | do | implements | protected | throw |
break | double | import | public | throws |
byte | else | instanceof | return | transient |
case | extends | int | short | try |
catch | final | interface | static | void |
char | finally | long | strictfp | volatile |
class | float | native | super | while |
const | for | new | switch | null |
continue | goto | package | synchronized |
main函数
main函数并不只有public static void main(String args[]),还可以是 final public static void main(String[]args) 或 public static void main(String...args)不允许:public static void main(String[]...args).
如果类A没有main函数,当 “java A” 时,会抛:Exception NoSuchMethodError: main.
断言机制
语法:assert <boolean expression>;
assert <boolean expression> : <str>; str是在抛出AssertionError时输出的描述信息。
断言默认是关闭的。
可以针对某个类、某个包、或全部类 使用断言或禁用断言。
准则:
如果 assert fails,则抛出AssertionError。
不要使用断言验证任何公共方法(包括main方法)的参数。
不要使用可能产生副作用的断言表达式。
断言的宗旨:加和不加断言对于程序没有任何影响,因为断言只用来验证。
对于断言可能抛出的AssertionError,不需要去特别处理这个Error。
如果用-source 1.3编译代码时assert用作标识符,则虽然编译成功,但会有警告。
静态变量
在一般方法内不能声明静态变量,因为静态变量要求在类加载时就分配空间。异常层次
异常准则:
编译器禁止永远不可达的catch子句,否则会编译错误:XXX has already been caught。
public class Exception02 { public static void main(String[] args) { try { int x = 0; int y = 5 / x; } catch (Exception e) { System.out.println("Exception"); } catch (ArithmeticException ae) { //Compile Error: 因为永远不可达 System.out.println("Arithmetic Exception"); } System.out.println("finished"); } }
类声明的访问级别
声明一般类时,只能使用public或default访问级别,因为其他两个访问修饰符对一般类没有意义。包装类的equals方法实现
这里用Integer举例子:public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
因此不管怎么调用equals方法,都不会抛异常。
如果a是Integer类型的,执行a.equals(b),只要b不是Integer类型的,都会返回false。
包装器类的构造函数
存在参数为String的构造函数,这里以Boolean为例。new Boolean(String str);
死循环编译错误
下面的代码会编译错误:while(true) { } int a = 1; //Compile Error:不可达的语句
但是下面的代码不会编译错误:
while(true) { }
内部类注意点
一般内部类中不允许定义任何静态成员。数组的声明方法
int[]arr = new int[]{1,2,3}; //YESint[]arr = new int[3]{1,2,3}; //NO
Math类
Math.sqrt(double a)如果a是NaN或者小于0,则返回NaN。
如果a是正无穷大,则返回正无穷大。
如果a是正0或负0,则返回与参数相同。
Math.cos(double a)
a是用弧度表示的角。
Math.toRadians(double a):角度->弧度
Math.toDegrees(double a):弧度->角度
位运算问题
正数的无符号右移并不一定还是正数。对于 c = a >>> b,即使 a>0,b>1,有可能使得 c<0的,比如:
int a = 1; int b = Integer.MAX_VALUE + 1; int c = a >>> b; // c=-1
文件I/O问题
如果要设置输出的编码,只能使用 OutputStreamWriter,因为它能够通过如下构造函数设置输出编码:new OutputStreamWriter(OutputStream out, String charSet);
FileOutputStream存在 FileOutputStream(File file,boolean append); 第二个参数如果为true,表示将写入的内容放入文件末尾。
带标签的break和continue
标签一定要直接位于while或for语句之前,否则Compile Error。静态代码块异常
如果在静态初始化程序时(比如静态代码块)发生异常,则统一抛出:ExceptionInInitializerError。public class InitializationBlock02 { static { int a = 1/0; //抛ExceptionInInitializerError, } public static void main(String args[]) { } }
外部类声明注意点
static不能用于修饰外部类。重写的注意点
重写方法不能抛出更广的检验异常。编译器没有判断多态性的能力,如果有类A和类B,且B extends A,如果A a = new B(); a.fun(),则编译器认为你在调用A的fun方法,因此如果A的fun方法抛出检验异常,则你需要捕获,不然会Compile Error。
public class Overridding02 { public static void main(String[] args) { A b = new B(); //Compile Error: 未报告的异常 java.lang.Exception b.fun(); } } class A { public void fun() throws Exception { } } class B extends A{ public void fun() { } }
相关文章推荐
- Thinking in java 琐碎知识点之 I/O流 、对象序列化
- 疯狂java讲义 琐碎知识点
- 一些关于Java的琐碎基本知识点
- Java琐碎知识点
- JAVA学习之必备知识点琐碎(一)
- 32点关于Java的琐碎知识点
- Thinking In Java琐碎知识点摘要(二)
- 一些关于java的琐碎知识点
- 一些关于Java的琐碎知识点
- java琐碎知识点410
- java琐碎的知识点
- Tinking in java 琐碎知识点之反射
- Java知识点:琐碎知识点(1)
- Thinking In Java琐碎知识点摘要(一)
- Tinking in java 琐碎知识点之集合(容器)
- Java知识点:琐碎知识点(3)
- java琐碎知识点1
- [Java笔试面试知识点自整理系列]HashMap,HashTable的区别
- Java知识点归纳(持续更新)
- java中Set接口知识点