美文网首页
getClass(),class属性和getName()解析

getClass(),class属性和getName()解析

作者: 背影杀手不太冷 | 来源:发表于2016-06-24 10:33 被阅读468次

    标签(空格分隔): java


    参考博客###

    用法:##

    getClass()
    类型:public final Class<? extends Object> getClass()
    注意这里的返回类型是Class<? extends Object>对象,而且还是final类型。
    由方法类型可以知道,该方法只能由类的实例变量调用,即用对象调用
    功能:返回该对象的运行时类的Java.lang.Class对象(API上的解释)

    JButton b1 = new JButton("button1");  
    System.out.println(b1.getClass());
    
    //输出:
    class javax.swing.JButton
    

    .class属性
    当你要获得一个类的Class对象时(作函数参数的时候),你不能调用getClass方法,那你只能用类名.class来达到效果

    System.out.println(JButton.class); 
    //输出:
    class javax.swing.JButton
    

    getName方法:(只是用来获取class对象的名称,因为返回值是String类型,所以与前两个相比没有太多的实用价值)
    类型:public String getName(),返回的是String类型
    功能:以String形式返回次Class对象所表示的实体名称

    JButton b1 = new JButton("button1");  
    System.out.println(b1.getName());  
    //输出:
    javax.swing.JButton
    

    可以发现用class属性和getClass返回的输出是一样的,用getName返回的比前面两种少了class和一个空格。


    深入区别:##

    .class其实是在java运行时就加载进去的,可以说是编译时期就决定好的

    getClass()是运行程序时动态加载的

    首先建一个基类Baseclass  
      
    package  classyongfa;  
      
    public  class  Baseclass {  
      
    private  String height;  
    public  String getHeight()  
    {  
       return  height;  
    }  
      
    public  void  setHeight(String height)  
    {  
        
       this .height=height;  
        
    }  
    下面是继承Baseclass类Extendclass  
      
    package  classyongfa;  
      
    public  class  Extendclass extends  Baseclass {  
      
    private  String width;  
    public  String getWidth()  
    {  
       return  width;  
    }  
      
    public  void  setWidth(String width)  
    {  
        
       this .width=width;  
        
    }  
    public  static  void  main(String[] arg0)  
    {  
       Baseclass baseclass1=new  Extendclass();  
       Baseclass baseclass2=new  Baseclass();  
       System.out.println(baseclass1.getClass().getSimpleName());//实际运行的是继承类Extendclass   
      
    System.out.println(baseclass2.getClass().getSimpleName());//实际运行的是Baseclass   
      
      
       System.out.println(Baseclass.class .getSimpleName());//加载时类名   
    System.out.println(Extendclass.class .getSimpleName());//加载时类名   
      
    }  
      
    结果是  
      
    Extendclass  
    Baseclass  
    Baseclass  
    Extendclass
    

    四种获取Class对象的方法 Java反射机制##

    先在com.hqh.reflect下建一个文件UseInfojava
    
    package com.hqh.reflect;
    
    public class UseInfo {
    
    private Integer id;
    private String userName;
    private String password;
    
    public Integer getId() {
       return id;
    }
    
    public void setId(Integer id) {
       this.id = id;
    }
    
    public String getUserName() {
       return userName;
    }
    
    public void setUserName(String userName) {
       this.userName = userName;
    }
    
    public String getPassword() {
       return password;
    }
    
    public void setPassword(String password) {
       this.password = password;
    }
    
    }
    
    package com.hqh.reflect;
    
    public class GetClassTest {
    
    public static void main(String[] args) {
       GetClassTest test = new GetClassTest();
       if(test.ClassCheck())
        System.out.println("OK");
    
    }
    
    public boolean ClassCheck() {
       try {
        System.out.println("通过类本身获得class对象");
        Class userClass = this.getClass() ;
        System.out.println(userClass.getName());
        System.out.println("===========");
       
        System.out.println("通过子类的实例获得父类class对象");
        UseInfo useInfo = new UseInfo();
        userClass = useInfo.getClass();
        System.out.println(userClass.getName());
        Class subUserClass = userClass.getSuperclass() ;
        System.out.println(subUserClass.getName());
        System.out.println("===========");
       
        System.out.println("通过类名.class获取class对象");
        Class forClass = com.hqh.reflect.UseInfo.class ;
        System.out.println(forClass.getName());
        System.out.println("===========");
       
        System.out.println("通过类名的字符串获取class对象");
        Class forName = Class.forName("com.hqh.reflect.UseInfo") ;
        System.out.println(forName.getName());
        System.out.println("=============");
       
       } catch (Exception e) {
        e.printStackTrace();
        return false;
       }
       return true;
    }
    }
    
    
    结果:
    
    通过类本身获得对象
    com.hqh.reflect.GetClassTest
    ===========
    通过子类的实例获得父类对象
    com.hqh.reflect.UseInfo
    java.lang.Object
    ===========
    通过类名.class获取对象
    com.hqh.reflect.UseInfo
    ===========
    通过类名的字符串获取对象
    com.hqh.reflect.UseInfo
    =============
    OK
    

    相关文章

      网友评论

          本文标题:getClass(),class属性和getName()解析

          本文链接:https://www.haomeiwen.com/subject/coyodttx.html