WEB开发网
开发学院WEB开发Jsp Scjp笔记 阅读

Scjp笔记

 2008-01-05 18:18:15 来源:WEB开发网   
核心提示:注:*表示0或多个;+表示1个或多个Object-Oriented PRogramming1.ConstrUCtor 没有返回值假如只定义一个带参数的constructor,则lose缺省的无参数的constructor,new xx()会出错,Scjp笔记,2.Source file layout:定义顺序:Pack

  注:*表示0或多个;+表示1个或多个
  Object-Oriented PRogramming
  1.ConstrUCtor
  没有返回值
  假如只定义一个带参数的constructor,则lose缺省的无参数的constructor,new xx()会出错。
  2.Source file layout:
  定义顺序:Package – >import –> class declaration
  一个文件至少应该有一个class,只能有一个public class,文件名必须要和public class的名称一致,假如没有public class,对文件名没有限制。
  
  3.Package:
  假如文件中没声明Package,则class属于缺省包,即没有名字的包
  
  Identifiers,KeyWords,and Type
  1.Identifiers:
  开头以Unicode letter,”_”和”$”。后面可以跟数字;(中文变量,方法名居然都可以!!!牛)
  大小写敏感;
  没有长度限制。
  
  Warning:
  类名必须是ASCII的字母。因为很多文件系统不支持UNICODE.(不过我试了一下,类名是中文的,Compile的时候是可以通过,Runtime时throw java.lang.NoClassDefFoundError)
  
  2.Keywords:
  几个 很生僻的Keywords:
  transient,strictfp,volatile
  
  没有goto和const;没有sizeof()。
  
  4.Basic Java Type:
  共8种。
  Boolean和integer Type之间不能转化。
  
  5.Integral:
  Byte:8bit -2的7次方~2的7次方-1
  short:16bit
  int:32bit
  long:64bit
  
  6.Floating point
  float:32bit
  double:64bit
  
  浮点形默认是double.
  float a = 1.02 //compile error
  float a = 1.02f or float a = 1.02F //correct
  
  7.类型的取值范围
  Data TypeSize (bits)Initial ValueMin ValueMax Value
  boolean1false falsetrue
  Byte80-128 (-27)127 (27 – 1)
  Short160-215 215 - 1
  Char16‘\u0000’‘\u0000’ (0)‘\uFFFF’ (216 – 1)
  Int320-231 231 - 1
  Long640L-263 263 - 1
  Float320.0F1.4E-453.4028235E38
  Double640.04.9E-3241.7976931348623157E308
  
  8.Assignment of Reference Type
  基本类型的赋值是值的赋值;int x =6; int y = x;相当于复制x的内容到y上。
  对象的赋值不会赋值内容,两个对象的指针都是指向同一个object..
  
  9.Pass by Value
  Pass argument by Value. 当方法的参数是对象的引用时,参数的值是对象的地址,对象是可以在参数调用时改变的。
  Public class test{
  Public static void changeObject(MyDate ref){
  Ref = new MyDate(1,2,2002);
  }
  public static void main(String[] arv){
  MyDate d = new MyDate(3,3,1988);
  ChangeObject(d);
  }
  }
  结果是d还是为1988,3,3;因为对象的地址是不变的。
  
  10.Java Coding Convention(编码惯例)
  Package – 名词且小写
  Class--名词且第一个字母大写
  Interface—同Class
  Methods-动词且第一个字母小写,分隔词第一个字母大写,不用”-“
  Variable—第一个字母小写,不用”_”,”$”(对于inner class有意义)
  Constants—大写并用”_”
  
  EXPression and Flow Control
  1.
  Local variables—Variable defined in method
  Instance variables—Variable defined outside method
  
  Instance variable initialize:
  byte,short,int,long,float,double:0
  boolean:false
  char:’\u0000’
  all reference type:null
  
  
  
  2.Bitwise logic Operators
  位逻辑运算符作用于整形。(byte,char,short,int,long)
  
  3.>>
  右移是把第一个操作数/2的第二个操作数次方
  e.g
  128>>4 returns 128/(2的4次方)
  
  4.优先级
  助记词 运算符类型 运算符
  UlcerUnary+ - ++ – [[ rest...]],()cast
  AddictsArithmetic (and shift)* / % + - << >>
  ReallyRelational> < >= <= == !=
  LikeLogical (and bitwise)&& & ^
  CConditional (ternary)A > B ? X : Y
  A LotAssignment= (and compound assignment like *=)
  
  Note:
  对于int,其实是右移右操作数的求32的模;对于long,其实是右移右操作数的求64的模
  int y = x >> 32 ,y没有改变,而不是0.(我试了一下,byte和short分别右移8和16,结果都为0)
  
  4.>>>
  11000>>2 returns 11110
  11000>>>2 returns 00110
  
  Note:
  >>>只对int,long有效。假如对于byte和short,在>>>之前先promote成int,右移完再折回byte或short,这样,通常unsigned shift becomes signed shift
  
  5.<<
  128<<4 returns 128*(2的四次方)
  
  6.+
  short x =5;
  short y=6;
  short z=x+y;//compile error
  因为+的结果最小起码是int
  
  7.cast
  
  
  7.if()要求的是一个boolean表达式
  if(x) //int x cause error
  use if(x!=0)
  
  8.switch(exp1)
  exp1必须是和int兼容,(byte,short,int,char)
  float,long,和类指针(String)都不答应。
  
  9.label:statement
  statement必须是循环(break 还可以是switch)
  
  
  Array:
  1.初始化
  s = new char[5] //initialize for ‘\u0000’
  
  2.多维数组的定义
  int [][] a = new int [2][];
  a[0] = new int[4];
  a[1] = new int[6];
  
  System.out.println(a.length);
  System.out.println(a[0].length);
  
  Result:
  2
  4
  
  3.数组的复制
   int a[]={1,2,3};
   int b[]={4,5,6,7,8,9};
   System.arraycopy(a,0,b,0,a.length);
  
  Result:
  b[]={1,2,3,7,8,9}
  Note:
  System.arraycopy拷贝的是引用,而不是Object.(我试了,假如是基本类型的数组,用arraycopy后,修改其中一个数组的值,另一个数组是不变的;假如是对象的数组,则值会改变)
  
  Inheritance
  1.Constructors Are not Inherited
  
  2.instance of 检查对象的类型(类,接口,数组)
  
  3.cast
  Up Cast(parent class = subclass) :直接用=转化
  Downward(subclass = parent class):假如该对象不是要转化的那个对象,则会在Runtime的时候出错。
  
  
  
  4.OverLoading Method
  必须有不同的参数,可以有不同的返回类型
  
  5.Overriding Method
  有相同的函数名,参数类型,和返回值,实现可以不一样。并且子类的方法不能比父类的函数的访问权限小。
  
  6.Super
  在Constructor中假如要调用Super的话应该写在第一行
  Super能指定参数调用父类的Constructor
  假如在Constructor中没有调用Super,则Compiler会隐含调用父类的”default”的Constructor
  假如父类没有定义非私有的“default”的Constructor,则Compile Error
  
  7.构造函数初始化
  1.分配对象的空间,把instance variable设置default value(Boolean->false,Integer,float->0,reference->null)
  2.
  2.1绑定Constructor的参数
  2.2假如有this(),跳到2.5
  2.3递归调用implicit 或explicit的super
  2.4执行instance variable的explict的赋值
  2.5执行当前的Constructor.
  
  7.Constructor的Rule
  在Constructor中调用的函数应为私有函数。
  因为假如超类Employee的Constructor中有公有函数getDetail,类Manager继续Employee,而manager中override此函数getDetail,声明一个manager的对象时会递归调用Employee的Constructor,而因为是runtime check,实际上Emplyee中调用的getDetail是Manager的getDetail。
  
  public class Emploee extends Object {
   private String name;
   private double salary = 15000.00;
   private Date birthDate;
   private String summary;
  
   public Emploee(String n, Date DoB) {
   name = n;
   birthDate = DoB;
   summary = getDetails();
   }
   public Emploee(String n) {
   this(n, null);
   }
  
   private String getDetails() {
   return "Name: " + name + "\nSalary: " + salary
   + "\nBirth Date: " + birthDate;
   }
  
   public static void main(String[] arg)
   {
   Manager m = new Manager("2","gl");
  
   }
  }
  
  
  class Manager extends Emploee {
   private String department;
   public Manager(String n, String d) {
   super(n);
   department = d;
   }
  
   public String getDetails() {
   return "\nDept: " + department;
   }
  
  }
  
  
  8.假如重载equals,最好重载hasCode()
  
  9.toString

Tags:Scjp 笔记

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接