资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1、 类属性、实例属性的区别*没有static修饰的变量称为实例变量,有static修饰的变量称为类变量(或静态变量)*类变量只属于类本身,不属于对象*类变量在整个类中只有一个值2、静态方法(类方法)*一个静态方法只属于一个类本身,而不属于某个类*静态方法和静态变量的 引用直接通过类名引用*在静态方法中不能调用非静态的方法和引用非静态的成员变量,反之则可以可以用类的对象去调用静态的方法3、类成员访问修饰符与访问能力之间的关系*public 无约束*protected 同一类、子类*default 同一类、同一包*private 同一类4、方法的重载(overloding)与重写(overriding或overwriting)l 方法的重写要求方法签名必须相同,而方法的重载要求方法签名必须不同l 方法的重写放回类型必须一致,而方法的重 载则没有要求。l 异常也不会影响重载,而重写子类的异常必须与父类一样或属于父类异常的一种或无l 方法的重写只局限与子类和父类之间,而方法的重载可以在一个类的所有方法之间l 方法的重载对类的修饰没有要求,而方法的重写子类方法的修饰限制一定要比父类的小5、final6、变量的初始化问题*局部变量在定义时必须初始化,如果是方法的形参,则通过调用方法时实参的传递初始化(方法的形参也属于局部变量) *如果是对象的实例变量,则不用必须初始化.系统会默认地为对象的实例变量赋初值,但这样做只能保证程序编译运行正常,而无实际意义.所以一般对象的实例变量要在构造方法中赋初值(boolean 默认为false;char默认为?)*作为类成员,只能声明时候初始化,否则就要到方法中初始化7、”和null的区别8、super*特殊变量super提供了对父类的访问*可以使用super访问父类被子类隐藏的变量或覆盖的方法*每个子类的构造方法的第一条语句都隐含调用super();如果父类没有这种形式的构造函数,那么在编译时会报错*构造方法不能被继承只通过super调用9、构造方法*如果父类没有无参的构造方法,那么在子类中就必须声明构造方法且不能声明无参构造方法;这样子类中的就必须显式调用父类中的某个构造方法;个人觉得如果有继承关系的一般属性定义为protected,个人觉得bean定义为private,或protected也可以*或者不声明构造方法,如果声明构造方法,通常至少声明两个,其中一个为无参的构造方法*子类的构造的过程中必须调用其基类的构造方法;子类可以在自己的构造方法中使用super调用基类的构造方法;使用this调用本类中的另外的构造方法*this(“”,”,”)这样的形式定义无参构造方法,那么必须有全部成员变量的构造方法10、继承组合【覆盖】*接口可以实现多继承,而类不可以实现多继承*子类不能继承父类的私有属性和方法,且不能继承构造方法 *子类不能继承父类的静态属性和方法,只能被调用*子类不能直接访问从父类的是有属性及方法,但可以使用公有的(及保护)方法进行一般使用getX()得到*什么时候构造方法必须调用例如:有些模式就一定要自己定义构造函数,比如设计模式中的单例模式 也就是这个类只允许一个实例产生 class Singleton private static Singleton instance = null; private Singleton() /定义为私有,只能由内部的getInstance方法调用,确保只能产生一个实例即instance,如果你不定义私有构造函数,那么默认提供的是public,也就不能保证单例了 synchronized public static Singleton getInstance() if (instance = null) instance = new Singleton(); return instance; 11、static*在类中,用static声明的成员变量为 静态变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份*用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递为它,所以在static方法中不可访问非static的成员静态方法不再是针对某个对象调用,所以不能访问非静态成员*可以通过对象引用或类名(不需要实例化)访问静态成员*静态方法不能调用非静态的属性或方法【因为局部不代表全部】*类成员只有在new一个对象的时候才存在static方法不需要new对象就可以调用,那么在static方法里面怎么可以使用一个还不存在的成员呢?!*并发和静态不是很相关 多个人对同一个东西的使用肯定有并发问题 有没有并发关键看你怎么设计你的数据层 方法就是一段程序,什么程序都是消耗内存的。 静态变量常驻内存,说他消耗也可以 静态方法通常比非静态方法快 静态方法多为工具方法,就是说静态方法不引用外部资源所以编译更快。 所有操作数据库的方法 这句话不是很明白 操作数据库简单的就是,查询,插入删除, 这些方法需要数据库链接,楼主是想维护静态连接池呢还是不停打开链接呢 不推荐使用静态方法作数据库操作,因为数据库方法带有延伸性。 就是说一般静态方法都是得到数据,计算,返回数据 而数据库方法则是,得到数据,发到数据库,得到返回结果,返回数据。 直觉上就跟静态方法的名字冲突。不够清晰 隐藏与覆盖/ 所谓隐藏是指,子类能隐藏父类的变量和方法,通过子类对象,不能访问父类被隐藏了的变量和方法,/ 但是将子类对象转换成父类对象时,可以访问父类中被隐藏的变量和方法/ 而覆盖则指,子类能覆盖父类的方法,通过子类对象,不能访问父类被覆盖了的方法/ 将子类转换成父类对象时,也不能访问父类中被隐藏的方法。/ 方法可以被隐藏和覆盖,但是变量只可能被隐藏,不会被覆盖12、多态*多态存在的必要条件1,要有继承2,要有重写3,父类引用指向子类对象属性沒有多态性,只有方法才有多态性*当我们将子类对象引用传给声明为父类对象,如果子类有的方法就调用子类的方法,否则调用父类的方法静态方法?*静态方法,即是什么的引用就调用什么方法*方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。13、final*final的变量的值不能被改变 final的成员变量 final的局部变量(形参)*final的方法不能被重写,程序运行速度快*final的类不能被继承final存在的理由:1、安全方面2、设计方面:从面向对象设计方便,如希望声明的类为最终类,则最好或从概念将该类不应该有任何派生类14、自定义异常Public class MyExceptionName extends SuperclassOfMyExceptionPublic MyExceptionName()super(“”);15、抽象类*用abstract 关键字来修饰一个类时,这个类叫做抽象类;*用abstract来修饰一个方法时,该方法叫做抽象方法*含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写*抽象类中也可以有非抽象的方法,也可以没有抽象方法*抽象类不能被实例化 即是不能有 new*抽象方法只需声明,而不要实现*不能有抽象构造函数或抽象静态方法*抽象类可以实现接口不需要实现里面的方法16、引用对象数组*引用对象数组一定要初始化*元素为引用数据类型数组中的每一个元素都需要实例化*引用对象占用两块内存17、包的使用*当导入一个包中的所有类,则需内存存储类的名字,占内存的,对于pc机无影响,但对手持设备不然*基本数据类型及数据包裹类*提供线程操作和管理的类是Tread类*valueOf()比Integer.parseInt()通用,后面只包括Integer,Float,Double,Long,Byte,Short18、Interface*java允许省略声明数据成员的final,方法的public及abstract关键字*接口也可以继承(称为接口的扩展),并且可以继承多个接口;但不可以实现*类的继承与接口继承的区别19、面向对象的设计原则*开闭原则*接口隔离原则20、塑型*基本数据类型的塑型(强制转换不会四舍五入(int)2.6结果是2)*对象的塑型:方法的查找(类方法,实例方法)21、内部类class Meal Meal() System.out.println(Meal();class Bread Bread() System.out.println(Bread();class Cheese Cheese() System.out.println(Cheese();class Lettuce Lettuce() System.out.println(Lettuce();class Lunch extends Meal Lunch() System.out.println(Lunch();class PortableLunch extends Lunch PortableLunch() System.out.println(ProtableLunch();public class Sandwich extends PortableLunch Sandwich() System.out.println(SandWich();Bread bread = new Bread();Cheese cheese = new Cheese();Lettuce ley6ttuce = new Lettuce();public static void main(String args) Sandwich sandwich = new Sandwich();Sandwich.cheese.getName();结果:Meal()Lunch()ProtableLunch()Bread()Cheese()Lettuce()SandWich()从上面的例子可以看出创建一个派生类,构造方法的调用次序为:基类构造方法;成员变量的初始化;派生类构造方法。*调用基类的构造方法*按声明顺序调用成员初始化模块*调用派生类构造方法22、构造方法中的多态方法abstract class Glyph abstract void draw();Glyph() System.out.println(Glyph() before draw();dr
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号