Class对象的生成方式
1.Class.forName("类名字符串") (注意:类名字符串必须是全称,包名+类名)
2.类名.class
3.实例对象.getClass()
Class.forName、实例对象.class(属性)、实例对象getClass()的区别:
1)Class cl=A.class; JVM将使用类A的类装载器,将类A装入内存(前提是:类A还没有装入内存),不对类A做类的初始化工作.返回类A的Class的对象
2)Class cl=对象引用o.getClass();返回引用o运行时真正所指的对象(因为:儿子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象
3)Class.forName("类名"); JAVA人都知道.装入类A,并做类的初始化
附:
从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用Class对象的newInstance()方法的时候,就必须保证:1、这个 类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载 java API的那个加载器。
现在可以看出,Class对象的newInstance()(这种用法和Java中的工厂模式有着异曲同工之妙)实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。
最后用最简单的描述来区分new关键字和newInstance()方法的区别:
newInstance: 弱类型。低效率。只能调用无参构造。
new: 强类型。相对高效。能调用任何public构造。
实例对象的创建四种方式
public class CreateObj implements Cloneable,Serializable{
private static String filename = CreateObj.class.getResource("").getPath()+ "/obj.txt";
static File file = new File(filename);
static {
if (!file.exists())
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
// 1.第一种常用方式 (用new语句创建对象)
CreateObj s1 = new CreateObj();
System.out.println(s1);
// 2.第二种方式 静态方式 java.lang.InstantiationException (运用反射手段)
CreateObj s2 = (CreateObj) Class.forName( "com.newland.commons.collectionutil.CreateObj").newInstance();
System.out.println(s2);
//第三种方式 用对象流来实现 前提是对象必须实现 Serializable (运用反序列化手段)
ObjectOutputStream objectOutputStream = new ObjectOutputStream(
new FileOutputStream(filename));
objectOutputStream.writeObject(s2);
ObjectInput input=new ObjectInputStream(new FileInputStream(filename));
CreateObj s3 = (CreateObj) input.readObject();
System.out.println(s3);
//第四种 必须 实现Cloneable接口 否则抛出CloneNotSupportedException(调用对象的clone()方法)
CreateObj obj=new CreateObj();
CreateObj s4= (CreateObj) obj.clone();
System.out.println(s4);
}
}
Class对象和实例对象的区别与联系:
任何 Java 的类或接口都是 Class 类的一个实例,反射就是 Java 自我管理这些(类、对象)的机制
Class对象的作用(应用):
1、可以通过反射机制发现对象的类型,发现类型的方法/属性/构造器
Class cls =obj.getClass();
Field[] fields =cls.getDeclaredFields(); //获取该类的所有属性
for(Field field : fields){
field.getType(); //属性类型
field.getName(); //属性名称
}
Method[] methods = cls.getDeclaredMethods();//获取该类的所有方法
for(Method method : methods){
method.getReturnType(); //方法类型
method.getName(); //方法名称
}
Constructor[] constructors = cls.getDeclaredConstructors();//获取该类的所有构造器
for(Constructor constructor : constructors){
constructor .getName(); //构造器名称
}
2、可以创建对象并访问任意对象方法和属性等
Class<Date> date=Class.forName("类文件名"); //加载指定的类文件,获得一个Class对象
Date d=date.newInstance(); //由Class对象获得一个新实例对象(默认调用类的无参构造器)
public Object getFieldValue(Object obj , String fieldname){
Class cls = obj.getClass(); //反射出类型
Field field = cls.getDeclaredField(fieldname); //反射出类型属性
Object val =field.get(obj); //在对象obj上读取field属性的值
return val;
}
在对象obj上调用方法签名是(method ,paramTypes)的方法,params是传递的参数,有方法返回,无返回null
public Object getMethod(Object obj , String method , Class[] paramTypes , Object[] params){
Class cls = obj.getClass(); //反射出类型
Method m= cls.getDeclaredMethod(method , paramTypes); //反射出类型方法
Object val =m.invoke(obj , params); //在对象obj上调用方法m,传递参数类别params
return val;
}
相关推荐
-java 创建对象的四种方法是指在 Java 中创建对象的不同方式,它们分别是使用 new 语句创建对象、使用反射机制创建对象、使用 clone() 方法创建对象和使用反序列化机制创建对象。 - 使用 new 语句创建对象是 Java ...
4. 通过Connection对象创建Statement或PreparedStatement对象,用于执行SQL查询和操作。 5. 执行SQL语句,获取ResultSet,处理查询结果。 6. 最后,关闭所有的资源,包括ResultSet、Statement和Connection,以释放...
在编程中,我们通常会创建一个`Connection`对象,然后创建一个`Statement`或`PreparedStatement`对象来执行SQL查询。例如: ```java import java.sql.*; public class MySQLDemo { public static void main...
JDBC是Java平台中用于与各种数据库交互的一组API,它为开发人员提供了一种统一的方式来访问数据库,无论数据库系统是什么。 MySQL Connector/J的工作原理主要包括以下步骤: 1. **加载驱动**:在Java代码中通过`...
这可以通过多种方式实现,如在IDE(如Eclipse或IntelliJ IDEA)中配置构建路径,或者在运行Java应用时使用`-cp`或`-classpath`命令行选项指定。当Java虚拟机(JVM)运行时,它会查找这个jar包中的类来建立到MySQL...
使用`mysql-connector-java-5.1.44-bin.jar`,Java开发者可以创建`java.sql.Connection`对象来连接MySQL数据库。首先需要在代码中引入驱动,然后通过`DriverManager.getConnection()`方法建立连接: ```java import...
首先,JDBC是Java平台的标准API,由Sun Microsystems(现已被Oracle收购)开发,它提供了一种标准化的方式来访问各种类型的数据库。JDBC驱动是数据库供应商提供的中间件,它实现了JDBC API,使得Java程序能够与特定...
MySQL Connector/J是MySQL数据库系统与Java应用程序之间的桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够方便地在Java应用程序中访问MySQL数据库。"mysql-connector-...
- 创建RAR档案对象,例如:`Archive archive = Archive.getArchiveInstance(new File("path_to_rar_file.rar"));` - 使用archive对象提供的方法进行解压、遍历等操作,如`archive.getVolumeFileList();`获取文件...
它为Java程序员提供了统一的数据库访问方式,屏蔽了不同数据库系统之间的差异。 2. JDBC URL:JDBC URL是JDBC驱动程序用来定位和连接到特定数据库的关键信息。其格式通常为`jdbc:子协议:子名称[;属性=值]...`,例如...
它是MySQL官方推荐的用于Java应用的JDBC驱动,支持标准的JDBC接口,如Connection、Statement、PreparedStatement、ResultSet等,使得开发人员无需关注底层数据库操作细节,而是通过面向对象的方式进行数据库交互。...
3. 执行 SQL:通过 `Connection` 对象的 `createStatement()` 或 `prepareStatement()` 方法创建 `Statement` 或 `PreparedStatement` 对象,然后调用它们的 `executeQuery()` 或 `executeUpdate()` 方法执行 SQL。...
Java是一种广泛使用的面向对象的编程语言,以其平台独立性、安全性、健壮性和高性能而闻名。这个"java基础教程----精华版"显然是一份精心整理的资料,旨在帮助初学者快速掌握Java编程的基础知识。下面将详细介绍Java...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
2. **创建Statement或PreparedStatement**:连接建立后,可以创建Statement对象用于执行静态SQL语句,或者PreparedStatement对象用于预编译和执行参数化的SQL语句。 3. **执行SQL操作**:通过Statement或...
一旦连接建立,就可以创建`Statement`或`PreparedStatement`对象执行SQL语句。 值得注意的是,`mysql-connector-java-5.1.22`可能是另一个版本的JDBC驱动,这个版本相较于5.0.8可能会包含更多的改进和修复,例如更...
1. **JDBC API**:这是Java访问数据库的标准接口,提供了多种类和接口,如`java.sql.DriverManager`,`java.sql.Connection`,`java.sql.Statement`,`java.sql.ResultSet`等,它们使得开发人员能够创建数据库连接,...
MySQL Connector/J是MySQL数据库与Java应用程序之间的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够方便地在MySQL数据库上执行CRUD(创建、读取、更新、删除)操作...
- **构造器**:用于初始化新创建对象的特殊方法。 5. **第5章:继承与接口** - **继承**:子类继承父类的属性和方法,实现代码重用和多态性。 - **访问修饰符**:public, protected, default, private,它们决定...