`
darknight512
  • 浏览: 142303 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SCJP学习笔记之草稿篇

阅读更多
  • 子类继承服类的所有成员方法与变量,但不继承构造方法。在构造方法中用super(param ...)调用父类构造方法,如果不调用父类构造方法,默认调用父类无参数的构造函数,相当于super()。如果服类没有定义无参数的构造函数,又有其他的构造函数,就会造成编译错误。
  • 抽象类不能够实例化,其子类只有覆盖了所有的abstract方法才能实例化。
  • 接口中的变量默认都是public static的,而不用自己去特别申明
  • 抽象类可以部分实现接口中的方法,而接口则可以extends接口
  • 继承中如果重写方法,则默认使用基类中的方法,而基类中的方法只认基类的数据,如果要使用子类数据,就要重写方法
  • null参数即可满足Object,又可满足String,而重载是对原有方法的替换,且String是Object的子类,故会调用更具体,有针对性的method(String s)
  • 子类可自动转换为父类,打个比方:所有男人都是人,而父类要经过强制转换才能变为子类,就像人不一定都是男人
  • 对于函数,成员的访问权限,默认类型只有同包级成员可以访问,不可以跨包访问,而protect类型可以跨包访问,前提是有继承关系
  • 我们所说的is-a关系,是指一个类继承另一个类
  • 我们所说的has-a,一个类是另一个类的属性
  • 对于构造函数,其前面的访问修饰符只能是public,private或者protected
  • 同一个类中的constructor可以互相调用,使用this(....),但是this一定要在constructor的第一行,而且一个constructor不可以调用自身,不然会出现编译错误。super()也要写在第一行,故一个constructor中不能同时有this和super调用。
  • 在构造函数中可以用new创造新对象
  • static方法可以被重载为非static态方法
  • 重写的方法访问控制符不可以变宽,比如:public可以变为private,而反之不行
  • static方法如被重写,则只能重写为static方法
  • 重写方法抛出异常只能是被重写方法抛出异常的子类,或一样,或不抛出异常
  • 重写的方法只能访问其直接父类,而不能跨级访问
  • =是类的浅复制,改变的只是引用,而makeCopy是深复制,改变的是值
  • 实例方法不可以覆盖static方法,而静态字段隐藏则没有这种限制,静态方法如果满足覆盖的具体需求,则可以隐藏,否则会编译错误
  • 被隐藏的字段如果是static的,则可以用super引用来访问,也可以直接用超类名来访问
  • 利用引用对一个对象调用实例方法时,是该引用所代表当前对象的类决定将执行哪种方法实现,而不是引用的类型决定。
  • 在用引用访问对象字段时,是引用的类型,而不是引用所代表的当前对象的类决定了访问哪一个字段
  • 静态方法也由引用所隶属的类决定
内部类:
  • 方法体内的内部类只能在方法体内实例化,且生命周期也在方法体内
  • 内部类的文件名方式是"封装类$内部类.class",而匿名类则会由系统声称数字为类名
  • 非静态内部类其内部树型不应该声明为static
  • 方法体内部定义的类只能访问方法中final局部变量(为何,至今还有疑惑)
  • 方法体内部定义的类不可以有任何的访问修饰符,相当于局部变量。其也不可以用static修饰
  • 匿名内部类可以实现interface与extends,但是不可以同时使用
  • 匿名内部类不可以有构造函数
  • 匿名北部类默认是final的,不可以被abstract与static修饰
  • 如果一个类的默认无参数的constructor被设为private的,而其子类如要正常使用,这个类中一定要有重载的非private constructor,而且子类中要显式的对其调用
  • 内部类不可以与外部类同名
  • 与源文件同名的类其访问权限一定是public的

  • 如果类默认构造函数抛出一异常,子类的默认constructor应处理由父类抛出的异常(可以抛出相同,或范围更大的exception)
  • 类的初始化顺序中先初始化static对象,再是non-static
  • 非静态内部类是附属于类实例的,所以其内部属性不应该声明为static
  • 实例method不能重写为static method,但是可以被重载为static method,而类的属性则毫无限制
  • 父类中的某method如果为private,而子类中的同名method则完全是另一个method,而非重写!
  • this是当前创建对象的句柄,不能在静态方法中使用
  • 当类型后跟着[ ]记号时,声明中的所有变量均为数组,否则每个数组名后应加[],eg: int [ ] a,b;     int  a[ ], b[ ];
  • JAVA可以构造含0个元素的数组,但是要切记,数组是对象
  • 数组初始化时可以" , "结尾。eg: int a[ ]={1,2,}和int a[ ]={1,2}等价
  • 匿名数组的创建  eg: new int[ ] {3,4,5}
  • 非法的数组初始化   int[ ] a;  a={1,2,3}
  • length是数组最后一个元素的下标,为final 型,而非函数。所以数组大小为array.length非array.length()
  • return语句中的一个陷阱
           
java 代码
 
  1. if(true)  
  2.    return XX;  
  3. else  
  4.    return X;//这样可以编译通过  
  5.   
  6. //////////////////////////////////////////////////////////////////////  
  7.   
  8. if(true)  
  9.    return;//这样无法通过编译  
  10.   
  11. //而且  
  12.   
  13. if(true)  
  14.    return;  
  15. else if(!true)  
  16.    return;  
  17. //同样无法通过编译  
  18. //因为编译起能判断的方式只能是 if XXXXX;  else XXXXX;  

  • this引用是不可改变的
  • 包声明只能有一句,且出现在文件的第一句,如果没有包声明,则这个编译单元中所有对应的Byte Code将隶属于一个未命名包,此包一般等同于宿主当前工作目录
  • native在类中只规定了方法原型,可以按如下方式使用(只有method可以声明为native
    java 代码
    1. static{  
    2.    System.loadLibrary("someLib");  
    3.    native void nativeMethod();  
  • native原型还可以抛出异常
  • 如果lib没有装载成功,则会抛出UnsatisfiedLinkError
  • transient关键字用于对属性的声明,当对一个对象序列化时就不需要含有此字段的当前值,而无transient字段的属性,其值会作为序化对象状态的一部分,虽然static属性也可以加transient,但是多余的。因为static属性不属于对象的状态(属于类),且transient只能用于类变量。
  • volatile,编译好的源代码会将字段值优化到缓冲区,这会导致不可预见的错误,而用了volatile则不会优化,确保了并发访问的总是主字段内存中的当前值
  • 即使一个类中没有abstract方法,这个类仍然可以定义为abstact类
  • 静态方法中无隐含的对象引用this,当其中有实例化的对象,则可以访问此实例的非static成员
  • 只有方法与代码块才可以被声明为synchronized,而变量就不行
  • 源文件一定要遵循package, import, class的顺序
  • 如果引入的不同包中有类名相同,会有编译错误,除非在引用时写全路径
  • 注释可以出现在源文己的任何一行
  • 顶层类只可以用public修饰,static不能修饰顶层类
  • 标识符只能以字母,$,_开头
  • char属于整数型,但是无符号
  • Java中所有的参数都为传值传递,如参数为一个对象,则传递进的是该对象内存空间的引用。而引用类型是将引用拷贝给形参,所以方法中绝不可能改变原引用变量的引用,但却可以改变引用变量的属性
  • 两种等效的通知垃圾回收的机制:System.gc()与Runtime.getRuntime().gc(),此两种方法只能激活垃圾回收,但不能保证一定实施
  • main函数可以不用public修饰,这样可以通过编译,但是无法执行
  • 抽象类可以有构造函数,起用法是在子类中调用
  • 方法中的局部变量不可被声明为static,静态方法的调用是在编译时绑定的
  • 静态代码块只在首次装载时被执行一次(即首次声称实例)
  • 只要对象可以被任何存活线程访问,则不适合GC。而且一个已成为gc目标的对象,可以消除这种适合性。当对象的finalize()方法创建了一个指向该对象的可达引用时,就会消除适合性。
  • 所有类都从Object继承了一个protected void finalize() throws Throwable的方法,在gc调用此方法时,会忽略任何异常,然而在其他情况下调用finalize会处理异常,finalize可被重载,但只有原始签名的方法才会被gc调用
  • 数组的索引可以是 byte, int ,short
  • 访问修饰符与static一定要在返回类型之前eg : public void static是非法的
  • 返回值只要可隐式转换为所声明的返回类型,即是合法的。eg:当返回类型声明为int时,返回short也是可以的
  • 对象type(不是引用变量的type)决定了运行时使用哪个重写的方法,而引用类型决定在编译时使用哪个重载方法
  • 对具有interface返回类型的方法,可以返回该接口的任何实现
  • 对象array能存放其声明类型  instanceof测试的任何对象
  • 第一次class加载时会运行一次static块,当创建new instance时会运行实例的block,它们的运行都发生父constructor之后以及constructor代码运行之前

Generic(范型)
  • 范型的分类信息是用在编译期间来执行类型检查的,但是在运行时就被舍弃了。所以对于JVM而言:
  • java 代码
    1. List<String> st=new LinkedList<String>();  
    2. //在运行时会变为  
    3. List st=new LinkedList();  
    4. //分类信息会向后兼容,eg  
    5. List a=new ArrayList<Integer>();  
  • 在Generic中可以用"?"表通配,eg: List<?> list,但compiler会因为无法check以确保type-safe,所以List<?>会拒绝所有的add(),addAll()与set()所做的任何调用

Enumerated Type(枚举)
  • 所有的enumerated type都隐含的extend   java.lang.Enum,Enum中每个被声明的值是enum class自己的instance,这样保证了type safe,而且enum是不可以改变,不可以被subclass的
  • 对enum的改写:Enum实现了toString(),其会返回某值的名称,而valueOf()方法会返回XX.value,所以toString与valueOf要同时改变

  • Set除了在collection中定义的method外,并无其他扩展
  • 对于Wrapper,如其String参数不能被分析为合适的primitive,则会抛出NumberFormatException
  • 除了Character外,所有Wrapper类都提供两种constructor,一个是primitive,一个是String类型
  • valueOf方法   eg:   Integer it=Integer.valueOf("10101",2)注:后一个2是radix,基数
  • 一般而言,valueOf把String转为Wrapper类,而parseXXX把String转为primitive
  • Integer与long具有带基数的toString(String, radix)方法,以及转为任意技术显示的方法 toXXXString,eg:toHexString
  • 在Wrapper中有一个奇异的处理,为了节省内存,对下列包装器对象的两个instance,当它们基本值相同时,它们总是==的:Boolean, Byte, \u0000~\u007f的Character,-128~127的Integer
  • 在重载中,如果没有匹配的类型,参数被隐式加宽,且优先级必定是   加宽-》装箱-》var-arg,原则上是JAVA尽可能保证原有代码的健壮
  • 引用类型之间也可以加宽,但Wrapper间由于相互平等,故不存在加宽,可以先装箱,后加宽,但反之不行
  • Garbage Collection中的隔离一引用:有些对象间存在相互引用,但对它们的其他引用都被删除了,即任何活线程都无法访问这些对象,则gc会查找这样的对象岛,并删除它们。
分享到:
评论

相关推荐

    SCJP学习笔记.doc

    以下是从给定的学习笔记中提炼出的一些关键知识点: 1. **java.util.Properties的使用** `Properties` 类是Java中用于处理配置文件的关键工具,它继承自`Hashtable`。在示例中,`Properties` 对象`pp`加载了名为...

    SCJP学习笔记.doc文档

    SCJP,全称为Sun Certified Programmer for the ...这些是SCJP学习笔记中涵盖的一些核心概念,理解并掌握它们对于准备SCJP考试和日常Java编程非常重要。在实际应用中,还需要结合更多实践和深入学习来巩固这些知识。

    scjp学习笔记

    2分 scjp学习笔记

    java程序员认证 SCJP学习笔记

    根据提供的文件信息,我们可以整理出一系列关于SCJP(Sun Certified Programmer for the Java Platform)认证考试中的关键知识点。这些知识点覆盖了Java语言的基础概念、数据类型、面向对象编程原则、异常处理等多个...

    scjp考试学习笔记

    SCJP(Sun Certified Programmer for the Java 2 Platform, ...以上是SCJP学习笔记中涉及的一些核心概念,理解并熟练掌握这些知识点对于准备SCJP考试至关重要。深入理解和实践这些内容将有助于提升Java编程能力。

    SCJP学习笔记

    以下是从提供的学习笔记中提取的一些关键知识点: 1. **八进制和十六进制表示**: - 八进制数以0开头,如010表示的是十进制的8。 - 十六进制数以0x或0X开头,例如0x10表示十进制的16。 2. **参数传递**: - ...

    SCJP考题_学习笔记

    2. **学习笔记**: "scjp_amay's notes for 1.4.doc"可能是一位名叫Amay的学习者针对Java 1.4版本的SCJP考试整理的笔记,这个版本可能包含对当时Java语言特性的详细解析,例如原始类型、字符串常量池、异常处理机制等...

    SCJP复习笔记分享

    ### SCJP复习笔记知识点解析 #### 一、八进制与十六进制表示法 - **八进制**: 在Java中,八进制数是以数字`0`开头的数(而不是字母`o`)。例如,`010`表示的是八进制数,其对应的十进制值为`8`。 - **十六进制**: ...

    SCJP学习指南英文版翻译笔记

    本人在学习SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055)过程中,对里面的每一个目标进行了翻译总结,希望能给英文不是很好的人提供一些帮助,前几章很简单,所以就统计了后五章

    SCJP考试的学习笔记

    ### SCJP考试学习笔记知识点详解 #### 基本数据类型及运算特性 - **浮点数运算**:在Java中,当进行浮点数除法运算时,如果分母为0,则根据分子的正负性,结果分别为`Infinity`(正无穷大)或`-Infinity`(负无穷...

    scjp学习指南,针对Java程序员的书

    《SCJP学习指南:深入解析Java程序员认证》 SCJP(Sun Certified Programmer for the Java Platform)是Sun Microsystems(现已被Oracle收购)推出的一项Java程序员认证考试,旨在验证开发者对Java编程语言的基础...

    SUN SCJP 认证笔记

    这份《SUN SCJP认证笔记》包含了上述各个领域的重点内容,通过阅读和学习,考生可以全面了解和掌握SCJP考试的核心知识点。文档如"amay's2.doc"、"JavaCertificationStudyNotes.doc"、"amay's notes for 1.4.doc"和...

    SCJP学习指南完整版pdf共18章

    ### SCJP学习指南知识点概述 #### 一、声明与访问控制 (Declarations and Access Control) 本书的第一章重点讲解了声明和访问控制的概念及其在Java中的应用。这些概念对于理解和掌握面向对象编程至关重要。 #####...

    scjp学习指南原版电子书part1

    scjp学习指南原版电子书,分两个部分上传,两部分都下载了放在同一目录下解压! scjp 电子书 part1 sun认证 scjp学习指南原版电子书part1

    scjp 学习指南310-055

    《SCJP学习指南310-055》是一份针对Java程序员认证考试的重要参考资料,SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)是Oracle公司为Java开发人员设立的专业认证,旨在验证候选者对...

    SCJP学习指南javase6

    《SCJP学习指南javase6》是一本针对Java SE 6平台的认证考试(Sun Certified Programmer for Java 6,简称SCJP)的详尽指南。SCJP是Java开发者入门阶段的重要认证,它验证了程序员对Java语言基础和核心概念的理解与...

    scjp学习资料

    文档"310-035 学习笔记 .doc"可能包含了以下关键知识点: 1. **Java语法基础**:这部分可能涵盖了变量、数据类型、运算符、控制流(如if语句、for循环、while循环)、方法定义与调用、类与对象等基础知识。学习者...

    Garfield 的 SCJP 阅读笔记

    Garfield的SCJP阅读笔记主要涵盖了这个认证考试的核心知识点,包括但不限于Java语法、内存管理、类和对象、多线程、异常处理、输入/输出流以及集合框架等内容。 1. **Java语法**:这部分内容会讲解Java的基本语法...

    SCJP学习指南

    《SCJP学习指南》是一本针对Sun Certified Programmer for the Java Platform, Standard Edition (SCJP)认证考试的重要参考资料。这本书深入浅出地介绍了Java编程的基础知识,涵盖了考试的所有关键领域,旨在帮助...

    SCJP学习指南(Exam310-055)附带光盘

    SCJP学习指南(Exam310-055)附带光盘.rarSCJP学习指南(Exam310-055)附带光盘.rarSCJP学习指南(Exam310-055)附带光盘.rarSCJP学习指南(Exam310-055)附带光盘.rarSCJP学习指南(Exam310-055)附带光盘.rarSCJP...

Global site tag (gtag.js) - Google Analytics