JAVA知识点总结.pdf

所需积分/C币:10 2019-07-27 17:38:42 2.12MB PDF
22
收藏 收藏
举报

关于java语言设计理念 抽象类与接口的区别是什么 java为什么不支持多继承 java里的枚举实现机制是什么 java中的内部类 关于类Collections,Arrays,Objects java里的方法重载 关于java里的main方法
boolean类型不可以转换为其它数据类型 整型、字符型、浮点型的数据在混合运算中相互转换,转换时遵循以下原则:容量小的类 型自动转换为容量大的数据类型,数据类型按容量大小排序如下 byte, short, chariintlong]float> doubled 其中byte、shot、char之间不能相互转换,他们三者在计算时首先会转换为nt类型。 容量大的数据类型转换为容量小的数据类型时要加上强制转换符,但可能造成精度降低或 溢出,使用时要格外注意, byte b3=(byte)b1+b2);//系统将转换为int型运算,需要强 制转换符 有多中类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类 型,然后再进行计算 逻辑运算 、Java中,&&与&,‖与的区别 在Java的逻辑运算符中,有这么四类:&&(短路与),&,|,‖(短路或 8&和&都是表示与,区别是&&只要第一个条件不满足,后面条件就不再判断。而&要对所 有的条件都进行判断,和‖也是一样。 例子:(23!=23)88(100/0==0) 这个不会报错,因为第一个不满足,就不会判断第二个了,但是&的话会报错 2、 switch语句 witch(i) case 8 case 3 case 2 System. out. println(C); break case 9 System. out. println (D); 16 default System. out. println(i } 注:多个case可以合并在一起;case语句后一般要加 break语句; def ault可以省略,但不 推荐这样做:Java中 swit h语句只能探测it类型值 值传递和引用传递 1、值传递 在方法的调用过程中,实参把它的实际值传递给形参,此传递过程就是将实参的值复制 份传递到函数中,这样如果在函数中对该值(形参的值)进行了操作将不会影响实参的值。因 为是直接复制,所以这种方式在传递大量数据时,运行效率会特别低下。 2、引用传递 引用数据类型:引用类型的变量保存引用值,所谓的引用值就是对象所在内存空间的“首 地址值”,通过对这个引用值来操作对象,常见的引用类型:类类型,接口类型和数组 引用传递弥补了值传递的不足,如果传递的数据量很大,直接复过去的话,会占用大量的 内存空间,而引用传递就是将对象的地址值传递过去,函数接收的是原始值的首地址值。 在方法的执行过程中,形参和实参的內容相同,指向同一块内存地址,也就是说操作的其 实都是源数据,所以方法的执行将会影响到实际对象。 特点: 基本数据类型传值,对形参的修改不会影响实参 引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会 影响到实际的对象。 String, Integer, Double等不可变的类型特殊处理,可以理解为传值,最后的操作不会修 改实参对象 类和对象 实体 刘象 职员 职员A:职员 职员A4 站名 姓名=A 年龄 年龄=30 日前工资 目前工资=800 +显示姓名 +显示年齡 职员B:职员 +修改姓名( 领取工资 姓名 年龄=350 目前⊥资-900 1、构造函数 构造函数的基本特征: 构造函数要和其相对应的类名字一样。 一个类可以有多个构造函数,并且这多个构造函数的函数名可以相同,但其行为和特征必 须不相同。 构造函数没有返回值。 构造函数总是和new运算符一起被调用。 构造方法注意事项 子类的构造过程中必须调用基类的构造凶数。 子类可在自己的构造方法中使用 super来调用基类的构造方法。 如果子类构造方法中没有显示的调用基类构造方法则系统默认调用基类无参的构造方法。 如果子类构造方法没有显性地调用基类构造方法,并且基类中也没有无参数的构造方法 则编译出错 构造函数的初始化 如果在构造函数中没有明确地指明给某个字段赋值,则系统会字段为该字段赋值:如果该 字段是数字则赋0,如果为对象则赋ηu,如果为布尔类型则赋为 false。在此建议如果能赋值 尽量赋值,因为如果不赋值则写出来的程序是不容易被别人看懂的。 构造函数执行过程 1.所有的数据字段被初始化为默认值(0、 false或nu)l 2.如果一个构造函数的第一行调用了另一个构造函数,则先执行另一个构造函数。否则,按 照在类声明中岀现的次序依次执行所有的字段初始化语句和初始化块 3.执行构造函数的主体。 类的加载顺序: 1.父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法) 2.子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法) 3.父类非静态代码块(包括非静态初始化块,非静态属性) 4.父类构造函数 5.子类非静态代码块(包括非静态初始化块,非静态属性) 6.子类构造函数 2、访问控制符 修饰符 类内部 同一个包。 任何地方 private+ de£ault4 tested public+ 3、fine关键字 fna使用注意事项: final的变量的值不能够被改变,包括局部变量和成员变量,而且一定要赋值 fnal的方法不能够被重写。 fna的类不能够被继承。 所以,我们不能用fna声明一个类又用 abst ract来声明这个类 4、面向对象的三大特性和五大原则 三大特性 继承 继承需要注意的: 1.子类能够继承父类的 public和 protected成员变量和方法。 2.子类不能继承父类中的 private成员变量和方法。 3.子类能够继承父类中默认修饰符的成员,只要子类和父类在同一个包中 4.子类不能继承父类中的构造方法,只能调用 5.若没有 extends关键字,则该类一定为 java. lang○ bject类的子类,因为所有类都是 Object 的子类。 方法的覆盖 继承的时候,子类定义一个和父类同名的方法来覆盖父类的方法。要想再次使用父类的方 法,需要使用 super关键字。 方法覆盖中,子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明, 即与父类完全相同的方法名、返回类型和参数列表。 方法的重载 在类中定义几个方法名相同但参数列表不同的方法。 Java中允许对任何方法重载。同时要注意,如果重载的两个方法中两个方法的名字和参数 列表一致,但方法返回类型不一样,这种情况也会编译出错,因为这是不能区分重载方法的 封装 封装就是把不必要向用户展示的信息隐藏起来,把对象的属性和操作结合为一个独立的整 体,也就是类,给用户只提供一个外部接口即可。这样做有两个好处 1.方便用户使用,用户只需要知道这个类怎样用即可,而无需关心这个类是怎样形成的 2.提高了系统的安全性,这样做用户就无法修改系统属性,所以就减少了系统风险。 3.良好的封装能够減少耦合 4.类内部的结构可以自由修改。 多态 多态的定义 指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多 种不同的行为方式。(发送消息就是函数调用) 多态:多态又分为设计时多态和运行时多态,例如重载又被称为设计时多态,而对于覆盖 或继承的方法,JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被 称为运行时多态。 实现多态的技术称为: 动态绑定( dynamic binding),是指在执行期闫判断所引用对象的实际类型,根据其实 际的类型调用其相应的方法。 类的多态性表现为方法的多态性,方法的多态性主要体现在方法的重载和方法的覆盖。 多态的作用 消除类型之间的耦合关系 五大原则 单一职责原则(sRP) 一个类应该仅有一个引起它变化的原因 例如:T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类 T时,有可能会导致原本运行正常的职责P2功能发生故障。也就是说职责P1和P2被耦合在了 起 开放封闭原则(OCP) 既开放又封闭,对扩展是开放的,对更改是封闭的! 里氏替换原则(LSP 子类可以替换父类并且出现在父类能够岀现的任何地方 依赖倒置原则(D|P) 面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这 就会导致模块的复用性降低而且大大提高了开发的成本。 所以D原则就是要逆转这种依赖关系,让高层模埉不要依赖低层模块,所以称之为依赖倒置 原则! 接口隔离原则(sP 这个原则的意思是:使用多个专门的接口比使用单个接口要好的多 5、抽象类 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明, 而没有具体的实现。抽象方法的声明格式为 1 abstract void fun () 抽象方法必须用 abst ract关键字进行修饰,而且不能有大括号。如果一个类含有抽象方 法,则称这个类为抽象类,抽象类必须在类前用 abstract关键字修饰。因为抽象类中含有无具 体实现的方法,所以不能用抽象类创建对象。 下面要注意一个问题:在《Java编程思想》一书中,将抽象类定义为“包含抽象方法的 类”,但是后面发现如果一个类不包含抽象方法,只是用 abstract修饰的话也是抽象类。也就 是说抽象类不一定必须含有抽象方法。个人觉得这个属于钻牛角尖的问题吧,因为如果一个抽 象类不包含任何抽象方法,为何还要设计为抽象类?所以暂且记住这个概念吧,不必去深究为 什么。 Public] abstract class className i abstract void fun( 从这里可以看出,抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承 它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它 的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那 么就可以将这个方法声明为 abstract方法,此时这个类也就成为 abst ract类了。 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类 样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别 1.抽象方法必须为 public或者 protected(因为如果为 private,则不能被子类继承,子类便 无法实现该方法),缺省情况下默认为 public。 2.抽象类不能用来创建对象; 3.如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类 的抽象方法,那么子类也是一个抽象类。 在其他方面,抽象类和普通的类并没有区别。 6、接口 接口,英文称作 interface,在软件工程中,接口泛指供别人调用的方法或者函数。从这 里,我们可以体会到Java语言设计者的初衷,它是对行为的抽象。在Java中,定一个接囗的 形式如下 1 [public] interface InterfaceName t 接口中可以含有变量和方法。但是要注意 1.变量会被隐式地指定为 public st at ic fnal变量(并且只能是 public stat ic final变量,用 private修饰会报编译错误 2.方法会被隐式地指定为 public abstract方法且只能是 public abstract方法(用其他关键 字,比如ρ rivate、 protected、 static、fna等修饰会报编译错误) 3.接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这 里可以隐约看岀接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽 象”,并且一般情况下不在接口中定义变量。 要让一个类遵循某组特地的接口需要使用 implement s关键字,具体格式如下 1 class ClassName implements Interfacel, Inter face2,[....]0 可以看岀,允许一个类遵循多个特定的接口。如果一个非抽象类遵循了某个接口,就必须 实现该接口中的所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。 接口和抽象类的区别: 1.抽象类可以提供成员方法的实现细节,而接口中只能存在 public abstract方法; 2.抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public stat ic final类 型的 3.抽象类可以有静态代码块和静态方法,而接口中不能含有静态代码块以及静态方法; 4.一个类只能继承一个抽象类,而一个类却可以实现多个接口。 7、内部类 为什么要使用内部类: java中的内部类和接口加在一起,可以的解决常被C++程序员抱怨java中存在的一个问题 一没有多继承。实际上,C++的多继承设计起来很复杂,而java通过内部类加上接口,可以 很好的实现多继承的效果。 内部类的特点 1.内部类仍然是一个独立的类,在编译之后內部类会被编译成独立的cass文件,但是前 面冠以外部类的类名和$符号 2.内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部 类的静态成员变量。 3.内部类可以很好的实现隐藏,一般的非内部类,是不允许有 private与 protected权限 的,但内部类可以 4.内部类拥有外围类的所有元素的访问权限, private也可以,外部类不能直接访问内部类的 的成员,但可以通过内部类对象来访问 四种内部类 成员内部类 即在一个类中直接定义的内部类,成员内部类与普通的成员没什么区别,可以与普通成 员一样进行修饰和限制。成员内部类不能含有 st at ic的变量和方法 public class Outer t private int 1 public Outer(int i)t this,i =1 private class PrivateInner t public void printI(i System. out. println(i) 1 13 public static void main(String[] args) Outerouter new Outer(o) Outer. PublicInner publicInner outer new PublicInner(; publicInner. printIo; 18 局部内部类 在方法中定义的内部类称为局部內部类。 public static void main(Stringl] args) final int i =0: class a public void print() System. out. println("AAA,i=+i) A new A() printo: 14 注意 1.局部内部类没有访问修饰符( public这些) 2.局部内部类要访问外部的变量或者对象,该变量或对象的引用必须是用fna修饰的 3.局部内部类只能在方法中实例化 静态内部类(嵌套类) 如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为 st at ig 1.要创建嵌套类的对象,并不需要其外围类的对象。 2.不能从嵌套类的对象中访问非静态的外围类对象。 1 public class Outer[ ivate static final int i =1 blic static class staticIr public void notstaticPrint() i 5 System.out. println("Outer. staticInner notstaticPrint(,i="+ i); public static void staticPrint()t System. out. println ("Outer. staticInner staticPrint()"); 11 public static void main(String[ args)i 13 Outer. staticInner os= new Outer. staticInner(); oS. notstaticPrinto Outer. staticInner. staticPrinto; 匿名内部类 简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使用匿名內部类,如果满足下 面的一些条件,使用匿名内部类是比较合适的 1.只用到类的一个实例。 2.类在定义后马上用到。 3.类非常小(SUN推荐是在4行代码以下) 给类命名并不会导致你的代码更容易被理解,在使用匿名内部类时,要记住以下几个原 1.匿名内部类不能有构造方法。 2.匿名内部类不能定义任何静态成员、方法和类。 3.匿名内部类不能是 public, protect ed, private, stat ic。 4.只能创建匿名内部类的一个实例。 5.一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 因为匿名内部类也是局部内部类,所以局部内部类的所有限制都对其生效。 1 public static void main(String[] args)throws InterruptedException t final ThreadDomain44 td- new ThreadDomain44(); Runnable runnable new Runnable I public void run () t d testMethod o Thread[] threads new Thread[10]i for (int i =0;1<10; i++) threads [i]= new Thread (runnable);

...展开详情
试读 57P JAVA知识点总结.pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 分享宗师

    成功上传21个资源即可获取
关注 私信
上传资源赚积分or赚钱
最新推荐
JAVA知识点总结.pdf 10积分/C币 立即下载
1/57
JAVA知识点总结.pdf第1页
JAVA知识点总结.pdf第2页
JAVA知识点总结.pdf第3页
JAVA知识点总结.pdf第4页
JAVA知识点总结.pdf第5页
JAVA知识点总结.pdf第6页
JAVA知识点总结.pdf第7页
JAVA知识点总结.pdf第8页
JAVA知识点总结.pdf第9页
JAVA知识点总结.pdf第10页
JAVA知识点总结.pdf第11页
JAVA知识点总结.pdf第12页

试读结束, 可继续读6页

10积分/C币 立即下载 >