Java知识点:琐碎知识点(1)

Java基本介绍

SUN:Stanford University Network
Java之父:James Gosling
Java的跨平台性因为有Java虚拟机,运行class文件。
Java吉祥物:Duke
JDK是用来开发的(编译Java程序),而如果只运行Java程序,则只需要JRE即可。
而JDK也是用Java写的,因此如果要编译Java程序,也要JRE,因此在JDK目录中也会有一个JRE目录。
第三方的JAR包(dom4j.jar)都是由class文件组成的,Eclipse的“add to build path”就是将jar包加入环境变量classpath中。

标识符命名规范

关键字必须是小写

  1. 不能用Java的关键字作为标识符名称。
  2. 以“字母、$、下划线”作为开始。
  3. 允许“字母、$、下划线、数字”。

花括号的对齐方式

void fun()        //建议使用                                                     void fun(){    //不建议使用
{                              

}                             }

类、接口、方法、变量命名规范

  • 类: 名词,比如 Apple
  • 接口:形容词,比如Serializable(可序列化)
  • 方法:动词+名词,比如 doCalculation()
  • 变量:名词

JavaBeans 命名规范

  • JavaBeans是一个带有属性的Java类。
  • 如果属性是Boolean类型,则getter方法可以是isXxx()或getXxx(); 如果属性是非Boolean类型,则getter方法可以是getXxx()。
  • setter方法的命名是:setXxx()。
  • 对于监听器方法,命名规范为:addXxxListener() 和 removeXxxListener()。

Strictfp

  • strictfp: strict floating-point calculation(严格浮点运算)
  • 介绍:strictfp 是 Java 的关键字(keyword),自从 Java 1.2 以来被引入,使得浮点运算遵循 IEEE 754 标准。
  • 目的:portable(可移植性)。
  • 需求:在每个平台(机器)上(32位、64位)的浮点运算精度相同,比如,使用 strictfp 规定浮点运算的精度是32位,而在64位的机器上浮点运算可以精确到64位,但是使用strictfp后,就算在64位的机器上运行程序,浮点运算精度仍为32位。
 1 public class Strictfp

 2 {

 3     public static void main(String args[])

 4     {

 5         A a = new A();

 6         System.out.println(a.subtract1(2.00,1.10));

 7         System.out.println(a.subtract2(2.00,1.10));

 8     }

 9 }

10 

11 class A

12 {

13     public double subtract1(double left,double right)

14     {

15         return left - right;

16     }

17     public strictfp double subtract2(double left,double right)

18     {

19         return left - right;

20     }

21 }

局部变量

  • 声明局部变量时建议要初始化,虽然不初始化本身不会编译错误,但是你使用了未初始化的变量时会Compile Error。
int a;

System.out.println(a);    //Compile Error:"可能尚未初始化变量 a"

a+=b 与 a=a+b的区别

 (假设a的类型是A,b的类型是B)

  • a+=b  等价于  a=(A)(a+b)

异常分类

  • RuntimeException:不用捕获或声明抛出的异常,如NullPointerException。
  • 检验异常:需要捕获或声明抛出的异常。
  • Error:机器内部错误。

进制转换

 1 public class Wrapper01

 2 {

 3     public static void main(String[] args) {

 4         System.out.println(Integer.parseInt("111100",2));                                    //二进制 -> 十进制

 5         System.out.println(Integer.toHexString(Integer.parseInt("111100",2)));    //二进制 -> 十六进制

 6         System.out.println(Integer.toOctalString(Integer.parseInt("111100",2)));    //二进制 -> 八进制

 7 

 8         System.out.println(Integer.parseInt("74",8));                                            //八进制 -> 十进制

 9         System.out.println(Integer.toBinaryString(Integer.parseInt("74",8)));        //八进制 -> 二进制

10         System.out.println(Integer.toHexString(Integer.parseInt("74",8)));        //八进制 -> 十六进制

11 

12         System.out.println(Integer.toHexString(60));                                            //十进制 -> 十六进制

13         System.out.println(Integer.toOctalString(60));                                            //十进制 -> 八进制

14         System.out.println(Integer.toBinaryString(60));                                            //十进制 -> 二进制

15 

16         System.out.println(Integer.toBinaryString(Integer.parseInt("3C",16)));    //十六进制 -> 二进制

17         System.out.println(Integer.toBinaryString(Integer.parseInt("3C",16)));    //十六进制 -> 二进制

18         System.out.println(Integer.parseInt("3C",16));                                        //十六进制 -> 十进制

19     }

20 }

不用第三方变量交换整数

a = a ^ b;

b = a ^ b;    //(a^b)^b=a ,现在b=a

a = a ^ b;    //(a^b)^a = b,现在a=b

临时环境变量设置

  • set PATH    //显示PATH
  • set PATH=XXXXX   //设置PATH

方法重写

  假设原方法为A,重写的方法为B

  • 方法B的返回类型可以是方法A的返回类型的子类型。
  • 方法B不能抛出比方法A更多的异常。
  • 方法B的访问控制不能比方法A的更限制。

 重写与重载的区别

  重载 重写
参数 必须改变 一定不能改变
返回类型 可以改变 一般不改变
异常 可以改变 只能抛更小的异常
访问级别 可以改变 一定更广
调用 编译时决定调用哪个重载版本 运行时决定调用哪个重写方法
 1 public class Polymorphism02

 2 {

 3     public static void fun(Student student)

 4     {

 5         System.out.println("调用了以Student为参数的函数");

 6         student.print();

 7     }

 8     public static void fun(Person person)

 9     {

10         System.out.println("调用了以Person为参数的函数");

11         person.print();

12     }

13     public static void main(String[] args) {

14         Person person = new Student();

15         fun(person);        //调用了fun(Person person),但是因为多态性,所以函数中的person.print()调用了Student的print方法

16     }

17 }

18 

19 class Person

20 {

21     public void print()

22     {

23         System.out.println("Person");

24     }

25 }

26 class Student extends Person

27 {

28     public void print()

29     {

30         System.out.println("Student");

31     }

32 }

初始化块

  • 静态代码块:加载类时被执行,即使创建了多个类对象,但是只在第一次创建前执行静态代码块。
  • 一般初始块:调用构造函数的super语句(第一句)后执行。
 1 public class InitializationBlock01

 2 {

 3     public static void main(String[] args) {

 4         //output: a b z c d e f c d e f

 5         System.out.println("z");

 6         B b = new B();    

 7         B c = new B();

 8     }

 9 }

10 class A

11 {

12     {

13         System.out.print("c ");

14     }

15     public A()

16     {

17         System.out.print("d ");

18     }

19 }

20 class B extends A

21 {

22     static

23     {

24         System.out.print("a ");

25     }

26     public B()

27     {

28         System.out.print("f ");

29     }

30     {

31         System.out.print("e ");

32     }

33     static

34     {

35         System.out.print("b ");

36     }

37 }

位运算

  • a >> b :a是int,则有32位,这个运算是将a有符号右移(b%32)位;a是long,则有64位,这个运算是将a有符号右移(b%64)位.
  • a >>> b: a是int,则有32位,这个运算是将a无符号右移(b%32)位;a是long,则有64位,这个运算是将a无符号右移(b%64)位.
  • a << b : a是int,则有32位,这个运算是将a左移(b%32)位;a是long,则有64位,这个运算是将a左移(b%64)位.

你可能感兴趣的:(java)