码迷,mamicode.com
首页 > 编程语言 > 详细

Java Learning(6) -- 继承Tips

时间:2015-07-20 18:55:09      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

自动打包 && 自动拆包

  sample

    ArrayList<Integer> = new ArrayList<Integer>();

    list.add(3);

    int i = list.get(0);

3会被自动打包成Integer类型,随后被自动拆包为int型。

Tips: 这里处理定长的数组类型,ArrayList的效率要远远低于基础类型数组,因为每次添加元素都要进行打包。打包规范要求char, byte, boolean <=127 或者short, int值介于-128~127之间包装在固定对象中,因此可以实现对象的比较等过程中的自解压。打包拆包是便以其认可的,与虚拟机没关系。

Java实现只修改的方法可以运用org.omg.CORBA中的各种Holder。例如IntHolder等。 e.g. IntHolder X = new IntHolder(); X.value可以获取存储位置的值,修改后所有引用处值变化。

例子:

public static void main(String[] args) {
  // TODO Auto-generated method stub
  String num = "1";
  int x = 2;		
  System.out.println(num+x);
  System.out.println(x+Integer.parseInt(num));
}

Result: 12 和 3.

可变参方法,即参数数量不固定的方法。例如 System.out.printf("%d + %d = %d", n, n, n);

printf方法接受的是两个参数,一个是格式字符串,另一个是Object数组;

定义一个可变惨函数:

private int max(int...values){
  int tempt = 0;
  for(int v : values){
    if (v > tempt)
      tempt = v;
    }
  return tempt;
}

该方法调用的时候可以用茫茫多的参数。

反射:

java.lang.reflect -- Field && Method && Constructor

Modifier 类提供了static 方法和常量,对类和成员访问修饰符进行解码。每一种类型都对应一个常量

//get class
Class c1 = Class.forName("test");
//get constructor
Constructor[] constructors = c1.getDeclaredConstructors();
//get con‘s return type:
String modifier = Modifier.toString(con.getModifiers());
//get constructor con‘s parameters‘ type
Class[] paratypes = con.getParameterTypes();
//get Method
Method[] Methods = c1.getDeclaredMethods();
Method[] Methods2 = c1.getMethods();
for(Method method : Methods)
  method.setAccessible(true);

/get Method met1‘s return type:
Class returnType = met1.getReturnType();
//get fields
Class c1 = Class.forName(c1.constructor(objects[] org).getClass().getName().toString());

c1 c = Class.forName(c1.constructor().getClass().getName().toString()).newInstance(objects[] org);

捕获异常:

try{
   XXXXXXX   
}catch(Exception e){
   YYYYYYYYYY   
}

 枚举类型:

比较两个枚举类型的值可以直接用“==”。

public class Entry {
    
    public static void main(String args[]){
        System.out.println(Size.SMALL.toString());
        System.out.println(Enum.valueOf(Size.class, "SMALL"));
        System.out.println(Size.SMALL.getAbb());
    }
    
    enum Size{
        SMALL("S"), 
        MEDIUM("M"), 
        LARGE("L"), 
        EXTRA_LARGE("XL");
        
        private Size(String abb){
            this.abb = abb;
        }
        
        public String getAbb(){
            return abb;
        }
        
        private String abb;
    }
}

结果:

SMALL
SMALL
S

 继承设计:

公共操作和域放在超类里;不要使用受保护的域;仅当is-a的关系时候使用继承;只有在父类方法是子类方法的子集才能使用继承;子类的方法实现不能完全与继承得来的父类方法不同;使用多态来避免过多的由于作用对象不同带来的if和else等;不要过多的使用反射(因为反射机制的使用只有在运行过程中才会出现错误信息)。

Java Learning(6) -- 继承Tips

标签:

原文地址:http://www.cnblogs.com/flowerencedew/p/4563942.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!