Class类的使用

avatar 2017年11月06日22:50:48 6 3176 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
1)在面向对象的世界里,万事万物皆对象。

java语言中,静态的成员、普通数据类型类是不是对象呢?

类是谁的对象呢?

类是对象,类是java.lang.Class类的实例对象

2 )这个对象到底如何表示?

There is a class named CIass



通过以下代码解释
  1.   /**
  2.  * @Author: 言曌
  3.  * @Date: 2017/11/6
  4.  * @Time: 下午10:00
  5.  */
  6. public class Demo {
  7.     public static void main(String args[]) {
  8.         Foo foo1 = new Foo();
  9.         //第一种表示方式--->实际在告诉我们任何一个类都有一个隐含的静态成员变量class
  10.         Class c1 = Foo.class;
  11.         System.out.println(c1.getName());
  12.         //第二种表示方法
  13.         Class c2 = foo1.getClass();
  14.         //c1和c2都是父类的类类型
  15.         System.out.println(c1==c2);
  16.         /*官网 c1 ,c2 表示了Foo类的类类型(class type)
  17.          * 万事万物皆对象,
  18.          * 类也是对象,是Class类的实例对象
  19.          * 这个对象我们称为该类的类类型
  20.          * 
  21.          */
  22.         //第三种的表达方式
  23.         Class c3 = null;
  24.         try {
  25.             c3 = Class.forName("practive.Class.Foo");
  26.         } catch (ClassNotFoundException e) {
  27.             e.printStackTrace();
  28.         }
  29.         System.out.println(c2==c3);
  30.         //我们完全可以通过类的类类型来创建类的的对象,通过c1/c2/c3来创建Foo
  31.         try {
  32.             Foo foo = (Foo) c1.newInstance();//需要有无参数的构造方法
  33.         } catch (InstantiationException e) {
  34.             e.printStackTrace();
  35.         } catch (IllegalAccessException e) {
  36.             e.printStackTrace();
  37.         }
  38.         foo1.print();
  39.     }
  40. }
  41. class Foo {
  42.     public void print() {
  43.         System.out.println("print......");
  44.     }
  45. }





1、foo1 是 Foo 的一个实例对象

2、Foo 是Class 的一个实例对象,但是不能直接 new 创建,因为 Class 类的构造方法是 private 类型的,只能由虚拟机创建。

查看 Class 类的源码



但是我们可以由以下三种方法创建 Class 的实例对象,即 Foo 类的类类型(class type)

(1) 方式一
  1. Class c1 = Foo.class;

(2) 方式二
  1. Class c2 = foo1.getClass();

(3) 方式三
  1. Class c3 = null;
  2. try {
  3.     c3 = Class.forName("practive.Class.Foo");
  4. catch (ClassNotFoundException e) {
  5.     e.printStackTrace();
  6. }



3、获得了类类型,我们就能创建对象了,而不需要使用 “new 一个对象” 啦
  1. //我们完全可以通过类的类类型来创建类的的对象,通过c1/c2/c3来创建Foo
  2.  try {
  3.      Foo foo = (Foo) c1.newInstance();//需要有无参数的构造方法
  4.  } catch (InstantiationException e) {
  5.      e.printStackTrace();
  6.  } catch (IllegalAccessException e) {
  7.      e.printStackTrace();
  8.  }



参考慕课网

  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0