JAVA全方位学习知识介绍
JAVA全方位学习知识介绍
java 2全方位学习 J2ME无线java应用开发 JAVA手机程序设计入门与应用
1、对于一般PC平台来说,Java的程序分成两大类,一个是在PC的操作系统上通过JVM直接运行的Java Application,另一种是通过浏览器中附带的JVM运行的Java Applet。
2、<applet code="要运行的class文件名称" width="显示的宽度" height="显示的高度"></applet>。
3、javac,java,appletviewer。
4、java是用unicode作为字符集的,所以我们在Java程序中使用中文或是英文甚至是其他的语言作为class名称、变量名称都可以。
5、JFC-java foundation classes,GUI-graphical uesr interface。
6、java -jar Java2D.jar。
7、PDA-个人数据处理。jpda-Java Platform Debugger Architecture。
第4章 程序基本单元
8、关键字与保留字的区别。标志符的魔力。Literal的含义。变量的意义,变量命名的原则。
9、基本数据类型:整型,浮点,其他类型。
10、为什么数值范围正负值分开,无理数或是无穷小数的表示问题。其核心是精度问题。浮点数不存在0这个数值,所以会产生误差。
11、其他数据类型:boolean,char,常用转义字符,特殊字符的表示方法。
12、Java两种变量的模式:成员变量(member variable),局部变量(local variable)。成员变量初始值在声明时就指定了。而局部变量则不会,要求用户自己设定初始值。
13、类型转换分为自动类型转换(promotion)和强制类型转换(casting)两种。其中每种又分为放大(widening)和缩小(narrowing)两种。放大转换属于自动类型转换,缩小转换属于强制类型转换。
14、数据类型的后面加上一个英文字母,是由于Java对于literal默认的数据类型有关,基本上Java对整数的lieral默认为int型,而对于浮点数的literal默认为double型。
15、Java里有个特殊的类,可以像一般的基本数据类型一样使用,它就是String-字符串。
第5章 Java的表达式
16、5%2与5%-2与-5%2与-5%-2的区别。
17、比较运算符的结果只有两种,true和flase。instanceof?
18、逻辑与和一般与的差别。在需要改变变量的值时,用一般与。通常使用逻辑运算符,因为运算速度会快一些。
19、逻辑运算的优先级在比较运算符之下。
20、赋值运算符是所有运算符中最低的。赋值运算符从右边运算到左边。而算术运算符是从左边运算到右边。并且赋值运算符的左边只能有一个变量存在。
21、位运算符(bitwise)。 &,|,^,~(complement)。位运算符只能用于整型数据类型中。位移运算(shift)的用处。位移运算比较难。要理解位移运算的用途。了解减次运算的含义。
22、运算符的优先级和结合性。
第6章 Java的语句
23、语句有很多种,粗略的把它们分为四类:第一类是一般的语句,第二类是声明语句,第三类是条件流程控制语句,第四类是循环控制语句。
24、对象的声明与变量的声明是不同的。对象在声明后,必须进行实例化,而变量声明是不需要的。
25、?:运算符的使用。
26、Switch的参数只能是(<byte、short、int或char变量>)的其中一种。
27、for(<控制循环变量初始值设置>;<循环结束判断条件语句>;<控制循环变量值改变方法>){<代码>s}。千万不使用浮点数作为控制变量。由于浮点数误差问题。
28、while(<循环结束判断条件语句>){<代码>s}。
29、do{<代码>s} while(<循环结束判断条件语句>)。
30、高级循环控制-嵌套循环。以及break和continue的使用。
31、标记<token>的使用。以冒号: 作为结束。运用适当的break、continue和token可以增强程序的弹性。但不要乱用token。
32、必须了解注释语句、if语句、switch语句、循环语句、break、continue和标记的使用与限制。
第7章 Java面向对象程序设计
33、对象是符合某种类定义所产生出来的实例(instance)。类是抽象的,而对象是实在的。属性(attribute)是用来形容一个实例对象的,其实就是变量。方法(method)是对象自己的行为或者是使用它们的方法,其实就是函数。属性和方法称为对象的成员。类可以说是蓝图(blueprint),类中会定义许多产生该类对象时,所必须具备的一些属性与方法。
34、继承(inheritance)和多态(polymorphism)是类的另外两个重要的特性。继承最主要的目的是为了“扩展”原类的功能、加强或改进原类所没有定义的属性及方法。被继承的类为父类,继承的类为子类。采用UML(Unified Modeling Language)的表达方式来设计类,可以画出类关系图,其中最重要的部件是类图标和继承图标。多态的概念比较难理解,需要加强理解,其中还有覆盖(override)的概念。
35、为了增强程序的可读性和易用性。全世界的java程序师都遵守以下的规则:(1)Package(包),作为Package名称的英文单词全部要小写;(2)类,每个英文单词的第一个字母大写;(3)接口,规则与类一样;(4)属性,每个英文单词的第一个字母小写,其他单词的第一个英文字母大写;(5)方法,规则和属性一样,不过后面有小括号;(7)常量,英文单词全部大写,而且每两个英文单词之间用下划线隔开。
36、Animal和Zoo两个类只需要对Zoo.java进行编译即可。这是因为在Zoo.java中所有用到的类如果还没有进行过编译的话,在编译Zoo.java的过程中它们都会被自动编译。
37、构造函数(constuctor),除了可以在Java编译时为我们自动产生之外,还可以自行编写所需要的构造函数。构造函数也是一个方法。
38、在一个类中,有多个构造函数使用相同的名称,但是参数类型与个数却各不相同,我们把这样的一个行为称为构造函数重载(overloading)。
39、原则上重载有两个规则一定要遵守:一、方法名称一定要一样。否则的话,就是两个不同的方法,不能称为重载。二、调用的参数类型一定要不一样。因为编译器要通过参数类型来判断调用的是哪一个方法。
40、面向对象程序设计中一个非常重要的概念,我们称为信息的隐藏(information hidding),专用的技术术语为封装(encapsulatio)。封装的目的有两个:一、保护类中的数据,不让这些数据被错误的使用或破坏;二、隐藏不需要让别人知道的细节,以防别人误用。封装还有一些其他的重要的特点:隐藏类的具体细节;强制用户通过单一接口访问数据;程序更加容易维护。
41、属性访问方法的命名规则:设置属性值的方法以set作为开头;获取属性值的方法以get作为开头;Boolean数据类型值的获取用isXXX形式来命名。
42、类的多态的,指类在不同情况下,可以看作是不同的类。
43、类成员和实例成员。前面介绍的属性和方法,属于对象等级的,称为实例成员。类成员必须使用限定词static。类成员的调用方法为<类名称>.<类成员名称>,也可以为<对象名称>.<类成员名称>。但是类方法中不能使用实例成员。
44、子类产生对象时,会往上通知它的父类,它的父类又会通知父类的父类,持续这个操作直到最上层的java.lang.Object类。通知上层父类最主要的目的时,对于那些继承自父类的属性或其他的设置做初始化的操作。从而达到 程序代码的重复使用,这也是继承的目的。Java在编译时自动帮我们加上通知父类的程序代码,是加在构造函数里面。super();这行的意思必须明白。super是关键字。
45、调用super函数必须注意两点:一、super调用必须在构造函数的第1行。二、如果子类中有好几个不同的构造函数,二父类又没有不需要参数的构造函数,那么就必须在子类中的每个构造函数的第一行加上适当的super调用。
46、构造函数调用构造函数用this这个关键字。
47、super和this在使用上有一些要注意的地方:一、super和this只能使用在构造函数程序代码中的第一行;二、super和this同时只能使用一种;三、super和this的调用只能使用在构造函数中;四、如果构造函数中没有使用super或this,那么Java会自动帮你加上super()调用。
48、屏蔽(shadow)-属性(继承关系)、覆盖(override)-方法(继承关系)、重载(overload)-方法(同一个类下函数同名,但参数不同)。使用属性的几种方法必须了解,super、this、强制类型转换的使用。
第8章 深入Java面向对象程序设计
49、什么是包(package)?包很像我们计算机中的目录或是文件夹。目录分隔符,dos用/,unix用/。目录机制应用于Java面向对象的程序当中就是所谓的包。
50、package语句中,原本的目录分隔符改用句点[.]来代替。package <package名称>;必须注意:package语句一定只能写在程序代码的第一行。package的UML图示。除了每一个类的Java文件中的第一行设置package外,程序代码中用到其他类的地方也一并加上它的package的名称。package的设置与使用。
51、import语句,必须写在package语句之后,所有类声明之前。import语句的通配符(*)。使用通配符只是将该package下的类import进来,不会把子目录下的其他目录中的类import进来。
52、classpath的设置。classpath是Java程序在编译与运行时会使用到的一个【环境变量】,它的主要用途是告诉编译器去哪里找到编译或运行时所需要的类。windows默认情况下classpath为【.】。设置classpath的两种方法:一、直接设置;二、javac加上-classpath这个参数。
53、访问权限的限定词的使用。protected与default的使用。成员限定词有四个,而类声明限定词只有两个。
54、final限定词的使用-用于常量。final和static的使用。
55、抽象类的使用。关键字是abstract。能让继承的子类一定覆盖某个特殊的方法,这种机制就是【抽象(abstract)】。在一个类中,我们可以指定某个方法为抽象的,而一个抽象的方法不需要编写方法的内容,也就是说当方法声明完后,就直接以分号【;】来结束,不用加上左右大括号。只要有任何一个抽象方法,那么这个类就必须成为一个抽象类,所以我们必须把类的声明加上abstract这个关键字。抽象类不能生成对象实例。abstract只能用在类和方法上。属性和变量上没有意义。
56、接口-一种标准、一些规范。在java中,接口是由一些常量和抽象方法所组成的。关键字是【interface】,使用的格式如下:<限定词>interface<接口名称>[extends<接口名称>s]。解决abstract不能解决的问题。接口中方法的语法声明跟抽象方法的语法声明是一样的,就是是只有方法的声明,而没有方法本身,简单的说就是声明完后直接以分号结束整个语句,而不用再加上大括号。接口中的方法也都全部是抽象方法,只是不需要额外加上abstract这个关键字。extends <类名>,implements <接口名>。简单的说,接口就是一个完全抽象的类。Java用多重接口的方法来完成类的多重继承机制。implements<接口1>,<接口2>……。java中存在一种特殊的接口,它只有接口的声明,而内部是空的,也就是说完全没有任何的常量和方法的声明。这种特殊大额接口称为【标记接口(marker interface)】。
第9章 Object类的常用方法介绍
57、对象之间的比较,第一种观点,对象相等是指对象为同一个。包括使用的内存。直接用==。第二种观点,是两个对象的内容是否相等。用equals方法。
58、理解hash code的含义。
59、引用(reference)与复制(clone)的区别。clone方法的使用。
60、将对象转为字符的方法【toString】。
61、在设计的类的时候,最好也一并的把这几个Object的方法覆盖。
第10章 深入内存
62、变量内存的使用,变量声明后,编译器就分配了内存。
63、对象内存的使用,对象声明后,编译器只是在内存中产生一个对象的引用(reference),它所存放的并不是一个真正的对象实例 ,因为对象的实例我们还没生成。所以当一个对象被声明后,在内存中这个对象引用的初始值会是【null】。我们用new这个关键字,配合调用类的构造函数,来生成对象实例。但,此时对象引用与对象实例并没有产生关联。需要使用复制语句使它们关联。每个对象引用占用4个字节的内存空间。对象的引用所存放的是撒对象实例真正在内存中的地址。对象引用实际占用的内存大小,跟系统(JVM)实现的方法有关,不同的系统大小不一定相同。
64、什么是数组,数组是存放量大、性质相同且需要做相同处理的数据。数组可以用在基本数据类型的变量上,当然也可以用在对象上。数组与对象有点相似,分成两个阶段——数组引用的声明和数组实例的生成。数组声明格式如下:int a[];和int []a;数组声明完后,在内存中表现的方法也跟对象一样,也是个引用,而且初始值也是null。生成数组实例同样要用到new关键字,在这之后要用赋值语句进行关联处理。也可以同时创建和初始化数组,如 int a[]={1,2,3,4}。
65、数组的索引(index),是[]里面的数字,它表示这个数组中的第几笔数据。数组的使用比较简单,就是在数组变量的名称后,加上要访问的索引。索引从0开始到数组的大小减1。
66、数组的length属性获得数组的大校必须注意数组的大小是不能改变的。使用上比较有弹性。
67、数组的复制。数组不是继承自java.lang.Object类的对象,所以没有clone这个用来复制对象实例的方法。可以利用循环赋值来实现。java中提供了【System.arraycopy】方法。使用这个方法时需要5个参数,依次是源数组、来源数组数据起始位置、目的数组、目的数组数据起始位置、复制数据的个数。使用上比较有弹性。arraycopy方法只适用于基本数据类型的数组。相比而言,第二种方法使用JNI的方法,所以速度上会比较快。arraycopy的三种异常,NULLPointerException,ArrayIndexOutOfBoudsException,ArrayStroeException。
68、Java 本机接口(Java Native Interface (JNI))是一个本机编程接口,它是 Java 软件开发工具箱(Java Software Development Kit (SDK))的一部分。JNI 允许 Java 代码使用以其它语言(譬如 C 和 C++)编写的代码和代码库。Invocation API(JNI 的一部分)可以用来将 Java 虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用 Java 代码。
预备知识
所有示例都是使用 Java、C 和 C++ 代码编写的,并可以移植到 Windows 和基于 UNIX 的平台上。要完全理解这些示例,您必须有一些 Java 语言编程经验。此外,您还需要一些 C 或 C++ 编程经验。严格来说,JNI 解决方案可以分成 Java 编程任务和 C/C++ 编程任务,由不同的程序员完成每项任务。然而,要完全理解 JNI 是如何在两种编程环境中工作的,您必须能够理解 Java 和 C/C++ 代码。
系统需求
浏览器:Netscape 4.x 或更高版本, 或者 Internet Explorer 4.x 或更高版本 ,支持 JavaScript 。 要运行本教程中的示例,您需要下列工具与组件: Java 编译器:随 SDK 一起提供的 javac.exe。 Java 虚拟机(JVM):随 SDK 一起提供的 java.exe。 本机方法 C 文件生成器:随 SDK 一起提供的 javah.exe。 定义 JNI 的库文件和本机头文件。jni.h C 头文件、jvm.lib 和 jvm.dll 或 jvm.so 文件,这些文件都是随 SDK 一起提供的。 能够创建共享库的 C 和 C++ 编译器。最常见的两个 C 编译器是用于 Windows 的 Visual C++ 和用于基于 UNIX 系统的 cc。
68、多维数组在内存中的样子。必须理解。不规则数组的生成。 不规则数组是Java语言的一个重要特点,其他的程序语言像C或是Basic,都只能声明规则的多维数组,而且维数有上限。java没有这个限制。
69、以上讨论基本数据类型的数组,现在来看对象数组。防止NullPointerException异常的产生。
70、变量的访问范围【scope】,有点像类之间属性及方法访问的限制,这些限制是由于访问权限的限定词、package和继承这几种关系组合起来的。变量访问范围大致分为四个等级:第一、类级(static);第二、对象实例级;第三、方法级;第四、局域级。怎么样区分这几个级别,必须注意。必须理解这四个等级。访问范围和视野的关系刚好相反。内存存在的时间。
71、参数的传递。以前的程序语言概念参数的传递有两种方法,一是【传值(call by value)】,另一个是【传址(call by reference)】。但java里面只有传值这种方式。基本数据类型参数值传递与类对象型参数值传递是不同的。
72、内存回收(garbage collection)。负责运行这个机制的就是【garbage collector】。对象声明包括两部分:对象引用和对象实例。如果一个对象实例不被任何对象引用指到的话,但启动GC时,就会把对象实例回收回去,并把内存释放调。取消对象引用,只要将它指定为【null】即可。GC是不定时的启动,也可以手动调用它,方法是【System.gc()】,它会调用【Runtime.getRuntime.gc()】,这两个方法都可以使用。finalize方法同样也是Object类常用的一个方法,与GC有关。它是在对象被回收前,GC所调用的方法。回收顺序与对象实例的生成顺序有关。既是我们手动调用System.gc(),GC也不见得一定运行,GC正确的启动时间无法得知。
第11章 Application与Applet
73、Application的输出,System类的out属性是PrintStream对象,有prinlin方法和print方法,也可以用err属性是PrintStream对象,有prinlin方法和print方法,但有区别,out属性可以重定向(redirected),err属性只能输出到默认的设备上。Application默认的就是所打开的命令行窗口,Applet默认的就是Java Console。 可以用>来实现重定向。println和print方法都是属于重载的方法,除了可以接受八种基本数据类型和String类型作为参数外,还可以接受一般的对象作为参数,编译器会自动调用这个对象的【toString】方法,char数组也可以作为这两个方法的参数。
74、Application的输入,分为两种,一是参数输入(命令行参数),Wrapper类的使用。基本数据类型与Wrapper类的对应关系。Wrapper类种有相应的parseXXX方法来实现字符串转换为基本数据类型。二是标准输入,System类的in属性是InputStream对象,有read方法来读取输入,读进来是byte对类型,需要转化为其他类数据型。通常使用InputStreamReader类,然后连接到BufferedReader类,用BufferedReader类提供的读取字符串的方法【readLine】。
75、系统参数的获取用【System.getProperties】方法。必须注意系统参数与命令行参数的区别。
76、System类的使用。setXXX(setOut、setErr、setIn),setProperties和SetProperty的区别。System.exit(n),虚拟机会调用Runtime.getRutime.exit(n)方法。currentTimeMills。
77、Runtime类的使用。可以通过exec这个方法来运行一个外部程序。
78、Appplication必须有一个main的方法,符合四个条件。而一个Applet一定要继承java.applet.Applet类。main方法是Application运行的起始点,而Applet运行的起始点在init方法上。Applet中,System.out或System.err方法来输出,但System.in方法不能用。Applet有自己的输入方式,类似于命令行参数的方式。在HTML文件中,加上参数语法,<param name=<参数名称> value=<参数值>>。然后在java程序中,应用java.applet.Applet类的【getParam】方法。
79、Applet基本方法的使用。init、start、stop、destroy、paint。destroy和finalize方法的区别在于使用地点不同。paint方法的使用。paint方法中有个属性是Graphics对象,注意Graphics类的【drawString】方法的使用。
80、java的安全性,是指Applet满足java指定的重重安全规范。四点限制措施。
81、Application和Applet的结合。Java Web Start是取代Applet的机制。
第12章 异常处理
82、异常是指程序在运行的过程中,由于编写程序的倏忽,外在环境的因素,或是电脑系统本身的问题,都可能导致程序运行时产生错误,造成死机或是计算的结果不正确,这些突发的状况称为异常。 异常处理是指当程序出现异常时,能够作出一些应变的处理。
83、java.lang.Throwable类。Exception类(可以控制)和Error类(无法控制)。
84、RuntimeException常见的有以下几种:ArithmeticException、ArrayIndexOutOfBoundsException、ArrayStoreException、ClassCastException、IllegalArgumentException、NativeArraySizeException、NullPointerException、SecurityException。由于自己编程引起的。
85、CheckedException常见的有以下几种:ClassNotFoundExecption、FileNotFoundException、InterrupedException、IOException、SQLException。一些外部因素引起的。
86、Error有OutOfMemoryError、StackOverflowError、UnknowError、AWTError、ThreadDeath。系统级且非常严重的错误。错误原因是内存不足或者是运行时挂起。
87、捕捉和处理异常。主要是针对CheckedException类的异常。try、catch、finally三个关键字的使用。处理异常包括以下两个步骤:一、把异常的名称及一些相关的信息显示出来,二、用最安全的方法恢复程序的运行。显示异常信息用到,toString、getLocalizedMessage、getMessage、printStackTrace方法。其中printStackTrace方法有三种不同的重载。弹性(flexibility)。 finally关键字的使用注意以下三点:一、没有异常产生-》进finally区块-》方法中剩下未运行的程序代码。二、有异常产生-》捕捉到-》进catch区块-》finally区块-》方法中剩下未运行的程序代码;三、有异常产生-》没有捕捉到-》进finally区块-》方法中剩下未运行的程序代码。
88、注意异常捕捉的顺序。越上层的类,越放在下面。
89、throws关键字的使用,在方法声明上抛出异常。throw关键字,在方法内部抛出异常。必须注意抛出RuntimeException和CheckedException两种异常在使用上的差别。
90、定义自己的Exception。
91、抛出异常方法覆盖的问题。注意两点:一、不可抛出原有方法抛出异常类的父类或上层类;二、抛出的异常类数目不能笔原有的方法抛出的还多。主要是因为编译时抛出的异常类无法自动转化为父类中所声明的异常类。
第13章 容器(Container)与布局(Layout)
92、什么是AWT(Abstract Windowing Toolkit),什么是GUI(Graphical User Interface)图形用户接口。AWT包的结构图。
93、Container包括Frame和Panel。Frame是先构造,然后setSize,然后再setVisible。理解Deprecation。Frame的常用方法。记拙Ctrl】+【C】来停止程序的方法。Panel不能独立出现在画面上,必须放在某个Container中才行,例如Frame或浏览器里面。Applet本身就是一个panel。add方法的使用。
94、什么是Layout。【setLayout(<xxxLayout>)】方法。有五个基本的Layout类。Frame默认的布局是BorderLayout类。Panel默认的布局是FlowLayout。另外还有CardLayout、GridLayout、GridBagLayout。也可以设计自己的Layout类。
95、pack和setSize方法的区别。
96、如果不使用Layout,可以使用【setSize】和【setLocation】方法来代替。最好使用Layout类。
第14章 事件处理
97、什么是事件【event】。事件就是别人给予它的一些操作。明白事件处理结构:事件本身、事件产生的来源、谁来处理事件。
98、什么是委托处理模式【Delegation Model】。事件处理的机制。
99、AWT Event类的结构图。分为两类:Low-level和senmantic。
100、【Listener】这个接口(interface)与【Adapter】类的相对应。
101、一个对象可以委托好几个类来处理相同的事件,一个处理事件的类也可以同时处理不同对象所产生的事件。这种情况称为【multiplexer】。
102、WindowEvent、MouseEvent、KeyEvent类事件处理的接口,类和方法。以及其他常用的Low-level Event类,分别是ContainterEvent和FocusEvent。
103、Swing是Java所设计的另外一组更丰富、功能更多的GUI空间。理解Swing和AWT的区别。