类名.this与类名.class

1、.当在内部类中使用this指的就是内部类的对象, 为了访问外层类对象,就可以使用外层类名.this来访问。

2、在java中,每个class都有一个相应的Class对象,当编写好一个类,编译完成后,在生成的.class文件中,就产生一个Class对象,用来表示这个类的类型信息。获得Class实例的三种方式:

1). 利用对象调用getClass()方法获取该对象的Class实例
2). 使用Class的静态方法forName(),用类的名字获取一个Class实例
3). 运用.calss的方式获取Class实例,对基本数据类型的封装类,还可以采用.TYPE来获取对应的基本数据类型的Class实例。

以下是TestClass.java代码:

public class TestClass {
    public static void main(String[] args) {
        // 在运行期间,如果我们要产生某个类的对象,java虚拟机会检测该类型的Class对象是否
        //已被加载。如果没有加载,java虚拟机会根据类的名称找到.class文件并加载它。
        //当new Point()的时候加载这个类,用forName构造实例的时候也加载该类。 只加载一次
        System.out.println("before new Point()");
        new Point();
        System.out.println("after new Point()");
        try {
            Class.forName("Line");
        } catch (Exception e) {
            e.printStackTrace();
        } 

        // 利用对象调用getClass()方法获取该对象的Class实例
        Point pt = new Point();
        Class c1 = pt.getClass();
        System.out.println(c1.getName()); // 结果:Point 

        // 使用Class的静态方法forName(),用类的名字获取一个Class实例
        try {
            Class c2 = Class.forName("Point");
            System.out.println(c2.getName()); // 结果:Point
            Point pp = (Point) c2.newInstance(); //一旦某个类型的Class对象已经被加载到内存,就可以用它来产生该类型的所有对象。
                                        //newInstance()调用类中缺省的构造方法。
            pp.output();
        } catch (Exception e) {
            e.printStackTrace();
        } 

        // 运用.class的方式获取Class实例(类)
        Class c3 = Point.class;
        System.out.println(c3.getName()); // 结果:Point 

        // 运用.calss的方式获取Class实例(基本类型)
        Class c4 = int.class;
        System.out.println(c4.getName()); // 结果:int 

        // 运用.class的方式获取Class实例(基本数据类型的封装类)
        Class c5 = Integer.TYPE;
        System.out.println(c5.getName()); // 结果:int
        Class c6 = Integer.class;
        System.out.println(c6.getName()); // 结果:java.lang.Integer
    }
} 

class Point {
    static {
        System.out.println("loading point");
    } 

    void output() {
        System.out.println("x=" + x + ",y=" + y);
    }
    int x, y;
} 

class Line {
    static {
        System.out.println("loading Line");
    }
} 
时间: 2024-10-22 16:46:03

类名.this与类名.class的相关文章

引用变量类型的加载顺序(类名+引用名=new +类名();)

程序如下: 运行结果如下: 以上结果说明:同一个引用名称(可以把它当做变量的一种类型)可能指代不同的对象,依据同一个引用是否处于同一个初始化的层次,决定是否在完成: static Cup c1=new Cup(11); 之后,立即对相同的引用进行重载. static { c1=new Cup(1); c2=new Cup(2); }

Qt 中界面类名的修改

Qt 中如果想要使用多个已经写好的界面类,往往会发现界面类的名称要么是“MainWindow”,要么是“Widget”,或者是“Dialog”.那么重名的界面类在一起就会在所难免.或者你想修改界面类的名称.那么一定要切记不可直接修改界面类的名称.否则和容易出错. 正确的解决方法如下: 1.修改.ui文件名称为xxxmainwindow.ui/xxxwidget.ui/xxxdialog.ui :在工程树下右键修改即可.当然也可以为其他名字,总之要清晰明了有个性. 2.修改.h,.cpp名称与.u

转:java 类名 this 的使用

转自: http://www.cnblogs.com/PengLee/p/3993033.html 类名.class与类名.this详解 类名.class      我们知道在java中,一个类在被加载的时候虚拟机就会自动的生成一个这个类的一个Class类型的“类对象”,每个类都对应着一个这样的类对象,通过这个Class类型的类对象,我们就能够使用“内省与反射”机制,访问一个类的信息,比如:对应类中的方法有哪些,成员域有哪些等等:获取一个类的“类对象”的方法之一就是通过使用   类名.class

css选择器(1)——元素选择器、类名和id选择器

css的主要优点之一就是它能很容易地向所有同类型的元素应用一组样式.当然它是通过选择器来实现这一点的. 基本规则结构: 语法= 选择器 +声明块 1.元素选择器--直接使用html元素名,指向文档元素 如果想给所有段落都添加缩进的话使用元素选择器是最好的选择 p{ text-indent:2em; } 2.类选择器和id选择器--独立于文档元素来指定样式 a)类选择器: 给部分段落文本加粗,以及列表的某些项,这时可以使用类选择器来应用样式而不需要像使用元素选择器一样考虑具体涉及的元素,只要事先给

C# 反射,通过类名、方法名调用方法

在 C# 代码中,有些时候只知道方法的名字(string),需要调用该方法,那么就需要用到 C# 的反射机制.下面是一个简单的 demo. 1 using System; 2 using System.Reflection; 3 4 class Test 5 { 6 // 无参数,无返回值方法 7 public void Method() 8 { 9 Console.WriteLine("Method(无参数) 调用成功!"); 10 } 11 12 // 有参数,无返回值方法 13

C++实现根据类名动态生成类对象

在开发后台服务的过程中,我们常常需要从数据库中取数据,并将数据缓存在本地中,另外,我们的服务还需要有更新数据的能力:包括定时的主动更新以及数据库数据更新时服务收到通知的被动更新. 之前在需要用到以上功能的时候,模仿着组内通用的数据Cache部分的代码来写,十分方便,基本上只需要自己写两个类:一个是取数据并缓存数据的类XXXData,一个是扇出数据的类XXXFetcher. 在需要使用数据的时候,通过: FetcherFactory::getFetcher<XXXFetcher>() 即可获取一

获取Xcode工程所有的类名

有的时候在需求中需要获取工程中所有的类名.例如在获取工程中继承某个类的列表. 核心代码如下: unsigned int count = 0; const char **classes = nil; Dl_info info; dladdr(&_mh_execute_header, &info); NSLog(@"%s", info.dli_fname); /* info.dli_fame 是工程编译时工程的路径 objc_copyClassNamesForImage 返

同一个项目中存在完全相同的包名和类名如何解决调用问题

项目中遇到有一个类,在两个jar包中都存在,而且类所在的包名和类名完全一致,解决办法有两种: 1.常用办法 清除项目中过时的那个jar包,推荐方式. 2.如果两个都不能清除,则在使用过程中动态指定加载的jar包即可.以rt.jar中javax.xml.ws.Service为例,代码如下 File file = new File("f:\\rt.jar"); URL url = file.toURI().toURL(); ClassLoader classLoader = new URL

C# 利用反射根据类名创建类的实例对象

“反射”其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL) object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)");