Java学习笔记-11.运行期间类型鉴定

1.Class对象的getClasses()方法获取的是该类中所有的公共的内部类,以及从父类,父接口继承来的内部类。getinterfaces()方法返回类继承的所有接口。

import javax.print.attribute.standard.PrinterInfo;

interface  HasBatteries{}
interface Waterproof{}
interface ShootsThings{}

class Toy{
    Toy(){}
    Toy(int i){}
}

class FancyToy extends Toy implements HasBatteries,Waterproof,ShootsThings{
    public FancyToy() {
        // TODO 自动生成的构造函数存根
        super(1);
    }
}

public class ToyTest {
    public static void main(String[] args){
        Class class1=null;
        try{
            class1=class1.forName("FancyToy");
        }catch (ClassNotFoundException e) {
            // TODO: handle exception
        }
        printInfo(class1);
        Class[] faces=class1.getInterfaces();
        for(int i=0;i<faces.length;i++){
            printInfo(faces[i]);
        }
        Class cy=class1.getSuperclass();
        Object cObject=null;
        try{
            cObject=cy.newInstance();
        }catch (Exception e) {
            // TODO: handle exception
        }
        printInfo(cObject.getClass());

    }

    static void printInfo(Class cc){
        System.out.println("Class name:"+cc.getName()+" is interface? "+cc.isInterface());
    }

}

2.Class对象的forName()使用时传递的类名classname参数是需要全名的,不能只加类名,比如包名.类名,java.lang.String。

package eleven;

import java.lang.reflect.*;

class Pig {
    public Pig() {
        // TODO 自动生成的构造函数存根
    }

    public void T() {

    }

    public void A() {
    }

    public void ma() {
    }
}
public class ShowMethods {
    public static void main(String[] args) {
        try {
            //Class class1 = Class.forName("eleven.Pig");
            Class class1 = Class.forName("java.lang.String");
            Method[] methods = class1.getMethods();
            Constructor[] constructors = class1.getConstructors();
            for (int i = 0; i < methods.length; i++) {
                System.out.println(methods[i].toString());
            }
            for (int i = 0; i < constructors.length; i++) {
                System.out.println(constructors[i].toString());
            }
        } catch (ClassNotFoundException e) {
            // TODO: handle exception
            System.out.println("No such class:" + e);
        }
    }

}
时间: 2024-08-28 14:46:02

Java学习笔记-11.运行期间类型鉴定的相关文章

我的java学习笔记(11)关于装箱、参数可变方法和枚举类型

1.所有的基本类型都有一个与之对应的类,通常这些类称之为包装器. 2.对象包装器类是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值.对象包装器还是final,因此不能定义它们的子类. 3.假设定义一个整型数组列表,而尖括号中的类型参数不允许是基本类型,即不允许ArrayList<int>,这里可以使用Integer对象包装器类. Array<Integer> l = new ArrayList<>(); 4.装箱和拆箱是编译器认可的,而不是虚拟机.编译器在生成

Java学习笔记 11/15:一个简单的JAVA例子

首先来看一个简单的 Java 程序. 来看下面这个程序,试试看是否看得出它是在做哪些事情! 范例:TestJava.java // TestJava.java,java 的简单范例 public class TestJava { public static void main(String args[]) { int num ; // 声明一个整型变量 num num = 3 ; // 将整型变量赋值为 3 // 输出字符串,这里用"+" 号连接变量 System.out.printl

JAVA学习笔记一:变量类型

Java语言支持的变量类型有: 类变量:独立于方法之外的变量,用 static 修饰. 实例变量:独立于方法之外的变量,不过没有 static 修饰. 局部变量:类的方法中的变量. public class Count { private static int staticnum=0;//静态变量 private int lvars=0;//实例变量 public void method(){ int i =0; // 局部变量 } public Count() { for(int i=0;i<

Java学习笔记11

Object类是所有类.数组.枚举类的父类,是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括 数组)都实现这个类的方法. Object类实现了以下方法: 我们来看看在源码中registerNatives()方法: private static native void registerNatives(); static { registerNatives(); } 从上面的代码中看到Object类定义了一个静态初始化块,我们知道当创建Java对象时,系统总是先调用静态初始化块

java学习笔记(11) —— Struts2与Spring的整合

1.右键 项目名称 —— MyEclipse —— Add Spring Capabilities 2.选取 Copy checked Library contents to project folder 3.建立IService 与 Service [Spring 同样是面向接口编程,因此需要引入IService] public interface ILoginService { public boolean isLogin(String username,String password);

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

java学习笔记14--多线程编程基础1

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为一个进程,例如:用字处理软件编辑文稿时,同时打开mp3播放程序听音乐,这两个独立的程序在同时运行,称为两个进程 进程要占用相当一部分处理器时间和内存资源 进程具有独立的内存空间 通信很不方便,编程模型比较复杂 多线程 一个程序中多段代码同时并发执行,称为多线程,线程比进程开销小,协作和数据交换容易

Java学习笔记&lt;3&gt;面向对象相关

面向对象的基本思想 从现实世界客观存在的事务出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式,如抽象.分类 继承.聚合.多态等. 类和对象的关系 对象中存储了类规定的数据类型,并且对象可以调用类的方法. java面向对象 <1>对象是java程序的核心,一切皆对象. <2>对象可以看成静态属性(成员变量)和动态属性(方法)的封装体. <3>类是创新同一类型对象的模版,定义了该类型对象应具有的成员变量及方法. 类的定义 成员变量可以用java语言的任何一种

JAVA学习笔记 -- 数据结构

一.数据结构的接口 在Java中所有类的鼻祖是Object类,但是所有有关数据结构处理的鼻祖就是Collection和Iterator接口,也就是集合与遍历. 1.Collection接口 Collection c = new Xx(); // c可以称为Collection接口回调对象,虽然它被声明为Collection类型,但是实例化时实现的是接口的实现类Xx.它的方法也是用来操作实现类的对象. <span style="white-space:pre"> </s