Open you documents! ----lqq JAVA 重点难点 --前人学习笔记+自已学习笔记整理加工. 一、基础 1、1995 年正式发布 JAVA 2、OAK-JAVA 雏形,JAVA 发布之前用(语法借鉴 C++,思想借鉴 SMOLLTALK); 3、1998 年,JAVA2 产生(JAVA 的最大特点:开源 OPEN);bea 公司 J2EE 正式应用火红 4、JDK1.5(简称 Tigger)最新 5、j2EE 表示层,业务层,数据层三大组成 6、环境变量:JAVAHOME:JDK 的安装路径, PATH:%JAVAHOME%\bin —虚拟机执行命令的路径 CLASSPATH:%JAVAHOME%\lib 字节码文件的路径,可用;号间隔多个选择路径 JBUILDER ORICAL 数据库,自带有 JDK1.4,有了 JBUILDER 可以不用安装 JDK; ORICAL 数据库,自带有 JDK1.3,应把想要应用的 JDK 版本的路径写在环境变量的最前面. 7、编译器:全部解释再执行 解释器:解释一条执行一条 JAVA 程序是先编译后解释执行. 8、系统垃圾收集是自动的,即使显示调用,也是由系统控制的; (显示调用也不一定马上收集,还是由系统控制)(java.lang)System.gc();Runtime.getRuntime().gc(); 9、JVM 工作:类加载,字节码校验,解释器Æ成为机器能执行的机器语言 二、简单程序 1、源文件名一定要和 public 定义的类的类名一样; 没有 public 类的话,源文件名可以随意; 2、main()方法可以处于同意源文件中的不同类中;是 java 执行的入口; Java 后面跟的是含有 main()方法的类的类名;java 根据类名进入不同入口; 一个源文件中有多少类就有多少个.class 文件 三、打包 1、把源文件(字节码文件)打包到某个包中,使用 package 关键字,且一定是放在文件头,一定只有一句!; 2、包名小写; 3、使用打包后,java Hello.class 执行程序(注意顺序一定是:package-import-class,不能将其他东西插到中间) 4. 强制打包:javac –d . Hello.java. 将在当前目录下生成 Hello.java 内声明的 package. 四、帮助文档 1、生成帮助文档:javadoc 包名.源文件名 五、JAVA 的 JDK 分成 2 部分:JRE 和类库 1、系统只要装了 JRE 就可以运行 JAVA 字节码程序(必须要是通过编译后) 2、JAR 一般打包的是.class 文件;一般 jar 包双击后可以运行(包名.jar); 3、要运行的话要在清单文件中加:Main-Class: Hello 4、JAR 打包:先用 jar cvf ~.jar Hollo.class(或包名)(是 Class 文件,不是 JAVA 文件) 改.mf 文件:加 Main-Class: 包名.Hollo(运行的 Class 文件) 标识符,数据类型,运算符,条件控制,数组 标识符: 可以以 _ 和 $ 符开头. corejava 1 corejava 2 命名规范: 1. 类:首字母大写,第二个单词开始首字母大写,一般为名词. 2. 方法:首字母小写,第二个单词开始首字母大写,动词. 3. 变量:首字母小写,第二个单词开始首字母大写. 4. 常量:大写,单词之间用下划线连接. 变量: 实例变量声明时可以不初始化,系统会自动初始化为 0 或 null. 局部变量在使用前必先附值. 局部变量与实例变量重名时以局部变量为准. 局部变量在它的作用域内不允许同名. 基本数据类型: 各原始数据类型的默认值 Byte Short Int Long Float Double Char boolean reference 0 0 0 0L 0.0F 0.0D ‘\u0000’ flase Null 8 位 16 位 32 位 64 位 32 位 64 位 32 位 基本数据类型从小到大转化系统可自动转换.从大往小转换需显式强制转换. 基本数据类型在进行动算时可能会发生精度损失. num1 + num2 以大的数据类型为准,否则为 int. byte ba=1; ba=ba+1;错误 ba+=1; 正确 条件控制: switch(temp)语句中,default:可以放在任意位置,效果一样。括号中能放 32 位及以下的有范围的类型表达 式。 corejava 3 System.exit(0)-----退出整个程序。 1-temp 的类型只能为 byte,short,char,int; 2-case 之后的表达式只能是一个常量整型表达式,即任何字符常量的组合,及能计算成一个常量整数值的整型常量(非 boolean 型); 3-每个 case 子句后面,应该跟一个 break; 4-default 子句,能放在 switch 的任何地方:top,end,middle 数组: 数组初始化时一定要指定其维数。 动态初始化数组:int[] iArray=new int[5]; 静态初始化数组:int[] iArray={1,2,3,4,5}; iArray.length=5; 附值: int[] iArray=new int[] {1,2,3,4,5} iArray.length=5; iArray 为数组的引用,存放着该数组的起始地址。 二维数组: int[] [] a=new int[2][3]; 即数组的数组。 列数先不建立的二维数组: int[] [] b=new int[2][]; a[0] =new int[4]; a[1] =new int[3]; break,continue,return,exit();的区别 break-跳出本层循环 continue-跳出本次循环 return-跳出方法 exit()-跳出执行的程序 面向对象 面向对象主要针对面向过程。面向过程的基本单元是函数。 在 JAVA 中,一切都是对象,但我们用来操纵对象的却是引用。 对象包括变量(属性)和方法,变量表示对象的属性,方法用来描述对象的功能,处理过程。 对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。 实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)。 可复用性是 OOP 的基础。 面向对象是先有数据结构,然后再有算法。 从语法上来看,一个类是一个新的数据类型。 类方法中的一类特殊方法:构造方法。构造方法是当用类生成对象时,系统在生成对象的过程中利用的 方法。注意:构造方法在生成对象的时候会被调用,但并不是构造方法生成了对象。构造方法没有返回 值。构造方法的方法名与类名相同。如果用户没有为类编写构数方法,则系统会为该类生成一个无参的 默认构造方法,否则,系统将不再为该类自动生成无参构造方法。 this 表示当前对象,this()表示本类构造方法。super 表示直接父类对象,super()表示直接父类构造方法。 this(),super()均可带参数。 继承 父类(SuperClass)和 子类(SonClass)。 父类的非私有化属性和方法(非构造方法)可以默认继承到子类。 class Son extends Father{ } JAVA 中只支持单继承。JAVA 通过接口和内部类实现多继承。 父类的构造方法子类不能继承,子类只能在自已的构造方法中访问父类的构造方法。 方法覆盖(OVERRIDE): 当父类中的非私有方法跟子类的方法名一样,参数一样,返回类型也一样时,称为子类方法对父类方法 的覆盖。这时,子类方法的访问控制权限不能比父类方法的访问控制权限更严格,也不能抛出更多的异 常,否则编译出错。这也是 JAVA 之所以有动态多态的原因。 修饰属性和方法的修饰符,以下范围依次由严到宽: private :本类访问; default :同包可见。 protected:同包可见+子类可见 public :表示所有的地方均可见。 当构造一个对象的时候,系统先递归构造父类对象,再构造子类对象。 super()表示调用父类的构造方法。this()用于调用本类的构造方法,可以有参或无参,以此调用相应的构造 函数。 Super()和 this()一样,如果出现,则必须放在构造函数的第一行,且两者不能同时出现在同一构造函数中。 如果没有调用 super()和 this()构造方法,那么系统会自动调用父类的无参构造方法,相当于 super()。 因此在编写类时,如果定义了有参构造方法,则应同时定义一个无参构造方法,以便别人断承。 构造对象的顺序: 静态变量 静态初始化块 static {} 1. 加载类 2. 判断构造函数中有没有 this()和 super(),如果有 this(),则调用本类相应的构造函数;如果有 super(),则调 用父类相应的构造函数;如果两个都没有,则调用父类无参构造函数;以此递归类推。 3. 实例变量初始化。 corejava 4 corejava 5 4. 执行动态初始化块。{…….} 5. 执行本类的构造方法。 提示: 1. 为什么初始化一个子对象时必须先调用基类的构造方法? 因为子对象内部包含着一个父对象,所以,初始化子对象前必须先初始化这个在子对象内部 的父对象。父类在子类构造器可以访问它之前就已经完成了初始化。 2. 执行类的所有特定的清理动作,其顺序跟生成对象的顺序相反,通常这就要求父类元素仍旧 存活。 3. 组合和继承都允许在新的类中放置子对象,组合是显式地这样做,而继承是隐式地做。组合 技术通常用于想在新类中使用现有类的功能而非它的接口的这种情形。当想使用现有类,并 开发一个它的特殊版本时,则使用继承。 多态 多态(迟后联编):多态指的是运行时类型识别。当对象调用覆盖方法时,系统在编译过程中不对对象 类型进行识别和方法绑定,而是在运行时才对该对象进行类型识别,并根据该对象的具体类型绑定执行 相应类型中定义的覆盖方法。如果在子类里找不到相应的方法,才到父类里去打。多态之所以能体现出 来,正是由于子类跟父类间发生的方法覆盖。 多态典型使用: class Animal{ void eat(){}; } class Dog extends Animal{ void eat(){}; } class Pig extends Animal{ void eat(){}; } Void go(Animal animal){ animal . eat(); } Animal a=new Dog(); Pig p=new Pig(); go(a); go(p); 关系运算符:instanceof instance instanceof class Animal dog=new Dog; if (dog1 instanceof Dog)(这个式子的结果是一个布尔表达式) Dog dog2=(Dog)dog1; instanceof 用于判定前面的对象是否属于后面的类型。是则返回 true ,否则返回 false。 如果 dog is a Dog,则可以对 dog 强制转换为 Dog。 封装、继承、多态为面向对象的三大基石(特性)。 corejava 6 运行时的动态类型判定针对的是方法。运行程序访问的属性仍为编译时属性。 Overloading 针对的是编译时类型,不存在运行时的多态。 面向对象高级特性: static 修饰符 static:①可修饰属性;②可修饰方法;③可修饰代码块。 一般情况下,只能在类中定义静态方法和属性,而不能在一个方法中定义。静态属性用来作为一个 计数器。静态属性和方法都可以(最好)用类名直接调用,因为静态的东西属于类而不是属于对象,静 态方法只能调用静态方法和属性。 提示: 1. main 方法为什么是 static 的? 因为 main 方法是程序的入口,在起动程序时尚未建立对象,所以 main 方法必须是 static 的才 能被调用,程序才能起动. 当执行 java calssname 时,classname 自动调用静态 main 方法,相当于 classname.main()。 2. 静态方法不体现多态性,编译器只看编译时类型。 class A{ static void eat(){System.out.println(“this is static A.eat()”);} } class B extends A{ static void eat(){System.out.println(“this is static B.eat()”);} } class Test{ A a=new B(); a.eat();//输出为:this is static A.eat()。 } 当 static 修饰代码块时(注:此代码块要在此类的任何一个方法之外): static { }静态初始化块 静态代码块在代码被装载进虚拟机时被执行。一般静态代码块被用来初始化静态成员。 { }动态初始化块。 创建对象时才执行。 3. 如何使一个类只能生成一个对象?单例模式 public class Test{ public static void main(String[] args){ A a=A.get(); A b=A.get(); System.out.print(a= =b);//true } } class A{ class B{ static A a=new A(); private static B b; private A(){ } private B{} public static A get(){ return a;} public static B get(){ if(b= =null) b=new B(); return b; corejava 7 } } final 修饰符 final 可以修饰类、属性、方法。 当用 final 修饰的类不能被继承,即 final 类没有子类。用来确保声明的类不被修改。 当利用 final 修饰一个属性(变量)的时候,此属性成为常量。跟据命名规范,变量名全部大写。 当属性声明为 final 时,最好跟 static 联合在一起使用,以节省资源。 final 的属性在声明时一定要初始化,否则,就要在该类的构造函数中初始化。局部 final 变量可以随 时赋值 当一个引用声明为 final 时,引用的值不能变,但引用所指向的对象的属性可变。 final 的方法不能被覆盖。用于在保持方法的一致性时。但可被重载。如果在父类中有 final 定义的方法, 那么在子类中继承同一个方法。 如果一个方法前有修饰词 private 或 static,则系统会自动在前面加上 final。即 private 和 static 方法默认均为 final 方法。 注:final 并不涉及继承,继承取决于类的修饰符是否为 private、default、protected 还是 public。 也就是说,是否继承取决于这个方法对于子类是否可见。 abstract 修饰符 abstract(抽象)可以修饰类、方法 如果将一个类设置为 abstract,此类不可生成对象,必须被继承使用。抽象类除了不能生成对象外,其 它与变通类无异。抽像类继承一个类时,该类必须有无参构造方法,否则出错. abstract 可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。 abstract 虽然不能生成对象,但是可以声明 abstract 类的引用。 final 和 abstract 永远不会同时出现。 1――抽象类,一般无构造方法; 2――若抽象类有构造方法,一般声明为“protected”,供它的子类通过”super”调用。 当 abstract 用于修饰方法时,此时该方法为抽象方法,不需要实现,实现留给子类覆盖,子类覆盖该 方法之后方法才能够生效。 注意比较: private void print(){};此语句表示方法的空实现。 abstract void print(); 此语句表示抽象方法,无实现。 如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。 反之,如果一个类为抽象类,那么其中可能有非抽象的方法。 如果一个类继承一个抽象类,则这个类必须实现(覆盖)该抽象类的所有抽象方法。 corejava 8 如果有抽象方法未被实现,则子类将继承父类的抽象方法,所以这个子类也一定是抽象类。 abstract 和 static,private,final 同时修饰一个类或方法。 interface 接口 接口与类属于同一层次,接口是一种特殊的抽象类。接口不能生成对象,但可以声明引用;接口没有构 造方法。接口里定义的所有属性都一定是 public static final 的。所有方法都是 public abstract 的。 interface IA{ } 与类相似,一个文件只能有一个 public 接口,且与文件名相同。 在一个文件中不可同时定义一个 public 接口和一个 public 类。 1. 一个类实现一个接口的格式: class IAImple implements IA{ }; 一个接口可以 extends 另一个接口。一个类实现接口时,必须实现接口中及其父类的所有的方法。 接口中声明方法时可不写 public,方法默认为 public abstract 的。但在子类中实现接口的过程中 public 不可省。 提示: 1. 为什么要有接口?为什么不直接用抽象类呢? 用接口可以实现多继承; ① 一个类除继承另外一个类,还可以实现接口; class IAImpl extends java.util.Arrylist implement IA{} 继承类 实现接口 这样可以实现变相的多继承。 ② 一个类只能继承另外一个类,但是它可以实现多个接口,中间用“,”隔开。 Implements IA,IB 所谓实现一个接口,就是指实现接口中的方法。 ③ 接口和接口之间可以定义继承关系,并且接口之间允许多继承。 例:interface IC extends IA,IB{}; 接口和多态都为 JAVA 技术的核心。 接口实际上是定义一个规范、标准。 ① 通过接口可以实现不同层次、不同体系对象的共同属性; 通过接口实现 write once as anywhere. 以 JAVA 数据库连接为例子:JDBC 制定标准;数据厂商实现标准;用户使用标准。 接口通常用来屏蔽底层的差异。 ② 接口也因为上述原因被用来保持架构的稳定性。 可以修饰类的修饰符有: corejava 9 public , abstract , final , default private , protected 不能修饰类。 String 类 String str1=”nihao”; String str2=”nihao”; str1 = = str2 //这种创建方法两个引用指向常量域的同一个”nihao”。 String str3=new String(“nihao”); String str4=new String(“nihao”); str3!=str4 char charAt(int index) Returns the char value at the specified index. int indexOf(int ch) Returns the index within this string of the first occurrence of the specified character. String substring(int beginIndex) Returns a new string that is a substring of this string. String substring(int beginIndex, int endIndex) Returns a new string that is a substring of this string.//beginIndex<= substring o 对象,则返回值>0;(可将返回值定义为 1) 如 当前对象=o 对象,则返回值=0; 如 当前对象
还剩25页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 2 人已下载

下载pdf

pdf贡献者

benbenlong

贡献于2010-11-08

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf