一.原理、概念
1.面相对象语言的三个核心本质:数据抽象化(data abstraction)、继承(inheritance)、多态(polymorphism也叫动态绑定dynamic binding)。覆写(overriding)和重载(overloading),覆写是子类的方法名、参数与父类的一样,覆写引发多态;重载是同一类中相同的函数名,不同的参数(包括个数、类型、位置)
2.static,final,abstract说明:
static用来修饰变量(类变量)。方法(类方法),他们是静态的、只需加载一次、类公用,类变量定义如用到方法只能是类方法,类方法内用到的变量只能是类变量,因为他们被初始化时成员变量和成员方法还没有初始化。
final用来修饰变量(不能改变)、方法(不能重载)、类(不能继承)。
abstract用来修饰方法(只能被重载)、类(只能被继承),抽象类不一定含有抽象发放;但含有抽象方法的一定为抽象类。
3.在一个文件夹内的两个.java文件如果没设package,则编译器会将两个文件隶属的文件夹视为default package,因此他们互为friendly。
4.类无构造函数可自动产生一无参构造函数(default constructor);当有任何构造函数时都不会有default constructor。构造函数调用其他构造函数只能在第一行,故无法调用两个构造函数(包括父类和子类其他的构造函数)。
5.类的装载时间:生成一个对象时(装载整个类);取类变量或类方法时(装载静态部分)。
6.生成对象,实现接口。生成对象包括:声明、实例化、初始化。
二.语法
1.java's lable:仔细看一下文档你就会发现,JAVA里的标号只能定义循环语句。
label1: for (.....) 是合法的。
break label1;
continue label2;
label2: if (...) 是非法的。
2.转义字符 转义字符的意义
\n 换行
\t 横向跳到下一制表位置
\v 竖向跳格
\b 退格
\r 回车
\f 走纸换页
\\ 反斜线符"\"
\' 单引号符
\a 鸣铃
\u**** 1~4位十六进制数所代表的unicode字符(java)
\*** 1~3位八进制数所代表的ASCII字符(c)
\x** 1~2位十六进制数所代表的ASCII字符(c)
3.三种常用进制表示:0123——八进制 123——十进制 0x123——十六进制。
4.length & length():length使数组的一个变量;length()是String类的一个方法。
5.throw & throws:throw在方法体内引发异常;throws在方法参数表后向上级抛出异常。
6.无限循环:for(;;) 和 while(true){} ,得用break离开。
三.类库
1.java随机数:首先利用random()获得一个随机浮点数,然后乘以你希望得到的整数的最大值,最后对得到的结果取整。例如你希望得到的整数的最大值是1000,那么你就可以这么写: int rand = (int) (1000 * Math.random());//Math.random()的输出范围是[0,1)。
2.数组的相关操作
a)array的充填
Java标准程序库中的Arrays中有fill(),将单一数值复制到每个位置
b)array的复制
Java标准程序库中提供System.arraycopy()的static函数
c)array的比较
Arrays提供重载版的equals(),藉以比较两个arrays是否相等,能够处理object和所有基本型别,两个arrays必须拥有相同个数的元素,而有所有对应元素必须两两相等。
d)array元素的比较
有两种方法:a)【java编程思想e2 P310】实现java.lang.Comparable接口,Comparable只有一个compareTo()方法,覆写它:x大返回-1
,相等返回0,x小返回1。b)【java编程思想e2 P311】实现java.util.Comparator接口,此接口有compare()和equals()方法,如无必要无需覆
写equals()方法。
e)array的排序
利用内置的sort函数,可以针对任何primitives array或objects array进行排序。
f)在已排序的array中进行查找
array排序完毕后,可以使用Arrays.binarySearch()快速查找某个元素,在未经排序的array上不能使用binarySearch(),否则结果完全无
法预测,如果array内含多个相同元素,查找动作不保证会搜出其中哪一个元素。
3.容器(containers)
java.lang.Object -> java.util.AbstractCollection & AbstractMap
AbstractCollection -> AbstractList & AbstractQueue & AbstractSet
sop(AbstractCollection);//打印[dog, cat, bird]
sop(AbstractMap);//打印{first=dog, second=cat, third=bird}
四.经验
1.Java是面向对象的语言,操作几乎都是在对象之间进行的,一个类的实例如果是(null)的话则不能调用这个实例的方法,否则就会出java.lang.NullPointException错误。确定它肯定是不为null的。对于String的这种equals或equalsIgnoreCase的操作常常还可以用下面的方法进行安全操作:用一个确定的不为null的String去与未知的String进行比较。
String str = null;
if (“Hello”.equals(str))
{ System.out.println(“str is Hello”); }
3.java中+用于字符串连接和算术运算,char类型在做运算时会先转换成int类型,所以System.out.println('H'+'a');输出169。
如果你真想把char连接起来,要怎么办呢?
1。用Stringbuffer。
StringBuffer buf = new StringBuffer();
buf.append(`H`);
buf.append(`a`);
System.out.println(buf);
2。按照对付int的方法来处理,利用String重载+运算符的特性。
System.out.println("" + `H` + `a`);
3。在JDK5.0里,还可以用格式化输出。
System.out.println("%c%c", `H`,`a`);
System.out.println(""+'a'+'b'+'c');//前面加一个空串就都按字符串处理。
posted on