Java学习笔记Class类
2015-06-23 11:37
459 查看
本文主要是详解Java编程基础Class类,多线程并发处理,更多Java技术知识,请登陆疯狂软件教
育官网。
一、反射的基石--->Class类
1. Java类用于描述一类事物的特性,该类事物有什么属性,没有什么属性,值域这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性值。Java程序中的各个Java类,他们是否属于同一类事物,是不是可以用一个类来描述这类事物呢?这个类的名字就是Class,要注意与小写class关键字的区别哦。Class类描述了哪些方面的信息呢?类的名字,类的访问属性,类所属的包名,字段名称的列表,方法名称的列表,等等。学习反射,首先就要明白Class这个类。
Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。
public class Class
对比提问:众多的人用一个什么类表示?众多的Java类用一个什么表示?
人—>Person
Java类—>Class
对比提问:Person类代表人,它的实例对象就是张三,李四这样一个个具体的人,Class类代表Java类,它的各个实例对象分别对应什么呢?
对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等。
一个类被类加载器加载到内存中,占用一片存储空间,这个空间里的内容就是字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间分别用一个个的对象来表示,这些对象显然具有同样的类型,这个类型是什么呢?
如何得到各个字节码对应的实例对象(Class类型)
类名.class,例如 System.class//通过类名得到字节码实例
对象.getClass(),例如 new Date().getClass();//通过实例得到字节码实例
Class.forName("类名"); Class.forName("java.util.Date");//适合于类字节码尚未加载到内存的情况下
java.util.Date是一个字符串,如果事先不知道将加载哪个类,就传一个String,动态的加载字符串指定的类字节码。
八个基本类型和void也对应表现为自己的Class字节码对象。
Class cls1=int.class;
Class cls2=void.class;
数组类型 的Class实例对象
Class.isArray()
package com.itcast.day1;
public class ReflectTest {
public static void main(String[] args)throws Exception {
//分别用三种方式得到 String类在内存中的字节码
Class cls1=String.class;//01. 类名.class
String str="123";
Class cls2=str.getClass();//02. 实例.getClass()
String classUrl="java.lang.String";
Class cls3=Class.forName(classUrl);//03. Class.forName(类名)
//三种方法是得到了同一份字节码。
System.out.println(cls1 == cls2);//true
System.out.println(cls1 == cls3);//true
System.out.println(cls1.isPrimitive());//false,不是基本类型的字节码
System.out.println(int.class.isPrimitive());//true 基本类型的字节码
System.out.println(int.class == Integer.class);//false 基本类型和包装类型不是一份字节码
System.out.println(int.class == Integer.TYPE);//true Integer.TYPE就代表包装对应的基本类型的字节码
System.out.println(int[].class.isPrimitive());//false 数组也是一种类型,但不是基本类型
System.out.println(int[].class.isArray());//true 是否是数组
}
}
育官网。
一、反射的基石--->Class类
1. Java类用于描述一类事物的特性,该类事物有什么属性,没有什么属性,值域这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性值。Java程序中的各个Java类,他们是否属于同一类事物,是不是可以用一个类来描述这类事物呢?这个类的名字就是Class,要注意与小写class关键字的区别哦。Class类描述了哪些方面的信息呢?类的名字,类的访问属性,类所属的包名,字段名称的列表,方法名称的列表,等等。学习反射,首先就要明白Class这个类。
Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。
public class Class
对比提问:众多的人用一个什么类表示?众多的Java类用一个什么表示?
人—>Person
Java类—>Class
对比提问:Person类代表人,它的实例对象就是张三,李四这样一个个具体的人,Class类代表Java类,它的各个实例对象分别对应什么呢?
对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等。
一个类被类加载器加载到内存中,占用一片存储空间,这个空间里的内容就是字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间分别用一个个的对象来表示,这些对象显然具有同样的类型,这个类型是什么呢?
如何得到各个字节码对应的实例对象(Class类型)
类名.class,例如 System.class//通过类名得到字节码实例
对象.getClass(),例如 new Date().getClass();//通过实例得到字节码实例
Class.forName("类名"); Class.forName("java.util.Date");//适合于类字节码尚未加载到内存的情况下
java.util.Date是一个字符串,如果事先不知道将加载哪个类,就传一个String,动态的加载字符串指定的类字节码。
八个基本类型和void也对应表现为自己的Class字节码对象。
Class cls1=int.class;
Class cls2=void.class;
数组类型 的Class实例对象
Class.isArray()
package com.itcast.day1;
public class ReflectTest {
public static void main(String[] args)throws Exception {
//分别用三种方式得到 String类在内存中的字节码
Class cls1=String.class;//01. 类名.class
String str="123";
Class cls2=str.getClass();//02. 实例.getClass()
String classUrl="java.lang.String";
Class cls3=Class.forName(classUrl);//03. Class.forName(类名)
//三种方法是得到了同一份字节码。
System.out.println(cls1 == cls2);//true
System.out.println(cls1 == cls3);//true
System.out.println(cls1.isPrimitive());//false,不是基本类型的字节码
System.out.println(int.class.isPrimitive());//true 基本类型的字节码
System.out.println(int.class == Integer.class);//false 基本类型和包装类型不是一份字节码
System.out.println(int.class == Integer.TYPE);//true Integer.TYPE就代表包装对应的基本类型的字节码
System.out.println(int[].class.isPrimitive());//false 数组也是一种类型,但不是基本类型
System.out.println(int[].class.isArray());//true 是否是数组
}
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统