首页编程java编程java clazz什么意思 JAVA 类名.class是什么意思

java clazz什么意思 JAVA 类名.class是什么意思

编程之家 2023-10-14 97次浏览

老铁们,大家好,相信还有很多朋友对于java clazz什么意思和JAVA 类名.class是什么意思的相关问题不太懂,没关系,今天就由我来为大家分享分享java clazz什么意思以及JAVA 类名.class是什么意思的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

java clazz什么意思 JAVA 类名.class是什么意思

java中newinstance什么意思

1.new是java中的关键字,是创建一个新对象的关键字。用new这个关键字的话,是调用new指令创建一个对象,然后调用构造方法来初始化这个对象,如果反编译class的话,会看到一个Object obj=new Object();这种语句,会先调用new指令生成一个对象,然后调用dup来复制对象的引用,最后调用Object的构造方法。

2.newInstance不是关键字,newInstance()是java反射框架中类对象(Class)创建新对象的方法。在这个过程中,是先取了这个类的不带参数的构造方法,然后调用构造方法的newInstance来创建对象

名:Object java.lang.Class.newInstance();如: Class clazz= String.class;

java clazz什么意思 JAVA 类名.class是什么意思

Object newInstance= clazz.newInstance();

3.newInstance()也经常见于工厂设计模式中,在该模式中,共产类的该方法返回一个工厂bean。

如: Factory factory= new Factory();

java clazz什么意思 JAVA 类名.class是什么意思

Object obj= factory.newInstance();

4.严格意义上来讲,这两者并没有可比较性,因为一个是java的关键字,有明确的用法和定义。一个是经常使用,但非标准的方法名称。

JAVA 类名.class是什么意思

ConfMgr.class是获取ConfMgr的class对象,类型类指的是代表一个类型的类,因为一切皆是对象,几种获取class对象的方法:

1,所有的引用数据类型(类-类型)的类名、基本数据类型都可以通过.class方式获取其 Class对象。

对于基本数据类型的封装类还可以通过.TYPE的方式获取其 Class对象,但要注意。TYPE实际上获取的封装类对应的基本类型的 Class对象的引用。

那么你可以判断出int.class==Integer.TYPE返回 true,int.class==Integer.class返回 false!通过这种方式不会初始化静态域,使用.class、.TYPE的方式获取 Class对象叫做类的字面常量;

2,Class的 forName(String name)传入一个类的完整类路径也可以获得 Class对象。

由于使用的是字符串,必须强制转换才可以获取泛型的Class<T>的 Class对象,并且必须获取这个方法可能抛出的ClassNotFoundException异常。这种方法可以初始化静态域。

3,还可通过类的对象实例下的getClass()方法来获取Class对象,即实例名getClass()

扩展资料

在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。

每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。

当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类。

通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中。

通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用。

参考资料:Java-百度百科

java中的反射机制是什么有什么作用呢求解,谢谢。

Java反射机制详解

1.反射机制是什么

反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2.反射机制能做什么

反射机制主要提供了以下功能:

在运行时判断任意一个对象所属的类;

在运行时构造任意一个类的对象;

在运行时判断任意一个类所具有的成员变量和方法;

在运行时调用任意一个对象的方法;

生成动态代理。

3.反射机制的相关API

通过一个对象获得完整的包名和类名

packagenet.xsoftlab.baike;

publicclassTestReflect{

publicstaticvoidmain(String[]args)throwsException{

TestReflecttestReflect=newTestReflect();

System.out.println(testReflect.getClass().getName());

//结果net.xsoftlab.baike.TestReflect

}

}

实例化Class类对象

packagenet.xsoftlab.baike;

publicclassTestReflect{

publicstaticvoidmain(String[]args)throwsException{

Class<?>class1=null;

Class<?>class2=null;

Class<?>class3=null;

//一般采用这种形式

class1=Class.forName("net.xsoftlab.baike.TestReflect");

class2=newTestReflect().getClass();

class3=TestReflect.class;

System.out.println("类名称"+class1.getName());

System.out.println("类名称"+class2.getName());

System.out.println("类名称"+class3.getName());

}

}

获取一个对象的父类与实现的接口

packagenet.xsoftlab.baike;

importjava.io.Serializable;

publicclassTestReflectimplementsSerializable{

privatestaticfinallongserialVersionUID=-2862585049955236662L;

publicstaticvoidmain(String[]args)throwsException{

Class<?>clazz=Class.forName("net.xsoftlab.baike.TestReflect");

//取得父类

Class<?>parentClass=clazz.getSuperclass();

System.out.println("clazz的父类为:"+parentClass.getName());

//clazz的父类为:java.lang.Object

//获取所有的接口

Class<?>intes[]=clazz.getInterfaces();

System.out.println("clazz实现的接口有:");

for(inti=0;i<intes.length;i++){

System.out.println((i+1)+":"+intes[i].getName());

}

//clazz实现的接口有:

//1:java.io.Serializable

}

}

获取某个类中的全部构造函数-详见下例

通过反射机制实例化一个类的对象

packagenet.xsoftlab.baike;

importjava.lang.reflect.Constructor;

publicclassTestReflect{

publicstaticvoidmain(String[]args)throwsException{

Class<?>class1=null;

class1=Class.forName("net.xsoftlab.baike.User");

//第一种方法,实例化默认构造方法,调用set赋值

Useruser=(User)class1.newInstance();

user.setAge(20);

user.setName("Rollen");

System.out.println(user);

//结果User[age=20,name=Rollen]

//第二种方法取得全部的构造函数使用构造函数赋值

Constructor<?>cons[]=class1.getConstructors();

//查看每个构造方法需要的参数

for(inti=0;i<cons.length;i++){

Class<?>clazzs[]=cons[i].getParameterTypes();

System.out.print("cons["+i+"](");

for(intj=0;j<clazzs.length;j++){

if(j==clazzs.length-1)

System.out.print(clazzs[j].getName());

else

System.out.print(clazzs[j].getName()+",");

}

System.out.println(")");

}

//结果

//cons[0](java.lang.String)

//cons[1](int,java.lang.String)

//cons[2]()

user=(User)cons[0].newInstance("Rollen");

System.out.println(user);

//结果User[age=0,name=Rollen]

user=(User)cons[1].newInstance(20,"Rollen");

System.out.println(user);

//结果User[age=20,name=Rollen]

}

}

classUser{

privateintage;

privateStringname;

publicUser(){

super();

}

publicUser(Stringname){

super();

this.name=name;

}

publicUser(intage,Stringname){

super();

this.age=age;

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

@Override

publicStringtoString(){

return"User[age="+age+",name="+name+"]";

}

}

获取某个类的全部属性

packagenet.xsoftlab.baike;

importjava.io.Serializable;

importjava.lang.reflect.Field;

importjava.lang.reflect.Modifier;

publicclassTestReflectimplementsSerializable{

privatestaticfinallongserialVersionUID=-2862585049955236662L;

publicstaticvoidmain(String[]args)throwsException{

Class<?>clazz=Class.forName("net.xsoftlab.baike.TestReflect");

System.out.println("===============本类属性===============");

//取得本类的全部属性

Field[]field=clazz.getDeclaredFields();

for(inti=0;i<field.length;i++){

//权限修饰符

intmo=field[i].getModifiers();

Stringpriv=Modifier.toString(mo);

//属性类型

Class<?>type=field[i].getType();

System.out.println(priv+""+type.getName()+""+field[i].getName()+";");

}

System.out.println("==========实现的接口或者父类的属性==========");

//取得实现的接口或者父类的属性

Field[]filed1=clazz.getFields();

for(intj=0;j<filed1.length;j++){

//权限修饰符

intmo=filed1[j].getModifiers();

Stringpriv=Modifier.toString(mo);

//属性类型

Class<?>type=filed1[j].getType();

System.out.println(priv+""+type.getName()+""+filed1[j].getName()+";");

}

}

}

通过反射机制调用某个类的方法

packagenet.xsoftlab.baike;

importjava.lang.reflect.Method;

publicclassTestReflect{

publicstaticvoidmain(String[]args)throwsException{

Class<?>clazz=Class.forName("net.xsoftlab.baike.TestReflect");

//调用TestReflect类中的reflect1方法

Methodmethod=clazz.getMethod("reflect1");

method.invoke(clazz.newInstance());

//Java反射机制-调用某个类的方法1.

//调用TestReflect的reflect2方法

method=clazz.getMethod("reflect2",int.class,String.class);

method.invoke(clazz.newInstance(),20,"张三");

//Java反射机制-调用某个类的方法2.

//age->20.name->张三

}

publicvoidreflect1(){

System.out.println("Java反射机制-调用某个类的方法1.");

}

publicvoidreflect2(intage,Stringname){

System.out.println("Java反射机制-调用某个类的方法2.");

System.out.println("age->"+age+".name->"+name);

}

}

通过反射机制操作某个类的属性

packagenet.xsoftlab.baike;

importjava.lang.reflect.Field;

publicclassTestReflect{

privateStringproprety=null;

publicstaticvoidmain(String[]args)throwsException{

Class<?>clazz=Class.forName("net.xsoftlab.baike.TestReflect");

Objectobj=clazz.newInstance();

//可以直接对private的属性赋值

Fieldfield=clazz.getDeclaredField("proprety");

field.setAccessible(true);

field.set(obj,"Java反射机制");

System.out.println(field.get(obj));

}

}

4.反射机制的应用实例

在泛型为Integer的ArrayList中存放一个String类型的对象。

packagenet.xsoftlab.baike;

importjava.lang.reflect.Method;

importjava.util.ArrayList;

publicclassTestReflect{

publicstaticvoidmain(String[]args)throwsException{

ArrayList<Integer>list=newArrayList<Integer>();

Methodmethod=list.getClass().getMethod("add",Object.class);

method.invoke(list,"Java反射机制实例。");

System.out.println(list.get(0));

}

}

通过反射取得并修改数组的信息

packagenet.xsoftlab.baike;

importjava.lang.reflect.Array;

publicclassTestReflect{

publicstaticvoidmain(String[]args)throwsException{

int[]temp={1,2,3,4,5};

Class<?>demo=temp.getClass().getComponentType();

System.out.println("数组类型:"+demo.getName());

System.out.println("数组长度"+Array.getLength(temp));

System.out.println("数组的第一个元素:"+Array.get(temp,0));

Array.set(temp,0,100);

System.out.println("修改之后数组第一个元素为:"+Array.get(temp,0));

}

}

将反射机制应用于工厂模式

packagenet.xsoftlab.baike;

interfacefruit{

publicabstractvoideat();

}

classAppleimplementsfruit{

publicvoideat(){

System.out.println("Apple");

}

}

classOrangeimplementsfruit{

publicvoideat(){

System.out.println("Orange");

}

}

classFactory{

publicstaticfruitgetInstance(StringClassName){

fruitf=null;

try{

f=(fruit)Class.forName(ClassName).newInstance();

}catch(Exceptione){

e.printStackTrace();

}

returnf;

}

}

/**

*对于普通的工厂模式当我们在添加一个子类的时候,就需要对应的修改工厂类。当我们添加很多的子类的时候,会很麻烦。

*Java工厂模式可以参考

*http://baike.xsoftlab.net/view/java-factory-pattern

*

*现在我们利用反射机制实现工厂模式,可以在不修改工厂类的情况下添加任意多个子类。

*

*但是有一点仍然很麻烦,就是需要知道完整的包名和类名,这里可以使用properties配置文件来完成。

*

*java读取properties配置文件的方法可以参考

*http://baike.xsoftlab.net/view/java-read-the-properties-configuration-file

*

*@authorxsoftlab.net

*/

publicclassTestReflect{

publicstaticvoidmain(String[]args)throwsException{

fruitf=Factory.getInstance("net.xsoftlab.baike.Apple");

if(f!=null){

f.eat();

}

}

}

我有一个微信公众号,经常会分享一些Java技术相关的干货,还有一些学习资源。

如果你喜欢我的分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。

java.io.IOException是怎么回事

IOException的故事

1.什么是IOException

这个你可以看看API

http://download.oracle.com/javase/6/docs/api/java/io/IOException.html

2.广泛的说,什么时候会有IOException

比如你文件都不到的时候

你在做数据库操作的时候数据库底层出现问题

或者你系统IO出问题了

系统拿不到文件句柄

你说的读着读着突然被删了,你可以试试,书不定真可以

你可以看有多少IOExeption个子类,差不多就有多少种类型

3.为什么我要捕获IOExeption

为什么要有checked exception,这个是java设计的问题,暂不深究

但是这个IOException的意思就是告诉你,万一你在做io操作的时候出现异常怎么办

最简单的例子是,我

Classclazz=Class.forname("/path/to/class");

这个时候万一找不到这个class文件该怎么办,也算提醒程序员极有可能出现问题的地方,这里不能忽略

还有一个例子是

try{

stream.close()

}catch(IOExceptione){

//ignore

}

你可以看到这里我们的IOException是忽略的,因为关闭不了,我们也没办法-_-!!!

文章分享结束,java clazz什么意思和JAVA 类名.class是什么意思的答案你都知道了吗?欢迎再次光临本站哦!

java中break什么意思?java程序中break是什么意思 什么叫标准输入流 java java怎么区分输入流和输出流