java 类,基本类型,反射

1、首先java中每个类对象都有一个类字节码,都属于Class.

  java的9大基本数据类型:int、short、long、float、double、char、byte、boolen和void。它们对应的类与其对应的类对象是不一样的,如int.class==Integer.class返回false,但是Integer包装的基本数据类型是int,因此Integer.Type==int.class返回的是true。判断一个类是否基本数据类型 calss.isPrimitive()。基本数据类型的数组不是基本类型:即int[].class.isPrimitive返回false,int[].class.isArray返回true。

  基本数据类型的数组必须维数和类型相同得到的字节码类型才相同:

  

2、java反射,首先反射能够通过类名获取类的字节码,然后获取各个属性,方法,构造方法等类的一切。如下方法:得到了类对象,方法和属性当然可以对对象进行操作了。

 public static void  MyTest(String cl){  //要求用户输入类的全路径

	       try {
	           Class cla=Class.forName(cl);//根据类的全路径进行类加载,返回该类的Class对象
	                       Object o=cla.newInstance();//获取cla的对象,如果有有参数的构造函数则获取它的构造函数,然后创建。前提是对类有一定了解才用反射
	           Method[] method=cla.getDeclaredMethods();//利用得到的Class对象的自审,返回方法对象集合  

	           for(Method me:method){//遍历该类方法的集合
	              System.out.println(me.toString());//打印方法信息
	           }  

	           System.out.println("********");  

	           Field[] field=cla.getDeclaredFields();//利用得到的Class对象的自审,返回属性对象集合
	           for(Field me:field){ //遍历该类属性的集合
	              System.out.println(me.toString());//打印属性信息
	           }
	       } catch (ClassNotFoundException e) {
	           e.printStackTrace();
	       }
	    }

  3、反射作用:最简单的用处 我有很多个对象 每个都不一样 我需要将他们拼接成我要的标准绘图串 不管什么对象 构造有什么区别 我直接反射属性名和属性值进行我要的操作 一个方法适配所有类 没反射你要为每一个类去写一个方法 因为每个类里面的属性名都不一样 不知道属性名就没法写 但有了反射 你一个属性名都不需要知道。比如:数据库里有很多个表格,每一个表格都有自己的属性,且属性的个数也不一样;同时没个表格都有相应的增删改查的操作,若不用反射你就必须每一个表格写一个增删改查的方法,麻烦切代码冗余大。利用反射,把类的参数传递进来(和上面的方法一样),这样得到所有的属性就可以相应的操作,就只需要写一次增删改查了。

时间: 2024-12-06 10:00:42

java 类,基本类型,反射的相关文章

java 类文件类型

我们所看到的Java字节码是被封装在一个类文件中(扩展名为.class).在这个教程中,就让我们来看看类文件的内部构造. 数据是如何被写入类文件以及类文件的格式是怎样的呢,让我们首先图解看一看Java类文件. Java类文件结构示意图:  上图描绘的Java类文件被分为了不同的区段,包括魔术码(magic).版本(version).常量池(constant pool).访问标识(access flags).(this)类.(super)类.接口(interfaces).域(fields).方法(

Java 类反射机制分析

一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 在Java中的反射机制,被称为Reflection.(大家看到这个单词,第一个想法应该就是去开发文档中搜一下了.)它允许运行中的Java程序对自身进行检查,并能直接操作程序的内部属性或方法.Reflection机制

异常处理、常用类、Java集合框架、反射

异常处理: 1.  异常:程序在执行过程中所产生的问题. 异常的三种类:①检查异常:又叫checdked异常或者受检异常.通常是用户错误或者不能被程序员所预见的问题.检查异常需要被解决之后才能通过编译. ②运行时异常:程序在运行过程中可能发生的.可以被程序员所避免的异常类型. ③错误:事实上错误不是异常,但却是用户和程序员无法控制的问题. 2.  异常的控制流程: 异常是被一个方法抛出的对象. (1) 处理异常的三个方法:①捕获这个异常,不让它沿着调用栈继续向下抛. ②捕获这个异常,并继续向下抛

java反射(四)--反射与简单java类

一.传统简单java类 简单的java类主要是由属性所组成,并且提供有相应的setter以及getter的处理方法,同时简单java类最大的特征就是通过对象保存相应的类的属性内容,但是如果使用传统的简单java类的开发,那么也会面临非常麻烦的困难: 1 class Emp{ 2 private String ename; 3 private String job; 4 5 public void setEname(String ename) { 6 this.ename = ename; 7 }

如何利用缓存机制实现JAVA类反射性能提升30倍

一次性能提高30倍的JAVA类反射性能优化实践 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第4期-支付结算部支付研发团队高级工程师陶红<JAVA类反射技术&优化> 分享者:宜信支付结算部支付研发团队高级工程师陶红 原文首发于宜信支付结算技术团队公号:野指针 在实际工作中的一些特定应用场景下,JAVA类反射是经常用到.必不可少的技术,在项目研发过程中,我们也遇到了不得不运用JAVA类反射技术的业务需求,并且不可避免地面临这个技术固有的性能瓶颈问题. 通过近两年的研究.尝

java类继承总结一 父类类型与子类类型之间的转化问题(转)

java类继承总结一 父类类型与子类类型之间的转化问题 本文将通过一个实例描述父类类型与子类类型之间的转化问题,这个很特殊的问题常常会导致一些潜在的危险,让你整整一个晚上都在调试程序以解决一个让人抓狂的java.lang.ArrayStoreException异常. 1. 子类数组的引用可以装换为超类数组的引用 2. 子类的引用child可以转换为父类的引用parent(这里假设parent是父类对象,child是子类对象),但却不可以通过 parent调用child的特有方法 class Em

利用反射来获取继承的类的类型

在做web项目的时候,通常都有一个 BaseDao,BaseAction之类的,比如最近在学习一个 ssh项目,其中就要注入 dao,还有利用 模型驱动 来实现将 jsp页面封装成一个model,传到action中,因为表单,对应的 model也不同,所以要分别注入.这样就可以在定义 BaseAction 时,采用反射的方式,就可以自动获取继承类的类型了. public abstract class BaseAction<T> extends ActionSupport implements

跟王老师学反射(二):Java类的加载、连接和初始化

跟王老师学反射(二):Java类的加载.连接和初始化 主讲教师:王少华   QQ群号:483773664 学习内容: 了解类的加载.连接和初始化 一.类的生命周期 当我们编写一个java的源文件后,经过编译会生成一个后缀名为class的文件,这种文件叫做字节码文件,只有这种字节码文件才能够在java虚拟机中运行,java类的生命周期就是指一个class文件从加载到卸载的全过程.一个java类的完整的生命周期会经历加载.连接.初始化.使用.和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直

Java重要技术(6)反射之Class类

1.1. Class类 Class是一个Java类,用于描述Java类的类. 至少有以下三种方式获取一个类的Class对象实例. (1)通过Class.forName()方法. (2)通过类的静态成员class变量. (3)通过对象的getClass()方法. Class<ReflectionTest> clazz1 = null; try { clazz1 = (Class<ReflectionTest>)Class.forName("com.test.javatech

由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入

public class Arith { /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入. */ // 默认除法运算精度 private static final int DEF_DIV_SCALE = 10; // 这个类不能实例化 private Arith() { } /** * 提供精确的加法运算. * * @param v1 * 被加数 * @param v2 * 加数 * @return 两个参数的和 */ p