>>>表示不带符号右移,负数的右移,左边空出来的补1。
三目运算符(?
:
)相当于条件运算符,表达式x?
y:
z(max=(a>b)?
a:
b)用于判断x是否为真,如果为真表达式的值为y,否则为z。
OOP面向对象的编程,它是先确定数据结构,在确定运算,而面向过程的是先确定算法,在确定数据结构。
现实生活中具有共同特性的对象的抽象就称之为类,类由类声明和类体构成,类体又由变量和方法构成。
Static:
静态的方法和静态的变量只属于某一个类,不属于类的对象;非静态的方法是只属于对象。
静态的方法和静态的变量的引用直接通过类名引用,静态的方法中不能调用非静态的方法和引用非静态的成员变量。
反之,则可以,可以用类的方法obj去调用静态的方法。
常量的定义:
finaldoublePI=3.1415926,final常量可以在声明的同时赋初值,也可以在构造函数中赋初值。
为了节省内存,我们常将常量声明为静态的(static),静态的常量只能在声明时赋初值。
final标记的类不能被继承。
final标记的方法不能被子类复写。
final标记的变量(成员变量或局部变量)即为常量,只能赋值一次。
在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类、基类),新的类称为子类(派生类)。
在Java中,不允许多重继承。
覆盖(override)发生在子类与父类之间,可以使用super访问父类被子类隐藏的变量或覆盖的方法:
super.父类中的类名就可调用被覆盖的父类中的类了,用super调用父类中的构造方法,只能放在程序的第一行。
Vector类类似于一个数组,使用时无需声明上限,随着元素的增加,Vector的长度会自动增加。
PublicVector(intinitialCapacity,intcapacityIncrement):
创建一个初始长度为initialCapacity的Vector,当向量需要增加时,增加capacityIncrement个元素。
Vector():
创建一个原始大小为10的默认矢量。
在每次再分配中,分配的额外空间的总数由在创建矢量时指定的增量来确定。
如果没有指定增量,在每个分配周期,矢量的大小增一倍。
向量名.add(“86”),添加元素;向量名.add(1,“86”),在第二个位置处插入元素;向量名.size(),返回向量的长度;向量名.remove(0),删除第一个元素;System.out.println(向量名.get(i)+""),输出第i个元素;System.out.println(+向量名.toString()),将向量转换成字符串之后输出。
Hashtable类存储的是对象的名值对,将对象的名和它的值相关联同时存储,并可以根据对象名来提取它的值。
在Hashtable中,一个键名只能对应一个键值,然而一个键值可以对应多个键名,键名必须是唯一的。
PublicHashlable(intinitialCapacity),构建散列表;publicObjectput(Objectkey,Objectvalue)。
hashCode()方法,只要保证不同的对象有不同的散列码就可以。
各种原始数据类型与String类型之间可以通过方法相互转换,valueOf()系列的静态方法用于从其他对象转换成字符串,intf=9;stringstr;str=String.valueOf(f);'a',字符型a;"a",字符串型a。
一个点号表示当前路径,两个点号表示上一层路径,因此在设置环境变量时,通常保留当前路径,常出现点号。
floatf;f=1.3;/*错误,由于java中小数常量1.3被认为是8个字节的双精度double类型,现被赋给只有4个字节的单精度float类型,显然会丢失精度.因此改为f=1.3f;1.3f表示为单精度float型变量.*/
if
(1)//编译报错出现不兼容的数据类型,将1改为true,//java中逻辑值只有两个true和false.
int[]num;num={1,2,3};//错误的定义,应改为int[]num={1,2,3};或改为int[]num=newint[]{1,2,3};
值得一提的是,使用浮点型数值时,默认的类型是double,在数值后面可加上D或是d,作为double类型的标识。
在Java中,D或d是可有可无的。
在数据后面加上
F或是f,则作为float类型的识别。
若是没有加上,Java就会将该数据视为double类型,而在编译时就会发生错误,错误提示会告诉设计者可能会失去精确度。
a+(-、*、/)=b:
a=a+b
数据类型的转换可分为下列两种:
“自动类型转换”与“强制类型转换”。
当Java发现程序的表达式中有类型不相符的情况时,会依据下列的规则来处理类型的转换。
1、占用字节较少的类型转换成占用字节较多的类型。
2、字符类型会转换成int类型。
3、int类型会转换成float类型。
4、表达式中若某个操作数的类型为double,则另一个操作数字也会转换成double类型。
5、布尔类型不能转换成其它类型
break语句可以强迫程序跳离循环,当程序执行到break语句时,即会离开循环,继续执行循环外的下一个语句。
continue语句可以强迫程序跳到循环的起始处,当程序运行到continue语句时,即会停止运行剩余的循环主体,而是回到循环的开始处继续运行。
Unicode,它为每个字符制订了一个唯一的数值,如此在任何的语言、平台、程序都可以安心地使用。
System.arraycopy(source(数组名),0,dest,0,x):
语句的意思就是:
复制源数组从下标0开始的x个元素到目标数组,从目标数组的下标0所对应的位置开始存取。
instanceof的语法格式为:
对象instanceof类(或接口)(AinstanceofB):
判断A是否是B的实例,也可以用它来判断一个类是否实现了某个接口,如果是返回true,否则返回false。
Arrays.sort(数组名)为数组排序的操作,但这个方法在java.util这个包里面,所以在用到的时候需要先将它导入。
Java允许二维数组中每行的元素个数均不相同,这点与一般的程序语言是不同的。
在二维数组中,若是想取得整个数组的行数,或者是某行元素的个数时,可利用“.length”来获取,其语法如下:
(数组名.length//取得数组的行数数组名[行的索引].length//取得特定行元素的个数)
方法可以简化程序的结构,也可以节省编写相同程序代码的时间,达到程序模块化的目的。
一个对象由一组属性和一组对属性进行操作的方法构成。
将具有相同属性及相同行为的一组对象称为类,类是一个独立的单位,它有一个类名,其内部包括成员变量,用于描述对象的属性;还包括类的成员方法,用于描述对象的行为。
面向对象的程序设计有三个主要特征,如下:
封装性(private)、继承性、多态性。
多态是面向对象程序设计的又一个重要特征,多态是允许程序中出现重名现象,Java语言中含有方法重载与成员覆盖两种形式的多态。
方法重载:
在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。
成员覆盖:
子类与父类允许具有相同的变量名称,但数据类型不同,允许具有相同的方法名称,但完成的功能不同。
多态的特性使程序的抽象程度和简捷程度更高,有助于程序设计人员对程序的分组协同开发。
类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的个体,因而也称实例(Instance)。
韩红彩1169684066韩宏伟630876987
李才周250684253王家福314198337
徐平1196484775马含玉810985061
如果在类中声明了一static类型的属性,则此属性既可以在非static类型的方法中使用,也可以在static类型的方法中使用。
但用static类型的属性调用非static类型的属性时,则会出现错误。
在用/**开头后,第一行,或者头几行是类、变量或方法的主要描述。
其后,可以包括一个或多个不同的@标记。
每个@标记必须在一个新行的开头,或者跟随一个星号(*)之后,同类型的多个标记应该组合在一起。
在java中只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类,但是java中却允许多层继承。
子类在继承父类时,会继承父类中的全部的属性与方法。
当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法复写了父类中的方法。
同理,如果子类中重复定义了父类中已有的属性,则称此子类中的属性复写了父类中的属性。
this表示当前对象,而所谓的当前对象就是指调用类中方法或属性的那个对象。
在类中的所有方法里,只有构造方法是被优先调用的,所以使用this调用构造方法必须也只能放在构造方法的第一行。
this:
1、表示当前对象;2、调用本类中的方法或属性3、调用本类中的构造方法时,放在程序首行
super:
1、子类调用父类的方法或属性;2、调用父类中构造方法时,放在程序首行。
用super或this调用构造方法时都需要放在首行,所以,super与this调用构造方法的操作是不能同时出现的。
抽象类定义规则:
抽象类和抽象方法都必须用abstract关键字来修饰;抽象类不能被实例化,也就是不能用new关键字去产生对象;抽象方法只需声明,而不需实现;含有抽象方法的类必须被声明为抽象类,抽象类的子类必须复写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。
Object类是Java类层中的最高层类,是所有类的超类。
换句话说,Java中任何一个类都是它的子类。
Assign:
指定、分配
接口(interface)里的数据成员必须初始化,且数据成员均为常量(publicstaticfinal),所以声明数据成员的关键字final可省略。
接口里的方法必须全部声明为publicabstract,也就是说,接口不能像抽象类一样保有一般的方法,而必须全部是“抽象方法”,抽象方法声明的关键字abstract是可以省略的。
Implements
所有寄存器均为32位
一个类只可以继承一个父类,但却可以实现多个接口。
接口与一般类一样,均可通过扩展的技术来派生出新的接口。
原来的接口称为基本接口或父接口,派生出的接口称为派生接口或子接口。
通过这种机制,派生接口不仅可以保留父接口的成员,同时也可加入新的成员以满足实际的需要。
同样的,接口的扩展(或继承)也是通过关键字extends来实现的。
有趣的是,一个接口可以继承多个接口,也就是同时继承了多个接口的抽象方法与常量,这点与类的继承有所不同。
对象的多态性,即子类实例化对象可以转换为父类实例化对象。
(父类对象由子类实例化)
父类对象通过子类对象去实例化,实际上就是对象的向上转型。
向上转型是不需要进行强制类型转换的,但是向上转型会丢失精度。
与向上转型对应的一个概念就是“向下转型”,所谓向下转型,也就是说父类的对象可以转换为子类对象,但是需要注意的是,这时则必须要进行强制的类型转换。
Object是所有类的父类,其中的toString()和equals方法是需要被复写的。
“重载”(overloading),它是指在相同类内,定义名称相同,但参数个数或类型不同的方法,因此Java便可依据参数的个数或类型调用相应的方法。
“复写”(overriding),它是在子类当中,定义名称、参数个数与类型均与父类相同的方法,用以复写父类里的方法。
packag是在使用多个类或接口时,为了避免名称重复而采用的一种措施,使用时在类或接口的最上面一行加上package的声明就可以了。
//包的编译和运行
javac-d.Bao.java(“-d”:
表示生成目录“.”:
表示在当前目录下生成)
javademo.java.Bao
importdemo.java.a.Person改成importdemo.java.a.*,表示导入包中的所有类。
在java中有这样的规定:
导入全部类或是导入指定的类,对于程序的性能是没有影响的,所以在开发中可以直接写导入全部类会比较方便。
也可直接使用其他包中的类:
System.out.println(newdemo.java.a.Person().talk());
JDK中常见的包:
1、java.lang—包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
在java.lang包中还有一个子包:
java.lang.reflect用于实现java类的反射机制。
2、java.awt—包含了构成抽象窗口工具集(abstractwindowtoolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
3、javax.swing—此包用于建立图形用户界面,此包中的组件相对于java.awt包而言是轻量级组件。
4、java.applet—包含applet运行所需的一些类。
5、—包含执行与网络相关的操作的类。
6、java.io—包含能提供多种输入/输出功能的类。
7、java.util—包含一些实用工具类,如定义系统特性、与日期日历相关的函数。
8、java.sql
1、private访问控制符
private访问控制符,那么这个成员只能在这个类的内部使用。
注意:
不能在方法体内声明的变量前加private修饰符。
2、默认访问控制符
如果一个成员方法或成员变量名前没有使用任何访问控制符,就称这个成员所拥有的是默认的(default)访问控制符。
默认的访问控制成员可以被这个包中的其它类访问。
如果一个子类与其父类位于不同的包中,子类也不能访问父类中的默认访问控制成员。
3、protected访问控制符
如果一个成员方法或成员变量名前使用了protected访问控制符,那么这个成员既可以被同一个包中的其它类访问,也可以被不同包中的子类访问。
4、public访问控制符如果一个成员方法或成员变量名前使用了public访问控制符,那么这个成员可以被所有的类访问,不管访问类与被访问类是否在同一个包中。
包名中的字母一律小写,如:
demo.java;类名、接口名应当使用名词,每个单词的首字母大写,如:
TestPerson;方法名,第一个单词小写,后面每个单词的首字母大写,如:
talkMySelf;常量名中的每个字母一律大写,如:
COUNTRY。
开发者用的JDK中的包和类主要在JDK的安装目录下的jre\lib\rt.jar文件中,由于Java虚拟机会自动找到这个jar包,所以在开发中使用这个jar包的类时,无需再用classpath来指向它们的位置了。
jar文件就是JavaArchiveFile
只要在命令行中用以下命令就可以将一个包打成一个jar文件:
jar–cvfcreate.jardemo
·-c:
创建新的存档
·-v:
生成详细输出到标准输出上
·-f:
指定存档文件名
·create.jar:
是生成jar文件的名称
·demo:
要打成jar文件的包
进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。
多进程操作系统能同时运行多个进程(程序),由于CPU具备分时机制,所以每个进程都能循环获得自己的CPU时间片。
由于CPU执行速度非常快,使得所有程序好象是在“同时”运行一样。
线程(Thread)是比进程更小的执行单位,线程是进程内部单一的一个顺序控制流。
所谓多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在、同时运行,形成多条执行线索。
一个进程可能包含了多个同时执行的线程。
二者的区别:
同样作为基本的执行单元,线程是划分得比进程更小的执行单位;每个进程都有一段专用的内存区域。
与此相反,线程却共享内存单元(包括代码和数据),通过共享的内存单元来实现数据交换、实时通信与必要的同步操作。
每个Java程序都有一个缺省的主线程,对于Java应用程序,主线程是main()方法执行的线索;对于Applet程序,主线程是指挥浏览器加载并执行JavaApplet程序的线索。
要想实现多线程,必须在主线程中创建新的线程对象。
任何线程一般具有五种状态,即创建(Threadthread=newThread();)、就绪、运行、阻塞、终止。
在main()方法快结束时调用isAlive()方法,此时的状态不再固定,有可能是true有可能是false。
某个线程对象在启动(调用start()方法)之前调用了setDaemon(true)方法,这个线程就变成了后台线程。
在同一类中,使用synchronized关键字定义的若干方法,可以在多个线程之间同步,当有一个线程进入了有synchronized修饰的方法时,其它线程就不能进入同一个对象使用synchronized来修饰的所有方法,直到第一个线程执行完它所进入的synchronized修饰的方法为止。
Notify:
通知、唤醒
wait、notify、notifyAll这三个方法只能在synchronized方法中调用,同组里的wait只能被同组的notify唤醒通过控制run方法中循环条件的方式来结束一个线程的方法是推荐使用的,这也是实际中用的最多的方法。
要强制某一线程运行,可用join()方法。
join()方法会抛出InterruptedException的异常,所以编写时必须把join()方法编写在try-catch块内。
Demo(Demonstration):
示范flush:
刷新
RandomAccessFile在数据等长记录格式文件的随机(相对顺序而言)读取时有很大的优势,但该类仅限于操作文件。
newRandomAccessFile(f,"rw");//读写方式
newRandomAccessFile(f,"r");//只读方式
String.substring(intbeginIndex,intendIndex)方法可以用于取出一个字符串中的部分子字符串,但要注意的一个细节是:
子字符串中的第一个字符对应的是原字符串中的脚标为beginIndex处的字符,但最后的字符对应的是原字符串中的脚标为endIndex-1处的字符,而不是endIndex处的字符。
IO流大部分的方法操作时都进行了异常处理,这是因为所使用的方法处都用throws关键字抛出了异常,所以这里需要进行异常捕捉。
管道流主要作用是可以连接两个线程间的通信。
管道流也分为字节流(PipedInputStream、PipedOutputStream)与字符流(PipedReader、PipedWriter)两种类型,本节主要讲解PipedInputStream与PipedOutputStream。
一个PipedInputStream对象必须和一个PipedOutputStream对象进行连接而产生一个通信管道,PipedOutputStream可以向管道中写入数据,PipedInputStream可以从管道中读取PipedOutputStream写入的数据。
setclasspath=%classpath%;d:
\cn\mybole
sequence:
合并枚举(Enumeration)
字节输入流:
InputStream和OutputStream,字符输入流:
Reader和Writer,这四个类都是抽象类,使用时,都必须依靠其子类实例化。
中国大陆将每一个中文字符都用两个字节的数字来表示,原有的
ASCII码字符的编码保持不变,仍用一个字节表示,为了将一个中文字符与两个ASCII码字符相区别,中文字符的每个字节的最高位(bit)都为1,中国大陆为每一个中文字符都指定了一个对应的数字,并作为标准的编码固定了下来,这套编码规则称为GBK(国标码),后来又在GBK的基础上对更多的中文字符(包括繁体)进行了编码,新的编码系统就是GB2312,而GBK则是GB2312的子集。
Unicode编码的字符都占用两个字节的大小,也就是说全世界所有的字符个数不会超过2的16次方(65536)。
对象序列化(在某些书中也叫串行化),是指将对象转换成二进制数据流的一种实现手段,通过将对象序列化,可以方便的实现对象的传输及保存。
ObjectInputStream与ObjectOutputStream类,可以帮开发者完成保存和读取对象成员变量取值的过程,但要求读写或存储的对象必须实现了Serializable接口,但Serializable接口中没有定义任何方法,仅仅被用作一种标记,以被编译器作特殊处理。
如果不希望类中的属性被序列化,可以在声明属性之前加上transient关键字。
transient意思是临时的,即不会随类一起序列化到本地,所以当还原后,这个关键字定义的变量也就不再存在。
Applet程序能跨平台、跨操作系统、跨网络运行、代码小,易于快速地下载和发送,并且,它具有不需要修改应用程序就可增加Web页新功能的特性。
Applet程序不能单独运行,必须通过HTML调入后,方能执行以实现其功能。
Apple类中只有一