JAVA详细总结(精辟版).pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《JAVA详细总结(精辟版).pdf》由会员分享,可在线阅读,更多相关《JAVA详细总结(精辟版).pdf(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、JavaJava 总结总结-开始于 2013-9-7 09:27:48Java 概述Java 分类:java SE:主要是桌面程序、控制台程序开发,是 java 基础java EE:企业级开发(网站开发和基于 b/s 模式的编程)java ME:嵌入式开发(手机软件、小家电)第一个 Java 程序:public class JavaTestprivate String str=new String(hello java.);public void showMessage()System.out.println(str);public static void main(String args)J
2、avaTesttest=new JavaTest();test.showMessage();Java 可以有多个 main 函数。每个类中都可以有 main 函数,也就是说你的代码可以有多个入口,你只需要明白什么时候用哪个类的 main 函数作为入口即可。但是要注意的是用不同入口启动的两个进程是毫不相关的。学习 Java 前的心理准备:java 他妈的把 c/c+剔除的够干净的,在 c/c+中易如反掌的事,在 java 中却要大动干戈。所以在学习 java 之前,请做好心理准备,java 其实是一个残疾人。Java 关键字、运算符Java 保留字一览表:java 中 goto 是保留字,但不是
3、关键字,请记住 java 中没有 goto,但可以实现类似的功能,参考百度。java 中没有 sizeof,因为java 认为 c 语言中的 sizeof 主要用于跨平台,而 java 本身就是跨平台的。java 中没有 unsigned,也就是说 java 中的基本数据类型都是有符号的。这点要注意一下。请注意下面的代码:int a=;int b=;int c=a b;以上代码只有在 a 和 b 都是无符号的 int 时才能正确工作。对于 java 这种没有 unsigned 类型的语言来说,上述代码就是一个编程错误!因为 int 不足以容纳两个有符号 int 的差,当 a是很大的正整数,b
4、是很大的负整数时,a-b 就会溢出并返回负值。Java 运算符:java 运算符和 c、c+的运算符类似,功能也类似。但也有不同,比如 java 中有无符号右移运算(逻辑右移):。同时注意:用于 String 的“+”和“+=”是 java 中仅有的两个重载过的运算符,java 不允许程序猿重载任何的运算符。Java 数据类型Java 是强数据类型的语言,java 基本数据类型:boolean:true or falsechar:16bits,Unicode 编码字符byte:8bitsshort:16bitsint:32bitslong:64bitsfloat:32bits,float va
5、r=32.5f,注意加上“f”,否则带小数点的值都会被 java 当作 double处理。double:64bits在 Java 中,主数据(primitive)类型都有对应的被包装过了的类,以第一个字母大写开头,例如:Boolean、Integer、Character、Byte、Short、Long、Float、Double。主数据类型可以与其对应的对象相互转化,在运算时,Java 5.0 以后会自动进行转换,所以很方便。在使用 ArrayList 时,你只能声明对象,例如:ArrayList(其实这是泛型),而不能使用 ArrayList,但是在使用 ArrayList 时,可以直接使用
6、int 类型。Java 字节序:java 在任何系统上的字节序都是大端(Big-endian),因为 java 是跨平台的嘛。网络传输的字节序也是大端。因此 java 程序和 java 程序之间进行数据传输,并不会出现什么问题。但是当 java 遇到字节序是小端(Little-endian)的数据时,就会出现问题。这时我们就需要转换数据的大小端。方法有很多,你可以自己写方法实现大小端的检测和转换,但是作为 java程序猿来说,我们应该尽量使用已有的类库或者方法来解决问题,以提高生产率。下面介绍几种 java 类库中已有的解决办法:1使 用 java.nio.ByteBuffer 类 中 的 o
7、rder 方 法 将 字 节 序 改 为 小 端。如:buffer.order(ByteOrder.LITTLE_ENDIAN);使用 Integer 等基本数据类型对应的类类型中的静态方法将 int 等数据类型的数据转换为小端字节序的数据。如:Integer.reverseBytes(num);另外,在网络传输时,还需要注意其他问题:java 没有 unsigned;java 数据类型的长度和其他语言的可能不同。同时,IEEE 754 标准只是规范了 float、double 的逻辑规范,其存储时还是会有字节序问题,因此在不同系统或者编程语言之间进行传输数据时,也要考虑字节序问题。2byte
8、、int 的转换:由于 java 中所有的基本数据类型都是有符号的,所以当你要把 byte 类型的数据当作无符号数据看待时,你就得使用特殊的方法将其存放在更大容量的数据类型里边,比如将 byte转换之后存放在 int 中。下面说下 byte 和 int 的相互转化:byte 转换为 int 有两种方法:1不改变原值,也即转换前后都将其看作有符号数,可使用强制类型转换:int i=(int)b;2保留最低字节的个个位不变,则需采用位操作:int i=b&0 xff;int 转换为 byte 可以直接使用强制类型转换:byte b=(byte)i;,注意这个操作是直接截取int 中最低一个字节,如
9、果 int 数值大于 127 且小于 256,则转换得到的 byte 为负值(因为是有符号的,但其二进制位和 int 的最低字节完全相同),如果 int 数值大于 255,则转换得到的 byte 就会面目全非,因为截断了。字符串String:String 是不可变字符串对象,任何修改 String 的操作,实际上返回的都是一个全新的String对象。String中保存的是 Unicode 格式的 16位字符组成的字符串,String永远是 Unicode编码。“+”、“+=”可以用来连接字符串。由于 String 是不可变的,因此在连续的字符串连接时,会不断的生成中间的 String 对象,以
10、得到最终的 String 对象。这样的话,效率是很低的,java编译器为了提高效率,会暗地里为我们做一些优化,它用 StringBuilder 来处理中间过程的字符串连接,并最终使用 toString()方法(从 Object 继承来的,当你要打印该对象时,你就要覆盖 toString()方法)将最终结果转换为 String 对象。在程序中,比如在循环连接字符串时,为了效率,最好使用 StringBuilder 来处理中间结果。StringBuilder 是可变的,类似的还有StringBuffer,不过 StringBuffer 是线程安全的,因此开销相对也会大点。byte、char、Str
11、ing 的转化:String.getBytes(“GBK”)取得其“GBK”编码格式的字节数组,“GBK”指出将字符串转换为何种编码并保存到字节数组,取得的字节数组的内容就是该字符串在“GBK”编码下的字节数组。String.getChars()将 String 转为 char。new String(byte bytes,“UTF-8”),将bytes字节数组以“UTF-8”编码格式转换为 Unicode,“UTF-8”指出字节数组是以什么格式编码的,并不是最终要转换成的编码。new String(chars)将 char 类型的数组 chars 转换为 String 类型。数字的格式化Jav
12、a 中数字的格式化与 C 语言的很相似。将数字以带逗号的形式格式化:String.format(“%,d”,1000000);注意:%和 d 之间有一个逗号。Java 中日期的格式化:String.format(“%tc”,new Date();其中,%tc 表示完整日期,%tr只显示时间,%tA%tB%td 周 月 日也可以这样写:String time=new SimpleDateFormat(yyyy-MM-dd).format(new Date();取得当前日期可以使用 Date 对象,Date 中 getTime()、setTime()都是针对 GMT 时间,toString()则会
13、根据时区将时间转换为相应字符串,但其他关于日期的操作最好使用 Calendar对象,具体参见 Java 手册。Java 控制语句java 中控制语句与 c、c+类似,但与 C/C+不同的是,java 中的 while、if 等的条件判断,不能直接使用类似于 int 型的变量(看其是否等于 0)来判断,应该用一个判断语句或者直接使用 boolean 类型的变量。特殊循环语句:循环 for(int cell:cells)中,冒号(:)代表 in,cells 为数组,每循环一次 cells 数组的下一个元素都会赋值给 cell 变量。这是 java 5.0(Tiger)开始使用的 for 循环加强版
14、,当然你也可以使用 for 原版:for(int i=0;in;i+)foreach 循环可以用于数组和任何实现了 Iterable 接口的类(这并不意味着数组肯定也是一个 Iterable)。类和对象java 中的所有东西都包含在类中,在 java 源文件中可以包括多个类,但是只能有一个public 类,而且如果有 public 类的话,这个文件的名字要和这个类的名字一样。一个类中可以有多个方法,一个方法中可以有多个语句。Java 存取权限和存取修饰符:Java 有 4 种存取权限和 3 种存取修饰符,因为有一个缺省的权限等级(无修饰符)。4 种存取权限:public:.private:.d
15、efault:只有在同一个包中的默认事物能够存取protected:受保护的部分,运行起来像是 default,但也允许不在同一个包中子类继承受保护的部分3 种存取修饰符:public、private、protected对象与引用:java 中没有所谓的对象变量,有的只是对象的引用,对象只存在于堆上,并且只能通过其引用进行引用。java 创建对象不能通过类似于“Aa;”的形式直接定义,这只是定义了一个对象引用变量,而需要通过类似于“Aa=new A();”的形式在堆上定义一个对象,并将在栈上的对象的引用指向这个对象。c+中对象作为参数,是按照值传递。其实java 也是值传递,只不过java 中
16、只有对象的引用,而没有所谓的“对象变量”,故而传递的都是对象的引用的值,因此在函数中可以改变引用参数指向的对象。注:java 中 String 类型的对象作为函数参数传递时,也是传递引用的值,而不是所谓的“值传递”,因为 String 类是不可变的,它没有提供自身修改的函数,每次修改操作都是新生成一个 String 对象,所以要特殊对待,可以认为是传值。关于这一点,网上实在是有太多的流言蜚语,有很多流言是错误的,请务必注意。那么有没有办法使函数不能够修改引用参数指向的对象呢?答案是传递对象副本的引用。为了使用对象的副本作为函数参数,可以使用对象的 clone()方法对其进行浅层复制(具体细节请
17、百度之),所谓的浅层复制即是只复制对象本身,而不对其引用的或者其成员变量引用的对象进行复制,也即不对整个对象网进行复制。对对象网进行复制(深层复制),另有它法,请百度之。对象相等性的判断:“=”或者“!=”只能用来判断对象的引用是否相等,若需判断对象是否相等,则需equals(),但一般你需要覆盖 equals(),因为 Object 中的 equals()默认使用对象的地址判断对象是否相等。但基本类型直接使用“=”或者“!=”即可。实例变量与局部变量:实例变量是声明在类内,而不是方法中,实例变量有默认值。局部变量是声明在方法中的,局部变量没有默认值,在使用之前,必须初始化,否则编译器报错。关
18、于初始化的更多细节:java 中成员变量可以在定义的后边直接进行初始化,也可以在构造函数中进行初始化。而 c+中成员变量不能在定义类时直接初始化,需通过构造函数初始化。final:声明一个类或方法到达继承树的末尾,可以用 final,也即禁止该类被继承或方法被覆盖。同时请注意 final 方法是前期绑定的,将方法声明为 final 可以有效关闭该方法的动态绑定机制,但多数情况下并不会提升多少效率,因此不要为了提升效率而随意使用 final 来声明方法。静态的方法:用 static 声明的方法是静态的方法,静态方法不需要实例化的对象,就可以通过类名来引用(当然也可以通过对象来引用),但静态的方法
19、不可以使用非静态的变量,也不能调用非静态的方法。静态的变量:用 static 声明的变量是静态变量,静态变量为该类的所有对象共享,注意 static 不能作用于局部变量,只能作用于成员变量,因此只有成员变量才能是静态变量。静态变量也会有默认值,就像实例变量一样会被自动初始化一样。静态变量会在该类任何的静态方法被调用之前被初始化,也会在该类任何的对象被创建之前被初始化。你可以像初始化其他成员变量一样,直接在定义处初始化,也可以使用特殊的语法结构进行初始化静态块,如下:public class Spoon static int i;static i=100;还有一种类似的初始化非静态成员变量的语法
20、实例初始化块,只是没有 static 关键字而已。静态的 final 变量:静态的 final 变量是常数。其声明形式为:public static final var_name;静态的 final 变量必须被显式初始化,可以用以下两种方法之一初始化:1、声明时赋值:public static final double PI=3.1415926;2、在静态初始化程序中:public static final double PI;static PI=3.1415926;Java 终极对象:在 java 中的所有类都是从 Object 这个类继承出来的,也就是说 Object 是所有类的父类,它是
21、非抽象的,允许被实例化。你可以显式声明类的继承对象为 Object:public class Animalextends Object,如果不显式声明的话,java 编译器会隐含的进行继承。ArrayList 就是通过声明 Object 对象为方法参数来处理所有的对象的,否则他不可能实现处理所有对象的功能。super 与 this:通过 super 可以调用父类中的方法,例如:super.isEmpty()。通过 this 可以调用本类中的方法,例如:this.fun()。实际上,java 会将 this 作为一个隐含的参数传递给类中的每一个方法。构造函数:在构造器中调用具有多态行为的函数时,
22、容易引起隐蔽的错误。为此,这里有一条有效的准则:“用尽可能简单的方法使对象进入正常状态,如果可以的话,避免调用其他方法,尤其是别调用具有多态行为的方法”。可以通过 super()调用父类的构造函数,如果子类没有显式的调用父类的构造函数,则编译器会在子类的构造函数第一行加上 super()调用,当然这里只能调用其父类的无参数的构造函数。当然你也可以自己写出具有参数的 super()函数来调用父类的带参构造函数。可以通过 this()从某个构造函数中调用同一个类的另外一个构造函数。this()只能存在于构造函数中,且同 super()一样,只能位于第一行语句。因此 super()与 this()不
23、可兼得。垃圾回收器和对象清理:对于 java 中的垃圾回收器和对象的清理工作,请记住:垃圾回收器可能会被调用,也可能不会被调用,即使其被调用,它也可能以它想要的任何方式来回收垃圾。因此,对它不要抱过多幻想。当下,除了回收内存以外的其他任何事情(比如:已经打开的文件、网络连接、在屏幕上绘制的图形、甚至可以是外部世界的某个开关),你最好不要依赖于垃圾回收器,也不要依赖于 finalize()(finalize()是被垃圾回收器调用的,使程序猿可以在垃圾回收器运行时做出一些重要的动作,比如说回收一些非正常方式分配的内存),最好的办法就是程序猿自己编写好特定的方法调用即可,比如在 finally 中调
24、用之。抽象类、抽象方法抽象类:声明形式为:abstract class Dog extends Animal 抽象方法:抽象方法允许你声明方法的名称、参数以及返回类型,但没有实体,直接以分号结束。例:public abstract void eat();抽象方法的意义是就算无法实现出方法的内容,但还是可以定义出一组子型共享的协议。注意:如果你声明一个抽象方法,那么也必须将该类标记为抽象的,你不能在非抽象类中拥有抽象的方法。第一个具体子类必须实现所有的抽象方法。内部类内部类可以使用外部类所有的方法与变量,就算是私有的,也照样可以使用。当然,这是说内部类的实例可以存取它所属的外部类实例的所有方法与
25、变量。一个内部类被嵌套多少层并不重要,它都能够透明地访问所有它所嵌入的外围类的所有成员。在外部类中创建内部类的实例,就像普通的类的创建一样,例如:MyInner inner=newMyInner();在外部类以外的程序代码创建内部类的实例,要用特殊的语法:MyOuter outer=newMyOuter();MyOuter.MyInner inner=outer.new MyInner();如果你需要生成对外部类对象的引用,可以使用外部类的名字后边紧跟圆点和 this 的特殊语法,如:MyOuter.this使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 详细 总结 精辟
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内