Java学习笔记,,看的书是《Java2参考大全》和老师讲及自己查的 现在还不是整理的很好,,留待有空再弄了。
1,对对象进行层级分类抽象;按层分类
2,面向对象编程: 封装+继承+多态;
3,超类=superclass=父类;
4,约定类名和文件名相同(考虑大小写);
5,java中char型数据大小两个字节;而c/c++中占一个字节。
6,boolean占4个字节(与int型一样),但是但是boolean数组每个元素仅占一个字节;byte占一个字节;char两个字节;
7,Java中的浮点字面量(常量)默认是双精度;
8,Java字符串应注意的一件重要的事情是它们必须在同一行开始和结束;
9,Note:尽管程序块能被嵌套,你不能将内部作用域声明的变量与其外部作用域声明的变量重名;
10,模运算符%也可用于浮点数(float/double);被除数%除数=余数(note:余数的符号永远与被除数相同,而与除数无关)
11,do{ }while(condition);//注意分号。
12,break做跳转语句:break label;//语法格式。▲
13,标签break语句的一个最普遍的用法是退出循环嵌套。Note:如果一个标签不在包围break的块中定义,你就不能break到该标签; Note:continue加标签的使用;
14,new运算符为对象动态分配(即在运行时分配)内存空间,并返回对它的一个引用;
15,类是一个逻辑构造,对象有物理的真实性(也就是对象占用内存空间);
16,注意:当你将一个对象引用赋值给另一个对象引用时,你并没有创建该对象的一个拷贝,而是仅仅对引用的一个拷贝。
17,Java的内存自动回收,与c++不同,不需考虑内存回收的问题。
18,finalize( )正好在垃圾回收以前被调用,在对象被释放之前,Java运行系统调用该对象的finalize( )方法,在finalize ( )方法中,你要指定在一个对象被撤消前必须执行的操作;重载时,返回类型不足以区分两个不同的方法,必须参数列表要有所不同。
19, 指示符protected仅用于继承情况中;
20, 如果不使用访问指示符,该类成员的默认访问设置为在它自己的包内为public;
21,访问指示符位于成员类型的其他说明的前面。也就是说,成员声明语句必须以访问指示符开头;
22,声明为static的变量实质上就是全局变量。
23,声明为static的方法有以下几条限制: · 它们仅能调用其他的static方法。 · 它们只能访问static数据。 · 它们不能以任何方式引用this或super(关键字super与继承有关,在下一章中描述)。
24,如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static块仅在该类被加载时执行一次
25,Final用于变量: 一个变量可以声明为final,这样做的目的是阻止它的内容被修改。这意味着在声明final变量的时候,你必须初始化它(在这种用法上,final类似于C/C++中的const)为final变量的所有的字符选择大写是一个普遍的编码约定。声明为final的变量在实例中不占用内存。这样,一个final变量实质上是一个常数。 26,Java支持动态数组;
27,嵌套类可以访问嵌套它的类的成员,包括private成员。但是,包围类不能访问嵌套类的成员;
28, note:boolean,byte,short等大小比int型短的类型在运算时统统变为int型后在运算;(易错点)
29,instanceof用来判断数据所属的类型;作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据;是个特殊的二院运算符(与+,-等一样); 30,null不属于任何类型;
31,继承中final的使用(与变量不同): A,使用final阻止重载:在方法前定义final修饰符,表示不接受方法被重载; B,使用final阻止继承,防止一个类被继承。做到这点只需在类声明前加final。声明一个final类含蓄的宣告了它的所有方法也都是final;
32,note: 声明一个既是abstract的又是final的类是不合法的,因为抽象类本身是不完整的,它依靠它的子类提供完整的实现;
33.变量的初始化:1)类中声明的成员变量在声明时系统自动给初始化(bolean类型初始值false);
2)而方法内声明的变量(即局部变量)则默认不会自动初始化,值未知。因此,建议在方法内声明变量时立即进行初始化,防止错误。
34.方法内传递的形参为局部变量,不进行初始化;
35. Java中的方法除了被static和final修饰的方法外,其他所有的方法都是在运行时绑定的,(practice方法都被隐式指定为final的);
36,访问对象的唯一方法为引用,有几个new,就建立了几个对象;
37. 如果一个类的名字被声明为public,则文件的名字必须被命名为此类的名字,也因此,同一个文件中不可能声明两个以上的public类;
37. 修饰类的修饰符有public和(default);protected,private不行。。一个类只可能有两个访问级别:默认的或是公共的。如果一个类声明成public,它可以被任何其他代码访问。如果该类默认访问控制符,它仅可以被相同包中的其他代码访问。
38. 任何含有一个或多个抽象方法的类都必须声明成抽象类。声明一个抽象类,只需在类声明开始时在关键字class前使用关键字abstract;
39, 在接口中指定的方法没有默认的实现。每个包含接口的类必需实现所有的方法;
40,。如果一个类实现两个声明了同样方法的接口,那么相同的方法将被其中任一个接口客户使用。实现接口的方法必须声明成public。而且,实现方法的类型必须严格与接口定义中指定的类型相匹配。
41,警告:因为Java中在运行时动态查询方法与通常的方法调用相比会有一个非常庞大的花费,所以在对性能要求高的代码中不应该随意的使用接口
42,可以把变量定义成使用接口的对象引用而不是类的类型。任何实现了所声明接口的类的实例都可以被这样的一个变量引用。但是一个接口引用变量仅仅知道被它的接口定义声明的方法;
43. 如果一个类包含一个接口但是不完全实现接口定义的方法,那么该类必须定义成abstract型
44,可以使用接口来引入多个类的共享常量,这样做只需要简单的声明包含变量初始化想要的值的接口就可以了,可以使用接口来引入多个类的共享常量,这样做只需要简单的声明包含变量初始化想要的值的接口就可以了;
46, 当你用多catch语句时,记住异常子类必须在它们任何父类之前使用是很重要的;
47,finally创建一个代码块。该代码块在一个try/catch 块完成之后另一个try/catch出现之前执行。finally块无论有没有异常引发都会执行。如果异常被引发,finally甚至是在没有与该异常相匹配的catch子句情况下也将执行。一个方法将从一个try/catch块返回到调用程序的任何时候,经过一个未捕获的异常或者是一个明确的返回语句,finally子句在方法返回之前仍将执行,。finally子句是可选项,可以有也可以无。然而每一个try语句至少需要一个catch或finally子句。
48, 如果finally块与一个try联合使用,finally块将在try 结束之前执行
49, java.lang实际上被所有的Java程序引入;
50,抽象类中可以没有抽象方法;用abstract修饰的类就是抽象类,并不是说抽象类中必须有抽象方法,即使一个类中的方法全部实现过,也可以用abstract修饰为抽象类,所以抽象类不一定都有抽象方法。抽象类不能被实例化,即使是一个没有抽象方法的抽象类,也同样不能被实例化;
52,Sleep()语句明确规定延迟时间是1毫秒;Thread类的sleep()方法可能引发一个InterruptedException异常。这种情形会在其他线程想要打搅沉睡线程时发生。 53,创建子线程中两种方法的选择:如果你不重载Thread的其他方法时,最好只实现Runnable 接口;
54,多线程调用的时候,要考虑并保证主线程最后结束;
55,有两种方法可以判定一个线程是否结束。第一,可以在线程中调用isAlive()。这种方法由Thread定义,它的通常形式如下: final boolean isAlive( ) 如果所调用线程仍在运行,isAlive()方法返回true,如果不是则返回false。但isAlive()很少用到,等待线程结束的更常用的方法是调用join(),描述如下: final void join( ) throws InterruptedException 该方法等待所调用线程结束。该名字来自于要求线程等待直到指定线程参与的概念。 join()的附加形式允许给等待指定线程结束定义一个最大时间;
56,设置线程的优先级,用setPriority()方法,该方法也是Tread 的成员。它的通常形式为: final void setPriority(int level) 这里, level 指定了对所调用的线程的新的优先权的设置。Level 的值必须在MIN_PRIORITY到MAX_PRIORITY范围内。通常,它们的值分别是1和10。。这些优先级在Thread中都被定义为final型变量。 57,以通过调用Thread的getPriority()方法来获得当前的优先级设置。该方法如下: final int getPriority();
58,同步:::synchronized修饰符,Java包含了通过wait( ),notify( )和notifyAll( )方法实现的一个进程间通信机制。这些方法在对象中是用final方法实现的,所以所有的类都含有它们。这三个方法仅在synchronized方法中才能被调用。输入输出:
59,欲使用流类,应包含java.io包;
60,System.in 是inputStream的对象;System.out和System.err是PrintStream的对象。它们都是字节流;
61,尽管Java允许用System.out向控制台写数据,但建议仅用在调试程序时或在例题中,这在本书中得到充分体现。对于实际的程序,Java推荐的向控制台写数据的方法是用PrintWriter流;小应用程序:
62,每一个小应用程序都必须是Applet的子类(需要继承Applet类);特殊的修饰符:
63,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持;
64,Volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变;
65,。用strictfp来修饰类或方法,可以确保浮点运算(以及所有切断)正如它们在早期Java版本中那样准确。切断只影响某些操作的指数。当一个类被strictfp修饰,所有该类的方法都自动被strictfp修饰。