java反射基本概念

原创 2016年08月28日 16:19:19

java反射基本概念


1.java反射入口

   在java程序中,任何对象都有其对应的Class,而Class是通向java反射的一道大门。
在java中获取Class有三种方式:1.通过对象的getClass()方法;2.通过类的.class属性;3.通过Class的方法
public static Class<?> forName(String className)2

/*
 * Copyright 2016    https://github.com/sdcuike Inc. 
 * All rights reserved.
 *
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.doctor.reflect;

import java.util.Vector;

/**
 * @author sdcuike
 *
 *         Created At 2016年8月28日 下午2:55:57
 * 
 *         在java中获取Class有两种方式
 */
public class HowGetClass {

    /**
     * 在java中获取Class有两种方式
     * 
     * @param args
     */
    public static void main(String[] args) {
        // 1.
        @SuppressWarnings("rawtypes")
        Class vectorClass = Vector.class;
        System.out.println(vectorClass);// class java.util.Vector
        System.out.println(vectorClass.getName());// java.util.Vector
        System.out.println(vectorClass.getSimpleName());// Vector
        System.out.println(vectorClass.getCanonicalName());// java.util.Vector

        // 2.
        Vector<Object> vector = new Vector<>();
        @SuppressWarnings("rawtypes")
        Class<? extends Vector> vectorClass2 = vector.getClass();
        System.out.println(vectorClass2);// class java.util.Vector
    }

}

2. Class类的实例有几种类型

Instances of the class Class represent classes and interfaces in a running Java application. An enum is a kind of class and an annotation is a kind of interface. Every array also belongs to a class that is reflected as a Class object that is shared by all arrays with the same element type and number of dimensions. The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects. 

Class has no public constructor. Instead Class objects are constructed automatically by the Java Virtual Machine as classes are loaded and by calls to the defineClass method in the class loader.

上述源自jdk文档。
Class类的实例在java应用中主要体现jdk自带的和我们自定义类的实例及接口。枚举是一种特别的类(反编译后可知枚举是java的语法糖效果),注解其实也是一种特殊的接口。java的原生类型及数组、void关键字都是Class类的实例。

Class类没有构造函数,它的实例化主要由java虚拟机负责。


/**
 * @author sdcuike
 *
 *         Created At 2016年8月28日 下午4:03:21
 */
public class ClassTypeRepresentation {

    public static void main(String[] args) {
        System.out.println(int.class.isPrimitive());// true
        System.out.println(Collection.class.isInterface());// true
        System.out.println(Object[].class.isArray());// true
        System.out.println(int[].class.getComponentType());// int
        System.out.println(DemoInterface.class.isInterface());// true
        System.out.println(DemoInterface.class.isAnnotation());// true
        System.out.println(void.class.isPrimitive());// true

    }

    public static @interface DemoInterface {
        String value() default "";
    }

}



     
版权声明:本文为博主原创文章,未经博主允许不得转载[http://blog.csdn.net/doctor_who2004]。

相关文章推荐

Java进阶之reflection(反射机制)——反射概念与基础

这里写链接内容  反射机制是Java动态性之一,而说到动态性首先得了解动态语言。那么何为动态语言?一、动态语言动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的...
  • xu__cg
  • xu__cg
  • 2016-10-20 22:00
  • 2056

java基础之继承和多态概念

java基础之继承和多态概念 Inheritance Inheritance is a reusability mechanism in object-oriented programming....

Java反射机制的基本概念与使用

本篇文章分为以下几个部分: 1.认识反射 2.利用反射操作构造方法 3.利用反射调用类中的方法 4.反射中的invoke方法 5.利用反射调用类中的属性 反射在我们普通程序开发中基本使用不到,但是在我...

java反射之dynamic invocation与原生类型

java反射之dynamic invocation与原生类型 java中的方法参数或者返回值可能为原生类型,反射调用方法的时候,理解在反射invoke方法中如何使用原生类型很重要。        ...

java7新特性之Try-with-resources (TWR)

java7新特性之Try-with-resources (TWR) This change is easy to explain, but it has proved to have hidden...

经常逛的IT博客--持续更新ing.......

博客收藏

java并发基础之The volatile keyword

java并发基础之The volatile keyword Why synchronized? One of the biggest changes in concurrent pro...

Java反射的概念

反射 1、概念:反射是说在程序运行期间, 对于一个类来说, 可以获取他的属性和方法, 对于一个对象来说, 可以调用他的成员属性和方法. 2、java的默认加载器有3个: 1).BootStrap...

Java反射概念及类的反射

Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接

JDK8 十大新特性详解

本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)