JavaSE-Headfirst Java笔记

来源:互联网 发布:淘宝代购网店怎么开 编辑:程序博客网 时间:2024/06/05 08:02

一、对象和方法
1 对象本身已知的事物称:实例变量;对象可以执行的动作称:方法
2任何变量只要加上public、static、final,基本上都会变成全局变量取用的常数。
3圆点运算符含义:取得圆点前面的对象,然后求出该对象在圆点后面的事物:dog.bark();
4方法会运用形参,调用的一方会传人实参
5 Getter与Setter可让你执行get与set。Getter的目的只有一个,就是返回实例变量的值。Setter的目的是要取用一个参数来设定实例变量的值
6封装的基本原则:将实例变量标记为private,将getters与setters标记为public来控制存取动作。
7实例变量永远都会有默认值。如果没有明确赋值给实例变量,或者没调用setter,实例还是会有值
8实例变量与局部变量的区别:(1)实例变量是声明在类内而不是方法中。(2)局部变量是声明在方法中。(3)局部变量在使用前必须初始化。
9使用Interger.parseInt()来取得string的整数值。只会在所给的string为数字时有作用。
10产生随机数:int randomNum=(int)(Math.random()*5); Math.random会返回double类型,会返回一个介于0到1之间的数。
二、编写程序
1 BufferedReader is=new BufferedReader(new InputStreamReader(System.in));
imputLine=is.readLine();
2 ArrayList用法:(1)add(Object elem):想list中加入对象参数,如Egg b=new Egg();myList.add(b);
(2)remove(int index):在索引参数中移除对象,若没有元素返回true,如myList.remove(b);
(3)remove(Object elem):移除改对象
(4)contains(Object elem):如果和对象参数匹配返回“true”,查询特定元素
(5)isEmpty():如果list中没有元素返回“true”,判断集合是否为空
(6)indexOf(Object elem):返回对象参数的索引或-1查询特定元素的位置,int a=myList.indexOf(b);
(7)size():返回list中元素的一个数,查询大小
(8)get(int index):返回当前索引参数的对象
ArrayList只需创建出此类型的对象,不需指定大小,因为他会在加入或删除元素时自动的调整大小
(9)任何从ArrayList取出的东西都会被当作Object类型的引用二不管他原来是什么
3曾经标准版的扩展都以javax作为包名称的开头
三、继承与多态
1成员的意思是:实例变量和方法
2public类型的成员会被继承;private类型的成员不会被继承
3继承的意义:(1)避免了重复的程序代码(2)定义出共同的协议
4继承让你可以确保某个父型之下的所有类都会有父型所持有的全部方法
5覆盖:(1)参数必须要一样,且返回类型必须要兼容(2)不能降低方法的存取权限
6重载:意义:两个方法的名称相同,但参数不同,与继承或多态无关。(1)返回类型可以不同(2)不能只改变返回类型(3)可以更改存取权限
7设计抽象类方法:在类的声明前面加上抽象类关键字abstract,如:
abstract class Canine extends Animal{
public void roam(){}
}
编译器不会让你初始化抽象类,抽象类代表没有人你能够创建出该类的实例。你还是可以使用抽象类来声明为引用类型给多态使用,却不用担心哪个创建该类型的对象。
抽象类除了被继承过之外,是没有用途、没有值、没有目的。
*通过标记类为抽象类的,编译器就知道不管在哪里,这个类就是不能创建任何类型的实例。
抽象类型的目的:用他作为引用类型。
8抽象方法:抽象的类代表此类必须要被继承过,抽象的方法代表此方法一定要被覆盖过。
*抽象的方法没有实体。如:public abstract void eat();直接以分号结束。
&就算只有一个抽象的方法,此类必须标记为抽象的。
实现抽象的方法就如同覆盖过方法一样。
9对象会带有从父类继承下来的所有东西,这代表每个对象,不论实际类型,也会是个Object的实例。
10将类型转换回原来的类型:如Object o=al.get(index);
Dog d =(Dog) o;
d.roam();
如果不能确定是他是dog,可以使用instanceof来检查。若类型转错,会遇到ClassCastException异常并且终止。if(o instanceof Dog){
Dog d=(Dog) o;
}
四、接口interface
1接口用来解决多重继承的问题却又不会产生致命方块问题。
2java的接口就好像是100%的纯抽象类,所有接口的方法都是抽象的。
3接口的定义:public interface Pet{
public abstract void beFriendly();
public abstract void play();
}
4接口的实现:public class Dog extends Canine implements Pet{
public void beFriendly(){}
public void play(){}必须在这实现出Pet的方法

            public void roam(){}            public void eat(){}一般的覆盖方法

}
五、super
1 super能让你在子类中调用父类的方法。如:super.RunReport();
六、构造器与垃圾收集器
1内存中的两种区域:对象的生产空间堆(heap)和方法调用栈变量的生产空间(stack)
2栈:方法调用和局部变量;堆:所有的对象
3对象本身只会存在于堆上,栈顶上方法是目前正在执行中的
4声明对象和赋值步骤:声明引用变量、创建对象、连接对象和引用
5构造函数必须与类名相同没有返回类型,不会被继承。默认的构造函数没有参数
6重载构造函数的意思代表有一个以上的构造函数且参数都不相同
7重载构造函数必须有不同的参数,两个构造函数的参数必须不同
8构造函数可以是公有、私有、不指定
9在创建新对象时,所有继承下来的构造函数都会执行。就算是抽象的类也有构造函数
10在你的构造函数中调用super()会把父类的构造函数放在堆栈的最上方
public class Duck extends Anima{
int size;
public Duck(int newSize){
super();
size=newSize;
}
}
*对super()的调用必须是构造函数的第一个语句。
七、this
1使用this()来从某个构造函数调用同一个类的另外一个构造函数。
2this就是个对对象本身的引用
3this()只能用在构造函数中,且必须是第一行语句
4每个构造函数可以选择调用super()或this(),但不能同时调用。
1引用变量只能在处于他的范围中才能被引用。
2不需创建Math的实例
八、static
1通常是实用方法,则不需要类的实例。
2static可以标记出不需类实例的方法。
3一个静态的方法代表说:一种不依靠实例变量也就不需要对象的行为。
4静态的方法不能调用非静态的变量,因为静态的方法是通过类的名称来调用,所以静态的方法为辅引用该类的任何实例变量。
5静态的方法也不能调用非静态的方法
6静态变量是共享的,同一类所有的实例共享一份静态变量。
7实例变量:每个实例一个;静态变量:每个类一个
8静态项目的初始化两项保证:(1)静态变量会在该类的任何对象创建之前就完成初始化(2)静态变量会在该类的任何静态方法执行之前就初始化
九、final
1静态的final变量是常数
2一个被标记为final的变量代表他一旦被初始化之后既有不会改动。就是说类加载之后静态final变量就一直会维持原值
3常数变量的名称应该都是大写字母
4静态final变量的初始化:
声明的时候:public class Foo{
public static final int FOO_X=25;
}
或在静态初始化程序中:
public class Bar{
public static final double BAR_SIGN;
//final的静态变量值必须在声明或静态初始化程序中赋值:
static{
BAR_SIGN=(double)Math.random();
} }
5final不只在静态变量上,也可以修饰非静态的变量,包括实例变量、局部变量或者方法的参数。代表他的值不能改动。也可以用final来防止方法的覆盖或创建子类。
6final的变量代表你不能改变他的值;final的method代表你不能覆盖掉该method;final的类代表你不能继承该类,就算创建他的子类
十、数字的格式化
1java.util中Formatter类提供:
如将数字以带逗号的形式格式化:String s=String.format(“%,d”,10000000);数字以逗号分开
%,d:表示以十进制整数带逗号的方式来表示;%.2f:以小数点后两位格式化该浮点数
2完整的日期与时间:%tc;只有时间:%tr;周、月、日:%tA%tB%td;<:重复利用之前的参数
十一、异常处理
1编译器会核对每件事,除了RuntimeExceptions。RuntimeExceptions称为不检查异常,不需声明或被包在try/catch的块中
2finally无论如何都要执行的部分,是用来存放不管有没有异常都得执行的程序。
十二、序列化合文件的输入、输出
1将序列化对象写入文件:
(1)创建出FileOutputStream
FileOutputStream fileStream=new FileOutputStream(“haha.ser”);
(2)创建ObjectOutputStream
ObjectOutputStream os=new ObjectOutputStream(fileStream);
(3)写入对象
os.writeObject(characterOne);
(4)关闭ObjectOutputStream
os.close();
FileOutputStream把字节写入文件。ObjectOutputStream把对象转换成可以写入串流的数据。当调用ObjectOutputStream的writeObject时,对象会被打成串流送到FileOutputStream来写入文件。
2当对象被序列化时,被改对象引用的实例变量也会被序列化。且所有被引用的对象也会被序列化。
3如果某实例变量不能或不应该被序列化,就把他标记为transient(瞬时)的,如
transient String currentID;
4将字符串写入文本文件:
(1) 写序列化的对象:objectOutputStream.writeObject(someObject);
(2) 写字符串:fileWriter.write(“My first string to save”);
如:FileWriter writer=new FileWriter(“Foo.txt”);
writer.writer(hello);
writer.close();
5java.io.File class File这个类代表磁盘上的文件,并不是文件中的内容。可以把File对象想象成文件的路径,而不是文件本身。
6对File对象做的事:
(1) 创建出代表现存盘文件的File对象:File f=new File(“haha.txt”);
(2) 建立新的目录:f.mkdir();
(3) 列出目录下的内容:if(dir.isDirectory()){
String [] d=dir.list();
for(int i=0;i