`
Andyan_java
  • 浏览: 14682 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

检查类的修饰符和类型

阅读更多
一个类可以被申明一个到多个影响它运行时行为的修饰符.
访问修饰符:public,protected,private;
需要重写的修饰符:abstract;
限制一个实例的修饰符的static;
禁止被修改的修饰符:final;
强制准确的浮点行为的strictfp;
注解

这些修饰符不是对所有的类都适合.如一个接口就不能为final,一个枚举不能是抽象的.java.lang.reflect.Modifier包含了所有可能的修饰符申明.

import java.lang.annotation.Annotation;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;

public class ClassDeclarationSpy {
		public static void main(String... args) {
				try {
						Class<?> c = Class.forName(args[0]);
						out.format("Class:%n %s%n%n", c.getCanonicalName());
						out.format("Modifiers:%n %s%n%n", 
												Modifier.toString(c.getModifiers()));
						out.format("Type Parameters:%n");
						TypeVariable[] tv = c.getTypeParameters();
						if(tv.length != 0) {
								out.format(" ");
								for(TypeVariable t : tv)
										out.format("%s", t.getName());
								out.format("%n%n");	
						}	else {
								out.format(" -- No Type Parameters -- %n%n");	
						}
						out.format("Inheritance Path: %n");
						List<Class> l = new ArrayList<Class>();
						printAncestor(c,l);
						if(l.size() !=0) {
								for(Class<?> cl:l)
										out.format(" %s%n",cl.getCanonicalName());
								out.format("%n");		
						}else {
								out.format(" -- No Super Classes -- %n%n");	
						}
						
						out.format("Annotations:%n");
						Annotation[] ann = c.getAnnotations();
						if(ann.length!=0) {
								for(Annotation a : ann) 
										out.format(" %s%n",a.toString());
								out.format("%n");	
						}else {
								out.format(" -- No Annotations -- %n%n");	
						} 
						
				} catch(ClassNotFoundException x ) {
						x.printStackTrace();	
				}	
		}	
		private static void printAncestor(Class<?> c,List<Class> l) {
				Class<?> ancestor = c.getSuperclass();
				if(ancestor != null) {
						l.add(ancestor);
						printAncestor(ancestor,l);	
				}	
		}
}
分享到:
评论

相关推荐

    C#关键字修饰符

    在Visual Studio的智能感知功能中,每个关键字和修饰符都有特定的图标,有助于开发者快速识别和使用。例如,`delegate`的图标代表事件处理程序的定义,而`async`和`await`则与异步编程相关联。通过深入学习和实践,...

    C++:浅谈修饰符const

    3. const修饰符的基本用法:const关键字可以用于基本数据类型变量、指针、类成员函数等多种场合。它可以修饰数据和函数,表达不同的含义,例如使变量的值不可变,或限定函数的参数或返回值不被修改。 4. const修饰...

    Java基础知识复习02:从修饰符到反射注解.pdf

    在Java编程语言中,修饰符、参数传递、内部类和接口是构建面向对象程序的基本概念。以下是对所提供文档内容中涉及知识点的详细讲解: ### 1. 四种权限修饰符 Java提供了四种访问修饰符来控制类、变量、方法和构造器...

    05-python-迭代器-生成器-with语句和上下文管理器-修饰符

    在Python编程语言中,迭代器、生成器、with语句和上下文管理器以及修饰符是四个非常重要的概念,它们在处理数据流和资源管理时起着关键作用。以下是关于这些知识点的详细解释: 1. **迭代器**: - 迭代器是一种...

    C语言的那些小秘密之const修饰符

    在C语言中,`const`修饰符是一个非常重要的特性,它可以帮助我们创建不可变的变量,提高代码的可读性和安全性。本文将深入探讨`const`修饰符的使用及其背后的原理。 `const`修饰符的基本概念是声明一个常量,即一旦...

    C#语法糖系列 —— 第二篇:聊聊 ref,in 修饰符底层玩法.doc

    本文将深入探讨`ref`与`in`修饰符在C#中的应用以及它们背后的实现机制,尤其关注方法参数和返回值上的用法。 #### 二、方法参数上的`ref` 在C#中,`ref`关键字用于声明方法参数为引用类型,即参数实际上是变量的...

    C#的关键字大全

    访问修饰符用于修改类型和类型成员的声明,指定声明的类型和类型成员的可访问性。 * public:公共访问修饰符,允许访问的最高级别。 * private:私有访问修饰符,私有访问是允许访问的最低级别,只能在声明它们的类...

    blork:Javascript 中的参数检查

    前缀和返回类型修饰符 OR 和 AND 类型修饰符 路线图和想法 贡献 变更日志 安装 npm install blork 基本用法 check():检查单个值 check()函数允许您测试单个值是否对应于一个类型,如果不是,则抛出一个TypeError...

    cocktail-method-modifiers:类似 Moose 的方法修饰符作为cocktailJS 注释(见http

    在JavaScript的世界里,Moose是一种面向对象的框架,它提供了类似于类和方法修饰符的功能,使得代码更加模块化和易于维护。而CocktailJS是一个轻量级的库,它借鉴了Moose的一些特性,特别是在注释中实现方法修饰符这...

    JAVA类与对象及数组习题.pdf

    解释:在 Java 中,private 修饰符可以使得成员变量只能被当前类访问,而 public 修饰符可以使得成员变量被所有类访问。 10. 正确的语句是()A.t.f 解释:在 Java 中,使用点号可以访问对象的成员变量。 11. ...

    Idea 代码实现类无效引用解决方案 .docx

    Checkstyle 插件可以检查类及方法的 Javadoc 注释、命名约定、标题、Import 语句、代码块大小、空白、修饰符、块、代码问题和类设计等多个方面的代码规范性。 SonarLint 插件 SonarLint 插件是一个功能强大的插件...

    react-Reactprops和类似对象运行时类型检查

    `isRequired`修饰符确保在没有提供该prop时,会在开发模式下发出警告。 `prop-types`库还支持更复杂的类型检查,例如数组、对象、自定义对象或自定义函数的检查。例如,你可以定义一个期望包含特定属性的对象: ``...

    2012考试技术基础(C#)试题+答案

    本资源摘要信息涵盖了C#基础知识的主要要点,包括变量和数据类型、方法重载和方法重写、值类型和引用类型、访问修饰符、主函数和构造函数、事件处理、文件对话框和消息框、窗体边框和样式等方面的知识点。

    《java基础入门》第三版 第九章作业.doc

    Java 反射机制和类相关知识点 Java 反射机制是 Java 语言中一种动态加载类和方法的机制,它可以在运行时检查和修改类的结构和行为。反射机制提供了多种方法来获取类的信息,如获取构造方法、获取类的属性、获取类...

    Java基础关键字介绍.docx

    修饰符关键字用于控制类、方法和变量的访问权限和其他特性。 ##### 1. 访问修饰符 - **private**:私有修饰符,限制访问仅限于类内部。 - **protected**:保护修饰符,允许类本身、子类以及同一包中的其他类访问。 ...

    C#中的关键字

    * protected:访问修饰符,表示该成员可以在该类和其派生类中访问。 * internal:访问修饰符,表示该成员可以在该程序集中访问。 二、类和接口关键字 * abstract:定义抽象类或抽象成员。 * class:定义类。 * ...

    C#公共变量测试,多类访问

    1. `public`:公共访问修饰符,允许所有类访问。 2. `private`:私有访问修饰符,只允许在同一类内部访问。 3. `protected`:受保护访问修饰符,允许同一类或其子类访问。 4. `internal`:程序集访问修饰符,只允许...

    java scjp考点

    - 可用于类的修饰符包括 `public` 和 `default`。 - 具有默认访问权限的类仅对同一包内的类可见。 - 公共类对所有包内所有类可见。 - 类的可见性影响了其他类能否创建其实例、扩展或访问其方法和变量。 4. **非...

    C中的关键字大全.pdf

    修饰符是用于修改类型和类型成员的声明的关键字。它们指定了类型和类型成员的可访问性。这些修饰符包括: * public:公共访问是允许访问的最高级别 * private:私有访问是允许访问的最低级别,只能在声明它们的类或...

    java期末考试试题含复习资料

    public 修饰符表示类可以被所有类访问,private 修饰符表示类只能被自己访问,protected 修饰符表示类可以被自己和子类访问。 9. 方法重载 方法重载是一种机制,允许多个方法具有相同的名称,但具有不同的参数列表...

Global site tag (gtag.js) - Google Analytics