我不太喜欢讲述教科书上天花乱坠的定义,因为说出来,也没多少人看、看懂,当然最重要的原因是,我不会讲,⊙︿⊙
我们直接按功能学习:
一、获取全限类名
如果我们要获取java内置类的全限类型,我们可以用Object类提供的getClass方法,因为Object是所有类的祖宗,其他类直接或间接继承了Object
那对于我们自定义的类是否也可以通过这种方法来获取全限类名呢?
看下面定义的一种类
可能有人会这么说,这个类没有继承Object类,不能使用,应该改成下面这种写法,也就是来继承Object类
当然,这样子无非是比较严谨的,但是对于java语言而言,一切类或接口都隐式地继承了Object,什么,不信?来试试
事实上上确实也可以输出,当然你那样子写觉得是没有问题的!
二、创建对象的几种方法
1、new关键字
大多数人,无论是哪种语言,相信new一定用过不少次数吧。
而在java语言中,new是最基本,最大众化的创建方式
它为需要被创建的对象 在堆上申请一块内存空间,同时在栈上存放其对象的引用地址。
2、类的静态方法
本质上还是new方法,只不过此时类的构造函数为私有,无法通过外部new来直接创建该类的对象,而只能通过该类的具体方法来创建这个类的对象。
3、Class.forName()
这种方式比较重要的,因为在一般项目开发中,你开发的时候不可能每次都去看下代码,然后写一个类名上去,这样子不但开发拖累大,而且会在一定程度上导致代码耦合度增高
那这种方法适合什么情况
你通过别人写的函数代码,调用它,对方返回你一个全限类名字符串,就是这个字符串变量代表的是全限类名,这种时候就需要你根据字符串变量动态来执行类的实例化过程
三部曲:
- 获取全限类名字符串
- 通过Class.forName获取该类
- 最后通过获取的类的newInstance方法来实例化该类(默认是Object类)
当然,你也可以不用那样子做,还可以通过获取该类的构造器方法getConstructors来实例化该类,如下
,当然,这是最泛化的方法,你也可以指定构造器方法名称来实例化该类,通过以下代码完成
至于其他什么获取私有构造方法,设置权限啥啥啥的就不一一讲明了,太多,有兴趣可以自行去查阅文档。
三、其他
其实还有其他创建对象的方法,比如自定义clone方法,反序列。但两者都需要你创建的对象要实现相关接口才可以调用。百度吧,骚年们。(-ロ-)【pic】