本文目录一览:
java反射机制详解
反射就是把Java的各种成分映射成相应的Java类。
Class类的构造方法是private,由JVM创建。
反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。(来自Sun)
JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。
反射是从1.2就有的,后面的三大框架都会用到反射机制,涉及到类”Class”,无法直接new CLass(),其对象是内存里的一份字节码.
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
基本的 Java类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。Class 没有公共构造方法。
Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
Person p1 = new Person();
//下面的这三种方式都可以得到字节码
CLass c1 = Date.class();
p1.getClass();
//若存在则加载,否则新建,往往使用第三种,类的名字在写源程序时不需要知道,到运行时再传递过来
Class.forName(“java.lang.String”);
Class.forName()字节码已经加载到java虚拟机中,去得到字节码;java虚拟机中还没有生成字节码 用类加载器进行加载,加载的字节码缓冲到虚拟机中。
另外,大家可以关注微信公众号Java技术栈回复:JVM,获取我整理的系列JVM教程,都是干货。
考虑下面这个简单的例子,让我们看看 reflection 是如何工作的。
import java.lang.reflect.*;
public class DumpMethods {
public static void main(String args[]) {
try {
Class c = Class.forName(“java.util.Stack”);
Method m[] = c.getDeclaredMethods();
for (int i = 0; i m.length; i++)
System.out.println(m[i].toString());
}
catch (Throwable e){
System.err.println(e);
}
}
}
public synchronized java.lang.Object java.util.Stack.pop()
public java.lang.Object java.util.Stack.push(java.lang.Object)
public boolean java.util.Stack.empty()
public synchronized java.lang.Object java.util.Stack.peek()
public synchronized int java.util.Stack.search(java.lang.Object)
这样就列出了java.util.Stack 类的各方法名以及它们的限制符和返回类型。这个程序使用 Class.forName 载入指定的类,然后调用 getDeclaredMethods 来获取这个类中定义了的方法列表。java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类。
以下示例使用 Class 对象来显示对象的类名:
void printClassName(Object obj) {
System.out.println(“The class of ” + obj +
” is ” + obj.getClass().getName());
}
还可以使用一个类字面值(JLS Section 15.8.2)来获取指定类型(或 void)的 Class 对象。例如:
System.out.println(“The name of class Foo is: “+Foo.class.getName());
在没有对象实例的时候,主要有两种办法。
//获得类类型的两种方式
Class cls1 = Role.class;
Class cls2 = Class.forName(“yui.Role”);
注意第二种方式中,forName中的参数一定是完整的类名(包名+类名),并且这个方法需要捕获异常。现在得到cls1就可以创建一个Role类的实例了,利用Class的newInstance方法相当于调用类的默认的构造器。
Object o = cls1.newInstance();
//创建一个实例
//Object o1 = new Role(); //与上面的方法等价
学习Java具体都要学什么内容?
目前java学习除了在高校的专业中学习,还有自学和报班学习两种途径,根据每个人的情况最合适的学习方式是不同的。学习java只要掌握好方式和方法,其实学起来并不是非常难。
java学的内容主要有:
①JAVA编程基础(基础语法、面向对象、和谐特性等)
②WEB应用开发(静态网页制作、Oracle数据库、Java Web开发技术、Linux技术、网站性能与安全、软件工程开发流程、Java Web和谐等)
③企业级框架开发(数据结构与算法、SSH框架、JavaEE和谐等)
④项目实训
你可以考察对比一下开设有IT专业的热门学校,好的学校拥有根据当下大型企业需求自主研发课程的能力,建议实地考察对比一下。祝你学有所成,望采纳。
昆明Java培训:详解Java和C语言的区别在哪里?
1Java与C语言各自的优势C语言是面向过程的语言,执行效率高;Java是面向对象的语言,执行效率比C语言低。
C语言最关键的是比Java多了指针,这也说明了Java的健壮性,还有Java的多线程机制使程序可以并行运行,Java程序多用于网络。
C语言的安全性不如Java,C语言没有Java的垃圾回收机制,申请的空间要手动释放。
Java的通用性好,可以跨平台直接移植,只要有安装Java虚拟机(JVM)就可以了。
2Java和C语言谁的通用性会比较好在速度上,C语言编写的程序要优于Java,因为Java必须运行在虚拟机的环境中,但是因为虚拟机,Java获得的平台无关性,而C语言的程序有可能需要重新修改编译才能实现平台的移植,另一方面,C语言比Java语言更“底层”,因此可以用C编写例如硬件的驱动,而Java却不行。
Java和C语言还有个明显的不同就是C语言注重的是算法,但是Java却不一样,想用的时候导包就可以了。
C语言的算法很重要,但是Java中的算法没有C语言那么复杂。
打印的方法:C语言是printf(“??.”);而Java是System.out.print(“??.”),也可以用println,ln表示换行。
Java程序中的基本数据类型(boolean,char,byte,short,int,long,float,double),是对对象的引用;C语言也有许多种基本类型,还有struct,union,enum,数组和指针。
在Java没有枚举、联合类型。
Java采用Unicode字符集,C语言通常采用的是ASCII字符集,A—65,a—97。
C语言的变量可以不进行初始化,但Java的变量要进行初始化。
在C语言中,char类型占一个字节,在Java中char类型占2个字节。
3Java和C语言各自的特征Java面向对象的特征主要有封装,继承,多态。
类的继承关系是单一的、非多重的,一个子类只有一个父类,子类的父类又只有一个父类。
C语言支持“运算符的重载”,这是它的一个很重要的多态特征,是数据抽象和泛型编程的利器。
它允许直接对对象进行四则运算,正像基本数据类型那样Java不支持这种多态机制,也是为降低复杂性。
Java可以支持方法重载和重写,所谓重载就是一个类具备多个相同属性行为;重写就是在继承关系中父类的行为在不同的子类上有不同的实现。
在Java中比C语言多了一些修饰符,如访问修饰符Public(公共的)、Private(私有的)、Protected(受保护的)、默认。
Java有super关键字,指代父类对象,通常被用于调用父类的构造方法或一般方法C语言则没有super关键字,两者都有this,指代当前对象。
在Java中,除了static、final、private是静态绑定以外,所有方法一律按动态绑定处理。
Java中可以将类组织起来用Package打包,而C语言没有。
Java的来源是什么?
1.Java名字的由来,实际上是一个有趣的故事;
2.我们所见到的Java标志,总是一杯热咖啡,这杯热咖啡你很难与计算机编程联想到一起。这杯热咖啡、Java这个名字的由来,是Java创始人员团队中其中一名成员由于灵感想到的;
3.想起自己在Java岛(爪哇岛)上曾喝过一种美味的咖啡,于是这种计算机编程语言就命名为Java,与此同时它的标起来是我们最熟悉不过的一杯热咖啡。
延展阅读
Java的特点:
1.java的风格类似C++,从某种意义上讲,java是C++的一个变种;
2.java摒弃了C、C++中的容易引发错误和难以理解的指针,结构,以及内存管理等;
3.java提供了丰富的类库,很方便开发程序;
4.java是完全面向对象的语言,支持 继承,重载,多态等面向对象的特性;
5.C++是面向对象和面向过程的混合语言, C是纯面向过程的语言;
6.java是一种强类型的语言,比C/C++检查还要严格,java区分大小写字母;
7.java提供了自动垃圾回收机制gc,有效避免了C、C++的内存泄漏问题;
8.java禁止非法访问内存,因为java没有指针,内存的申请和释放;
9.跨平台,java的源代码编译成结构中立的中间格式,这种格式与机器无关,只要在安装有JVM(java虚拟机)的电脑上,都能运行这种与机器无关的中间文件;java一次编译,到处运行;
10.对于不同的操作系统,会有不同的java虚拟机,这也就决定了java的可移植性;
11.java支持多线程,简单理解,如果是单核CPU,那么会通过时间片轮转的方式,多线程执行程序,如果是多核CPU,那么就可以理解为,两个或多个线程同时运行。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/239756.html