Java Learning(6) -- 继承Tips

自动打包 && 自动拆包

  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 classClass c1 = Class.forName("test");//get constructorConstructor[] constructors = c1.getDeclaredConstructors();//get con‘s return type:String modifier = Modifier.toString(con.getModifiers());//get constructor con‘s parameters‘ typeClass[] paratypes =  con.getParameterTypes();//get MethodMethod[] 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 fieldsClass 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等;不要过多的使用反射(因为反射机制的使用只有在运行过程中才会出现错误信息)。

时间: 2024-09-30 06:33:38

Java Learning(6) -- 继承Tips的相关文章

JAVA中的继承

1.什么是继承 基于一个已存在的类,创建一个新的类.已存在的类即父类,新的类即子类,继承就是子类继承并拥有父类的属性和方法,同时,子类还有拥有父类所不具有的属性和方法. 父类,也称为基类.超类(superclass):子类,也称为派生类. 2.JAVA中"继承"的特点 JAVA中一个类只能继承一个父类.不像C++等语言那样,可以继承多个类.这也是JAVA比较容易学的一方面 只能继承父类中非private成员属性和方法,private是父类所特有的不能继承 3.JAVA中的"继

java中子类继承

[[email protected] java]# vim Ostrich.java //注意文件名必须是这个,因为下面代码中只有Ostrich是public修饰符.我们要明白public的含义 class Bird { public void Fly() { System.out.println("I am bird I can fly"); } } public class Ostrich extends Bird { public void Fly() { System.out.

Java中的继承、封装、多态的理解

Java中的继承.封装.多态 继承的理解: 1.继承是面向对象的三大特征之一,也是实现代码复用的重要手段.Java的继承具有单继承的特点,每个子类只有一个直接父类. 2.Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类(有的也称其为基类.超类),父类和子类的关系,是一种一般和特殊的关系.就像是水果和苹果的关系,苹果继承了水果,苹果是水果的子类,水果是苹果的父类,则苹果是一种特殊的水果. 3.Java使用extends作为继承的关键字,extends关键字在

Java面向对象的继承

继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有属性和方法,private的除外,优点就是可以提高代码的复用性,简单的继承实例如下: 1 public class Dog extends Animal { 2 //Dog类继承了Animal类中的所有非私有的属性和方法,可以直接使用了 3 } 使用继承还是挺简单的 方法重写 如果子类对继承父类的方

黑马程序员——java基础--面向对象--继承

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 继承: 1.当一个类中包含了另一个类的所有变量个方法时,但另一个类中不包含另一个类的所有变量和方法时,表示范围比较小的就可以作为另一个的父类. 集合表示:A属于B,B不属于A,A就可以作为B的父类,B继承A 2.当只是为了获取其他类的功能的时候,不能为了简化代码而继承. 3.必须是类与类之间的所属关系才可以继承,所属关系看前面集合 继承的特点: 1.不支持多继承,只支持单继承: 多继承的话容易

Java面向对象之继承

Java 中的继承规则: 1.子类继承父类所有的成员变量和成员方法,但是不能继承父类的构造方法. 2.子类虽然继承了父类的成员变量,但是子类不能直接访问父类的私有变量,可以通过getter/setter()方法进行访问 3.子类对父类构造函数的调用规则: a.子类的构造方法首先必须调用父类的构造方法. b.如果没有显示指定,子类的构造方法会默认的调用父类中的无参构造方法, 1 public class Animal { 2 public Animal() { 3 System.out.print

浅谈Java中类的继承

继承作为面向对象的三大基本特征之一,也是Java中必不可少的组成部分.因此,Java中类的继承和其他面向对象语言的继承都是大同小异的. 继承的优点: 通过继承可以简化类的定义. Java只支持单继承,不允许多重继承. 可以有多承继承,即一个类可以继承某个类的子类,如类B继承了类A,类C又继承了类B,那么C也间接的继承了A. 子类继承所有父类的成员变量和成员方法,但不继承父类的构造方法.在子类的构造方法中,可使用语句super(参数列表)调用父类的构造方法. 如果子类的构造方法中没有显性的调用父类

再谈Java中类的继承

上篇博客谈到了Java中类的继承,但是那些远远不能满足我们在实际操作中的需要,那么怎么才能让子类的功能更强大,并且具有父类的属性呢? 一: 父类 1 public class A { 2 3 final String name="A"; 4 5 void A1(){}; 6 } 子类 1 public class AA extends A{ 2 3 String name="AA"; 4 5 void AA1(){}; 6 7 public static void

Java线程示例 - 继承Thread类和实现Runnable接口

进程(Process)和线程(Thread)是程序运行的两个基本单元.Java并发编程更多的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包含多个进程.Java运行时环境就是一个单独的进程,在它内部还包含了作为进程的各种类和程序. 线程 可以将线程看做轻量级的进程.线程存在于进程当中,需要的资源开销较小.同一进程中的线程共享进程的资源. Java多线程 每一个Java引用都只要有一个线程 - 主线程(main thread).虽然后台还运行着许