Java知识点:琐碎知识点(2)
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}; //YES
- int[]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()
{
}
}
Java知识点:琐碎知识点(2)的更多相关文章
- Java入门学习知识点汇总
Java入门重要知识点在这里总结一下,以方便日后复习,这部分内容主要有:变量和常量,常用的运算符,流程控制语句,数组,方法这些内容 一.变量和常量 1.Java关键字 先贴张图: 所有关键字区分大小写 ...
- Java编程学习知识点分享 入门必看
Java编程学习知识点分享 入门必看 阿尔法颜色组成(alpha color component):颜色组成用来描述颜色的透明度或不透明度.阿尔法组成越高,颜色越不透明. API:应用编程接口.针对软 ...
- Java研发工程师知识点总结
Java研发工程师知识点总结 最近一次更新2017年12月08日 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 ...
- 牛客网Java刷题知识点之为什么HashMap和HashSet区别
不多说,直接上干货! HashMap 和 HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的 ...
- 牛客网Java刷题知识点之为什么HashMap不支持线程的同步,不是线程安全的?如何实现HashMap的同步?
不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...
- 牛客网Java刷题知识点之Map的两种取值方式keySet和entrySet、HashMap 、Hashtable、TreeMap、LinkedHashMap、ConcurrentHashMap 、WeakHashMap
不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...
- 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别
不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...
- 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类
不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内 ...
- 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
- 牛客网Java刷题知识点之UDP协议是否支持HTTP和HTTPS协议?为什么?TCP协议支持吗?
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
随机推荐
- [转]谈谈C++中的swap函数
1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T c(a) ...
- 【Vijos】【1164】曹冲养猪
中国剩余定理 没啥重要的……模板题,中国剩余定理就是解出模线性方程组的一个可行解(好像也是唯一解?) 这是一种神奇的构造方法……明白了为什么这样构造是对的就行了=.=至于怎么想到这种构造方法的……去问 ...
- 关于asp.net mvc4 在IE8下 导出excel失败的解决办法
在使用FileResult向浏览器输出文件时(pdf,excel等),通常这样做: byte[] fileContents = Encoding.UTF8.GetBytes(sbHtml.ToStri ...
- Unity3D 游戏开发构架篇 —— 动态大场景生成 = 区域加载+对象池管理
项目做一个类似无尽模式的场景,想了一想,其实方法很简单,做一个相关的总结. 主要先谈一谈构架,后期附上代码. 一.区域加载 其实无尽场景的实现很简单,因为屏幕限制,那么不论何时何地,我们只能看到自己的 ...
- C# 使用TimeSpan计算两个时间差
转载:http://www.cnblogs.com/wifi/articles/2439916.html 可以加两个日期之间任何一个时间单位. private string DateDiff(Date ...
- 深入浅出ES6(五):不定参数和默认参数
作者 Jason Orendorff github主页 https://github.com/jorendorff 不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例 ...
- java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提
这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在 ...
- ***redis linux 命令使用总结
redis命令参考: http://redisdoc.com/ 1. [root@iZ25rloipcsZ src]# redis-cli-bash: redis-cli: command not f ...
- jQuery从主页面存取控制 iframe 中的元素,参数及方法
从主页面上获取iframe下的某个对象,或使用iframe下的方法,或是获取iframe下某个doc元素,要求兼容各类浏览器,不仅仅ie; $(function() { $('#abgne_ifram ...
- Android 判断当前联网的类型 wifi、移动数据流量
先获取系统管理网络连接的Manager: ConnectivityManager connectivityManager = (ConnectivityManager) getSystemServic ...