首页 > 编程语言 >Java中class对象的学习

Java中class对象的学习

时间:2024-10-12 08:59:58浏览次数:7  
标签:Java 对象 System Class 获取 println class modifierid out

Class对象


目录

获取class对象的三种方法

Class对象包括一个类的方法、变量、接口、类名、类修饰符等等信息,获取Class对象有三种方法。

  1. 对象.getClass方法
  2. 类名.class属性
  3. Class的forName方法,参数为类的全路径
		//获取Class对象的三种方法
        Test test = new Test();
        Class c1 = test.getClass();
        Class c2=Test.class;
        Class c3=Class.forName("ClassTest.Test");

获取类的各种信息

获取类名

 //获取类名
    String name=c1.getName();
    String simplename=c1.getSimpleName();
    System.out.println("类名(带包名称):"+name);
    System.out.println("类名(不带包名称):"+simplename);

获取类修饰符

  //获取类修饰符
    int modifierid=c1.getModifiers();
    //通过返回int值判断是否是某一修饰符
    boolean isPublic=Modifier.isPublic(modifierid);
    boolean isPrivate=Modifier.isPrivate(modifierid);
    boolean isAbstract=Modifier.isAbstract(modifierid);
    boolean isFinal=Modifier.isFinal(modifierid);
    boolean isInterface=Modifier.isInterface(modifierid);

    System.out.println(modifierid+"是否public:"+isPublic);
    System.out.println(modifierid+"是否Private:"+isPrivate);
    System.out.println(modifierid+"是否Abstract:"+isAbstract);
    System.out.println(modifierid+"是否Final:"+isFinal);
    System.out.println(modifierid+"是否Interface:"+isInterface);

获取包的信息

	//获取包信息
    Package pack=c1.getPackage();
    System.out.println("包信息:"+pack.getName());

获取父类的class对象

	//获取父类的Class对象
	Class parentclass=c1.getSuperclass();
	System.out.println("父类对象:"+parentclass.getName());

获取接口信息

	//获取接口信息
    Class [] interfacename=c1.getInterfaces();
    for (Class c:interfacename)
            System.out.println("实现接口:"+c.getName());

构造函数Constructor

		//获取构造函数Constructor
        Constructor [] constructors=c1.getConstructors();
        for (Constructor constructor:constructors){
            System.out.print("构造方法名称:"+constructor.getName());
            Class[] parameterTypes = constructor.getParameterTypes();
            for (Class parameterType:parameterTypes){
                System.out.print("\t构造方法参数:"+parameterType.getName());
            }
            System.out.println();
        }

两种创建对象的方式

使用Class.forName()加载类并创建对象

首先,你需要使用Class.forName()方法加载类的Class对象,然后可以使用这个Class对象的newInstance()方法(注意:在Java 9及更高版本中,newInstance()方法已被标记为过时,推荐使用getDeclaredConstructor()方法)来创建类的实例。

try {  
    // 加载类并创建其实例  
    Class<?> clazz = Class.forName("com.example.MyClass");  
    Object instance = clazz.getDeclaredConstructor().newInstance(); // Java 9之前  
      
    // Java 9及更高版本推荐使用的方式  
    // Constructor<?> constructor = clazz.getDeclaredConstructor();  
    // constructor.setAccessible(true); // 如果构造器是私有的,则需要设置可访问性  
    // Object instance = constructor.newInstance();  
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) {  
    e.printStackTrace();  
}

使用Class.forName()加载类,并调用特定的构造器

如果你需要调用类的特定构造器(比如带有参数的构造器),你可以使用getDeclaredConstructor(Class<?>... parameterTypes)方法来获取该构造器的Constructor对象,然后调用newInstance(Object... initargs)方法创建对象。

try {  
    Class<?> clazz = Class.forName("com.example.MyClass");  
    // 假设MyClass有一个接受String参数的构造器  
    Constructor<?> constructor = clazz.getDeclaredConstructor(String.class);  
    Object instance = constructor.newInstance("Hello, World!");  
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) {  
    e.printStackTrace();  
}

标签:Java,对象,System,Class,获取,println,class,modifierid,out
From: https://www.cnblogs.com/BingBing-8888/p/18459777

相关文章

  • 基于nodejs+vue基于JAVA的城镇社区服务管理平台[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,城镇化进程的加快,社区服务管理面临着前所未有的挑战与机遇。传统的社区服务管理模式存在信息不透明、服务效率低、居民参与度不高等......
  • 基于nodejs+vue基于Java的超市进销存系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和商业竞争的日益激烈,超市作为零售业的重要组成部分,其管理效率和服务质量直接关系到企业的生存与发展。传统的超市进销存管理往往依......
  • 基于nodejs+vue基于Java的比亚迪汽车大数据评分系统[开题+源码+程序+论文]计算机毕业
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,大数据技术在各行各业中的应用日益广泛。汽车行业作为国民经济的重要支柱,其数据规模庞大且复杂。比亚迪作为中国新能源汽车的领军企......
  • 理解Java中的面向对象
    文章目录前言1封装性1.1C语言中的封装1.2Java中的封装1.2.1基本概念1.2.2类的使用方法1.2.2.1构造方法1.2.2.2对象的创建与使用1.2.3访问权限2继承性3多态性3.1方法重写3.2方法重载总结前言面向对象与面向过程是当今编程世界的两种编程思想,面向过程......
  • JavaScript-条件运算符
    条件运算符条件运算符主要是通过if和问号(?)实现。if语句if语句后面小括号内是判断条件,之后大括号内是在判断条件为真的情况下执行的语句内容。if后面可以接着跟elseif,也可以跟else,但是else必须放在最后,即所有的if和elseif都执行完了之后才能是else。注意在多个ifelse判断的语句......
  • Javascript笔试题目(一)
    1.JS查找文章中出现频率最高的单词?要在JavaScript中查找文章中出现频率最高的单词,你可以按照以下步骤进行操作:将文章转换为小写:这可以确保单词的比较是大小写不敏感的。移除标点符号:标点符号会干扰单词的计数。将文章拆分成单词:可以使用空格或其他分隔符来拆分。统计每个单......
  • springboot+vue+java高中素质评价档案系统ssm
    目录功能和技术介绍系统实现截图技术范围开发核心技术介绍:代码执行流程核心代码部分展示系统测试其他springboot项目推荐详细视频演示源码获取功能和技术介绍探索如何设计一个用户友好、响应迅速的系统界面,确保系统后端逻辑的高效和稳定性。研究如何通过SpringBoot......
  • 毕设项目案例实战II基于Java+Spring Boot+MySQL的学生选课系统的设计与实现(源码+数据
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着信息技术的飞速发展和教育信息化的不......
  • JavaWeb三大组件之Servlet
    1.Servlet一、Servlet介绍1、概念Servlet(ServerApplet)是JavaServlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。2、实现过程1.客户端发送请求至服务器端;2.服务器......
  • Java使用idea自动生成CRUD代码
    要在IntelliJIDEA中自动生成CRUD代码,你可以使用Lombok插件和MyBatis-Plus插件。以下是具体步骤:首先,确保你已经安装了IntelliJIDEA。如果没有,请从官网下载并安装:https://www.jetbrains.com/idea/download/打开IntelliJIDEA,点击菜单栏的File>Settings(或者使用快捷键Ctrl+Alt+S),在......