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)的更多相关文章

  1. Java入门学习知识点汇总

    Java入门重要知识点在这里总结一下,以方便日后复习,这部分内容主要有:变量和常量,常用的运算符,流程控制语句,数组,方法这些内容 一.变量和常量 1.Java关键字 先贴张图: 所有关键字区分大小写 ...

  2. Java编程学习知识点分享 入门必看

    Java编程学习知识点分享 入门必看 阿尔法颜色组成(alpha color component):颜色组成用来描述颜色的透明度或不透明度.阿尔法组成越高,颜色越不透明. API:应用编程接口.针对软 ...

  3. Java研发工程师知识点总结

    Java研发工程师知识点总结 最近一次更新2017年12月08日 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 ...

  4. 牛客网Java刷题知识点之为什么HashMap和HashSet区别

    不多说,直接上干货! HashMap  和  HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的 ...

  5. 牛客网Java刷题知识点之为什么HashMap不支持线程的同步,不是线程安全的?如何实现HashMap的同步?

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  6. 牛客网Java刷题知识点之Map的两种取值方式keySet和entrySet、HashMap 、Hashtable、TreeMap、LinkedHashMap、ConcurrentHashMap 、WeakHashMap

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  7. 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  8. 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类

    不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内 ...

  9. 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  10. 牛客网Java刷题知识点之UDP协议是否支持HTTP和HTTPS协议?为什么?TCP协议支持吗?

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

随机推荐

  1. linux 下 安装 rpm 格式 的 mysql

    在Linux操作系统下,安装MYSQL有两种方式: 一种tar安装方式, 另外一种是rpm安装方式. 这两种安装方式有什么区别呢?尽管我们在Linux下常用tar来压缩/解压缩文件,但MYSQL的ta ...

  2. c++ 如何实现,readonly

    需求: 我要实现一个常量字段,只能赋值一次,赋值后不容许更改. 类似于c#的readonly或者java final #include <iostream> class  A{public ...

  3. SVN--从本地检出项目至服务器报错--禁止访问

    错误描述: 原因:这是访问权限限制引起的. 查看/svn/test目录的权限--之前我修改过的 现在添加一个user就好了--这个添加的developer是我之前导入本地项目时已经验证过的,所以再导入 ...

  4. css3选择器笔记

    通用选择器ul~p{}  为ul之后的所有p标签设置属性 (ul和p为同级元素)ul+p{} 仅为ul之后的p标签设置属性 (ul和p为相邻元素)div>p  为div之后的p标签设置属性{ d ...

  5. C++ explict 关键字

    关键字explicit可以禁止“单参数构造函数”被用于自动类型转换class Stack{explicit Stack(int size);};没有explicit的话Stack s = 40;能编译 ...

  6. [转] ADO.NET实体框架引发争论

    转自:http://developer.51cto.com/art/200811/76356.htm 2008-11-11 14:00 朱永光译 infoq 我要评论(0) 一个在ADO.NET实体框 ...

  7. POJ 2407 Relatives(欧拉函数)

    题目链接 题意 : 求小于等于n中与n互质的数的个数. 思路 : 看数学的时候有一部分是将欧拉函数的,虽然我没怎么看懂,但是模板我记得了,所以直接套了一下模板. 这里是欧拉函数的简介. #includ ...

  8. BZOJ 3198 SDOI2013 spring

    为什么SDOI省选一年考两次容斥原理? 我们很容易发现>=k个相等时很好计算的 但是我们要求恰好k个,那么我们容斥即可 至于计算>=k个相等,首先我们枚举相等位置,对每个串对应位置做一遍h ...

  9. ADO.NET基础01(ADO.NET组成,数据库的方式,SqlCommand,SqlDataReader)

    什么是ADO.NET: ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类操作文件一样, System.Data.这组类是用来操作数据库(不光是MSS ...

  10. iOS 使用COPY声明NSSTRING属性

    使用COPY声明NSSTRING属性 2014/05/29 JACE 发表回复 声明一个NSString属性使用copy要优于使用strong.这同样适用于遵守NSCoding协议的不可变类(immu ...