java(20130730)内部类、反射、封装类

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

内部类

在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类

内部类和外层封装它的类之间存在逻辑上的所属关系

Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。 Inner class的名字不能与包含它的类名相同;

Inner class可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量;

内部类能够访问创建它 的对象的实现,包括私有成员(能访问定义内部类的类的私有成员方法和成员变量)

内部类能够隐藏起来,不为同一包中的其他类所见(在内部类的访问修饰符用private)

使用内部类在编写事件驱动程序时很方便.

 

普通内部类(成员内部类)

静态嵌套类(静态内部类)

局部内部类

匿名内部类:没有名字的内部类,这是Java为了方便我们编写程序而设计的一个机制。因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适

 

 

成员内部类(普通内部类):

格式:

class 外部类名{

访问修饰符 修饰符变量类型 变量名称;

访问修饰符 修饰符返回值类型 成员方法名称(参数列表){方法体}

访问修饰符 class 内部类名称{

访问修饰符修饰符 变量类型 内部类成员变量名称;

访问修饰符修饰符 返回值类型 内部类成员方法名称(参数列表){方法体}

}

}

实例化成员内部类格式:

1.类中

内部类名 pic =new内部类名();//同一个类中实例化内部类

2.类外部:

外部类名变量1 = new外部类名();

外部类名.内部类吗名变量2 =变量1.new内部类名();//类外部:实例化成员内部类 固定格式

 

静态内部类

Public class 外部类名{

访问修饰符 修饰符变量类型 变量名称;

访问修饰符 修饰符返回值类型 成员方法名称(参数列表){方法体}

访问修饰符 staticclass 内部类名称{

访问修饰符修饰符 变量类型 内部类成员变量名称;

访问修饰符修饰符 返回值类型 内部类成员方法名称(参数列表){方法体}

}

}

 

实例化成员内部类格式:

1.类中

内部类名 pic =new内部类名();//同一个类中实例化静态内部内部类

2.类外部:

外部类名.内部类吗名变量2 =new外部类名.内部类名();//类外部:实例化静态内部类 固定格式

 

 

局部内部类(定义类中的方法体中,作用范围就只在此方法体中):

格式:

Public class 外部类名{

访问修饰符 修饰符变量类型 变量名称;

访问修饰符 修饰符返回值类型 成员方法名称(参数列表){

class 局部内部类名称{

变量类型 内部类成员变量名称;

返回值类型 内部类成员方法名称(参数列表){方法体}

}

局部内部类名  变量  = new 局部内部类名();//只能在此方法中实例化此局部内部类对象

}

}


 

 

匿名内部类

publicclass Person {

    intage;

    String name;

    publicvoid meth(){

        System.out.println("meth");

    }

}

 

publicclass Studentextends Person {

    intage=10;

    String name="zhangsan";

    publicvoid meth(){

        System.out.println("我是匿名内部类中的方法");

    }

}

 

publicstaticvoid main(String[] args) {

        Person  p  = new Person(){//匿名内部类

            intage=10;

            String name="zhangsan";

            publicvoid meth(){

                System.out.println("我是匿名内部类中的方法");

            }

        };

        p.meth();

        System.out.println(p.name);

        Person  p1  = new Student();//类名:Student

        p1.meth();

        System.out.println(p1.name);

    }
反射:

//      //反射

        try {

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

            System.out.println(class1.getName());//获取类全路径名称

            Dog dog = (Dog)class1.newInstance();//构建此类的一个实例*

            //等价

            //Dog dog = new Dog();

           

//          dog.meth();//调用此实例的方法

            Method[] dm = class1.getMethods();

            for(Method m:dm){

                System.out.println("方法名称"+m.getName());

                if(m.getName().equals("meth")){

                    m.invoke(dog, args);//调用此类中的具体方法*

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

 

 


 

 

什么是封装类

基本数据类型以类的形式体现

基本数据类型

封装类

         boolean

          byte

          short

          int

          long

          char

          float

          double

          Boolean

          Byte

          Short

          Integer

          Long

          Character

          Float

          Double

 

 

 

原创粉丝点击