java(20130731)反射、单例模式、内存里分四个区域、实例化过程、对象的销毁、命名规范、异常

来源:互联网 发布:最优化导论中文版 编辑:程序博客网 时间:2024/04/26 08:09

Class类之反射

 

EG:

publicclass Dog {

    //成员变量定义

    String name;

    String age;

        //构造方法

    public Dog() {

        System.out.println("无参数的 Dog construct");

    }

    public Dog(String name) {

        this.name = name;

        System.out.println("一个参数的 Dog construct");

    }

    public Dog(String name,Stringage) {

        this.name = name;

        System.out.println("二个参数的 Dog construct");

    }

    //动作

    publicvoid meth(){

        System.out.println("dog meth"+this.name);

    }

    publicvoid meth1(){

        System.out.println("dog meth1");

    }

    //成员变量的get set方法

    public String getName() {

        returnname;

    }

    publicvoid setName(String name) {

        this.name = name;

    }

    public String getAge() {

        returnage;

    }

    publicvoid setAge(String age) {

        this.age = age;

    }

}


publicstaticvoid main(String[] args) {

        //反射

        try {

            Class class1 = Class.forName("com.etc.classreflection.Dog");//加载此路径的这个类

            Dog dog1 = null;//定义Dog类型变量

            Dog dog2 = null;

            Constructor [] cs = class1.getConstructors();//获取所有构造方法

            for(Constructor c:cs){

                Type [] ts =c.getGenericParameterTypes();//获取构造方法的参数类型列表

                if(ts.length>0){//判断参数类型的个数来确定参数的个数

                    dog1 = (Dog) c.newInstance("dog");//调用只有一个参数类型为String的构造方法

                }else{

                    dog2 = (Dog) c.newInstance();//调用没有参数的构造方法

                }

            }

            System.out.println("dog1.name:"+dog1.getName());

            System.out.println("dog2.name:"+dog2.getName());

 

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

 

 

两种形式获取类的实例(对象):

1.通过Class类的实例获取对象

Eg:

Class class1 = Class.forName("com.etc.classreflection.Dog");//加载此路径的这个类

Dog dog1 = (Dog)class1.newInstance();//第一种方式

 

2.调用类的构造方法获取

dog1 = (Dog) c.newInstance("dog");//调用只有一个参数类型为String的构造方法

dog2 = (Dog)c.newInstance();//调用没有参数的构造方法

 


Date:日期工具类

包路径:java.util.Date;

Calendar:日期工具类

包路径:java.util.Calendar;

SimpleDateFormat:字符串与日期之间转换类

包路径:java.text.SimpleDateFormat;

日期转字符串eg

//      Calendar c5 =Calendar.getInstance();

//      String strdate = sdf.format(c5.getTime());

//      System.out.println(strdate);

字符串转日期Eg

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

String str = "2013-07-31";//字符串转换到日期类型 字符串格式必须与SimpleDateFormat定义格式完全一致

        Date date =sdf.parse(str);

        System.out.println(date.getTime());

 

 

单例模式:

一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

1.定义一个这私有的静态的自己类型的成员变量

2.私有化构造方法

3.提供一个静态的返回值为自己类型的公共方法

饿汉:

publicclass SingetonClassHungry {

    privatestatic SingetonClassHungry sc =null;//1.定义一个这私有的静态的自己类型的成员变量 饿汉式

    private SingetonClassHungry(){}//2.私有化构造方法

    publicstatic SingetonClassHungry getsingletonClass(){//3.提供一个静态的返回值为自己类型的公共方法

        if(sc==null){

            sc =new SingetonClassHungry();

        }

        returnsc;

    }

    publicvoid meth(){

        System.out.println("meth");

    }

}

 

 


饱汉:

publicclass SingetonClassFull {

    privatestatic SingetonClassFull sc =new SingetonClassFull();//饱汉式

    private SingetonClassFull(){}//2.私有化构造方法

    publicstatic SingetonClassFull getsingletonClass(){//3.提供一个静态的返回值为自己类型的公共方法

        returnsc;

    }

    publicvoid meth(){

        System.out.println("meth");

    }

}

 

 

 

内存里分四个区域:

code segment(存放代码)

data segment(字符存放静态变量串常量)

stack(存放局部变量)

heap(存放new出来的对象或者数组)

 

 

实例化过程

先分配空间

构造函数后被实例变量被赋值

方法执行完局部变量消失

引用指向对象

 

 

对象的销毁:

局部变量

实例变量

对象

 

对象销毁时会调用finalize()

程序运行时会开启两个线程 main主线程 Finalizer线程(垃圾回收)

 


规范:

package的命名

package 的名字由全部小写的字母组成,例如:cn.mybole。

class和interface的命名

class和interface的名字由大写字母开头而其他字母都小写的单词组成,例如:Person,RuntimeException。

class变量的命名

变量的名字用一个小写字母开头,后面的单词用大写字母开头,例如:index,currentImage。

 

class方法的命名

 方法的名字用一个小写字母开头,后面的单词用大写字母开头,例如:run(),getBalance()。

static final变量的命名
static final变量的名字所有字母都大写,并且能表示完整含义。例如:PI,PASSWORD。

参数的命名
参数的名字和变量的命名规范一致。

数组的命名
数组应该总是用这样的方式来命名:byte[] buffer。


异常:

异常(Exception)是一种特殊的运行错误,是在程序运行过程中发生、会打断程序正常执行的错误。

Java程序运行过程中所发生的异常事件可分为两类:

错误(Error):JVM系统内部错误、资源耗尽等严重情况(代码无法控制)

违例(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,例如:

对负数开平方根

空指针访问

试图读取不存在的文件

 

Error类对象由Java虚拟机生成并抛出;

无法恢复

OutOfMerroyError

Exception类对象由应用程序处理或抛出

 

编译错误:语法错

编译错误是由于所编写的程序存在语法问题,未能通过有源代码到目标代码得的转换,这个错误可以简单地有编译系统查出来

运行异常:运行错误:

运行错误是在程序运行过程中产生的错误

 

 

 

 

 

 


捕获异常

try{可能会抛出异常语句体

}catch(异常类型异常变量名){

抛出异常被捕获后执行语句体1

}finally{

必须执行的语句体2

}

语句体2必须执行

 

抛出异常

throws:用在方法定义

访问修饰符 修饰符返回值类型 方法名称(参数列表) throws 异常1,异常2.。。。。{方法体}

throw:用在语句体中

throw new 异常类();


原创粉丝点击