barriers / 阅读 / 详情

C++中的class和object是什麼意思?

2023-07-12 18:58:03
共5条回复
北有云溪
C++类的定义:
类是定义同一类所有对象的变量和方法的蓝图或原型。
类也可以定义类变量和类方法。可以从类的实例中或者直接从类中访问类变量和方法。类方法只能操作类变量,不必访问实例变量或实例方法。系统在第一次在程序中遇到一个类时为这个类建立它的所有类变量的拷贝,这个类的所有实例共享它的类变量。

C++对象的定义:
定义一个类就相当于创建了一个新的class类型。要使用类,还必须用已经定义的类去说明它的实例变量(即对象)。在C++中,class类型一旦被定义,它的实例变量(对象)就能被创建,并初始化,且能定义指针变量指向它。实例化的类就是对象。

类和对象其实是C语言里的结构体的延伸,在C++里,struct 和 class其实本质上是一样的,唯一区别就是struct默认是公开的,class默认是私有的,公开时需要声明为public;还有就是C语言里的结构体,不能包含函数和继承,C++可以包含函数以及继承其他的类。
可乐

class是一个类, 类是一个抽象的东西, 它不是一个物体, 它相当于是一个蓝图. 然后根据蓝图创建出来的物品就是object.

class和object有一定的关系:

class c{int i;};

c object;

这里, c就是一个类, 而object就是一个对象.

c是一个类名, 而object就是一个对象名.

tt白

class:类

object:对象

西柚不是西游

C++类的定义:

类是定义同一类所有对象的变量和方法的蓝图或原型。

类也可以定义类变量和类方法。可以从类的实例中或者直接从类中访问类变量和方法。类方法只能操作类变量,不必访问实例变量或实例方法。系统在第一次在程序中遇到一个类时为这个类建立它的所有类变量的拷贝,这个类的所有实例共享它的类变量。

C++对象的定义:

定义一个类就相当于创建了一个新的class类型。要使用类,还必须用已经定义的类去说明它的实例变量(即对象)。在C++中,class类型一旦被定义,它的实例变量(对象)就能被创建,并初始化,且能定义指针变量指向它。实例化的类就是对象。

类和对象其实是C语言里的结构体的延伸,在C++里,struct 和 class其实本质上是一样的,唯一区别就是struct默认是公开的,class默认是私有的,公开时需要声明为public;还有就是C语言里的结构体,不能包含函数和继承,C++可以包含函数以及继承其他的类。

S笔记

你没学过英语啊?

相关推荐

class c中文是什么意思

CLass讠c什么意思
2023-07-12 13:02:372

classC在精度等级中算什么

classC在精度等级中算低精度。因为精度等级是根据国家标准GB785-65制定的,classC属于低精度。只用于一般机床,如卧式车床、铣床等。
2023-07-12 13:02:451

美国驾照class c和d区别

美国驾照class c和d的区别是所驾驶的汽车类型不同。ClassC是既不符合A类也不符合B类的大型车辆,是用于驾驶包括驾驶人在内,超过16名载客人数的大中型客车。而ClassD是小型汽车驾驶执照。美国驾照其他类别:ClassA:重量为11794千克或以上(26001磅)的大型车辆,并且可以牵引或拖带超过4536千克(10000磅)的车辆。ClassB:重量为11794千克或以上(26001磅)的大型车辆,但是不能牵引或拖带重量超过4536千克(1000磅)的车辆。ClassM:摩托车驾驶执照。ClassV:船只驾驶执照。
2023-07-12 13:02:541

Classc是什么鞋

非常有男人味简约而不简单,奢华而价物美价廉,更显尊贵霸气十足,ECCO另世界更精彩品名:CLASSC系列世界上最舒适的地方鞋面:意大利进口天然头层小牛皮鞋舌:也是采用头层小牛皮鞋口:CLASSC FASHION精致别雅(FASHION解释:快乐幸福绅士)鞋LOGO:高频踩压凹凸有致内衬:高级真皮内里鞋垫:上层头层真皮防臭吸汗+下层新特发泡EVA会呼吸减震材料大底:丝模三维菱角吸附防滑设计鞋底:高密度BR橡胶弹性柔韧减震耐磨技术大底大底:蜂窝纳米硅胶防滑减震装置产地:广东出口地:北美尺码:38 39 40 41 42 43包装:高档原盒/高档手提袋/拷贝纸市场$:299美元 鞋皇价:368 元(现在就省1000多不是梦)1:鞋皇给大家的保障天价性价比-绝对超值2:我们保证9天无理由退换货 -售后无忧3:60天断底断面包换质量可靠
2023-07-12 13:03:121

sim卡功耗

目前常用的为CLASSB与CLASSC。其中:CLASSB电压为2.7-3.3V。CLASSC电压为1.62-1.98V。功耗方面CLASSB最大为6mA。CLASSC最大为4mA。一般情况下,SIM卡检测电路要求支持1.8V与3.0V。新旧卡耗电并无差别。
2023-07-12 13:03:211

c++语言中class是什么意思?

在C++ 语言中class是定义类的关键字,C++中也可以使用struct定义类。x0dx0a两者区别是,用class定义的类,如果数据成员或成员函数没有说明则默认为private(私有)的,而用struct定义的,默认为public(公共)的。  x0dx0a 示例   #include   using namespace std;   class C {   public:   int getAge() const {   return age;   }   void setAge( int n ) {   age = n;   }   private:   int age;   };   int main() {   C c;   c.setAge( 22 );   cout << "My age: " << c.getAge() << endl;   return 0;x0dx0a  }x0dx0a作为面向对象程序设计的基础,掌握class的基本结构和特性是十分重要的。
2023-07-12 13:03:301

家宽用户光猫设置安装CLASS-C光模块收光范围是多少

(-8,-27)。家宽用户光猫设置安装CLASS-C光模块收光范围是(-8,-27)。因为接收光的范围固定是-8,光猫显示发送-27,所以家宽用户光猫设置安装CLASS-C光模块收光范围是(-8,-27)。
2023-07-12 13:03:371

计算机的CLASS C是什么意思

哎,这是类的定义哈,这是C++中的语法格式。
2023-07-12 13:03:472

class c网段有几个IP位置?急!!!

254
2023-07-12 13:03:555

C++中 new 在什么时候用?? 为什么 Class c = new Class报错

new函数是返回的是一个指针,当然必需赋值给一个指针.
2023-07-12 13:04:114

Class c = null;这个语句是否正确??(C#)

类名 对象=null,这只是声明了一个对象,但没有进行初始化,为空。语法没有任何问题,有些情况下这样声明是必须的!
2023-07-12 13:04:323

C/C++类继承问题

C内部有A和B的成员排列顺需先A后B,所以pa==pc,pb!=pc
2023-07-12 13:04:405

class C { C( C obj );//错误 C( C obj, int n );//正确 ... };为什么?

C(C obj) 编译器会认为你是要写复制构造函数,class C { C( const C& obj );};这样写就没问题。
2023-07-12 13:04:541

Class c = Class.forName(“T")没有创建T的对象吗,c.newInstatnce()才创建吗

Class.forName("")返回的是一个类 而newInstance()返回的是一个实例 即对象你看一下吧------Class.forName(xxx.xx.xx) 返回一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new 不一样,要分清楚)。 至于什么时候用,可以考虑一下这个问题,给出一个字符串变量,它代表一个类的包名和类名,怎么实例化它?只有提到的这个方法了,不过要再加一点。 A a = (A)Class.forName("pacage.A").newInstance(); 这和 A a = new A(); 是一样的效果。 相关的补充问题 JVM会执行静态代码段,要记住一个概念,静态代码是和class绑定的,class装载成功就表示执行了静态代码了,以后也就不会再走这段静态代码了。 Class.forName(xxx.xx.xx) 返回的是一个类 Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段,动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象 String str = 用户输入的字符串 Class t = Class.forName(str); t.newInstance(); 在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别? 它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。 那么为什么会有两种创建对象方式? 这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。 Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如: class c = Class.forName(“Example”); factory = (ExampleInterface)c.newInstance(); 其中ExampleInterface是Example的接口,可以写成如下形式: String className = "Example"; class c = Class.forName(className); factory = (ExampleInterface)c.newInstance(); 进一步可以写成如下形式: String className = readfromXMlConfig;//从xml 配置文件中获得字符串 class c = Class.forName(className); factory = (ExampleInterface)c.newInstance(); 上面代码已经不存在Example的类名称,它的优点是,无论Example类怎么变化,上述代码不变,甚至可以更换Example的兄弟类Example2 , Example3 , Example4……,只要它们继承ExampleInterface也就是factory就可以。 从JVM的角度看,使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载 java API的那个加载器。 现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 分步的好处是显而易见的:可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。 最后用最简单的描述来区分new关键字和newInstance()方法的区别: newInstance: 弱类型。低效率。只能调用无参构造。 new: 强类型。相对高效。能调用任何public构造。 forName() 和 ClassLoader 的 loadClass 方法。 为什么 forName()是会执行static语句? 因为默认情况它总是初始化这个被装载的类。 关于forName()方法 这个方法总是返回要加载的类的Class类的实例 1、forName(String className)单参数时, initialize=true a.总是使用当前类装载器(也就是装载执行forName()请求的类的类装载器) b.总是初始化这个被装载的类(当然也包括:装载、连接、初始化) 2、forName(String className, boolean initialize, ClassLoader loader) a.loader指定装载参数类所用的类装载器,如果null则用bootstrp装载器。 b.initialize=true时,肯定连接,而且初始化了; c.false时,绝对不会初始化,但是可能被连接了,有个例外,如果在调用这个forName()前,已经被初始化了,那么返回的类型也肯定是被初始化的(当然,暗含着: 被同一个loader所装载的,而且该类被初始化了) 关于用户自定义的类装载器的loadClass()方法 1、loadClass(String name)单参数时, resolve=false a.如果该类已经被该类装载器所装载,那么,返回这个已经被装载的类型的Class的实例,否则,就用这个自定义的类装载器来装载这个class,这时不知道是否被连接。绝对不会被初始化 b.这时唯一可以保证的是,这个类被装载了。但是不知道这个类是不是被连接和初始化了 2、loadClass(String name, boolean resolve) a.resolve=true时,则保证已经装载,而且已经连接了。 resolve=falses时,则仅仅是去装载这个类,不关心是否连接了,所以此时可能被连接了,也可能没有被连接
2023-07-12 13:05:011

GPON CLASS C+是什么

gpon系统光模块的要求,有A、B、C三个等级,每个等级的光指标不一样。具体可参照《接入网技术要求 ——吉比特的无源光网络(GPON) 第2部分:物理媒质相关(PMD)层要求》
2023-07-12 13:05:092

C语言中的class的应用

很想回答你但是我确实不知道怎么回答
2023-07-12 13:05:196

java一个程序中包含三个类怎么写

在主类创建就OK了,别说三个,一百个也是可以的
2023-07-12 13:05:384

多继承有什么坏处,为什么java搞单继承,接口为什么可以摈弃这些坏处

多继承会出现“可怕的菱形”结构。假设 B继承A,C也继承AB重写了A中的方法,C也重写了A中的方法。此时 如果D 同时继承B和C的话,那么D中的某个方法(源于A的),究竟是用B的还是C的呢?个人认为Sun在设计接口这个特性时,充分考虑了EJB技术。多继承和反射机制没有什么关系。接口中只能声明静态常量。成员方法 在默认情况下就是抽象的
2023-07-12 13:05:484

乔丹衣服的这个classc是什么?

是classic,意思是经典款
2023-07-12 13:05:571

C语言中的class函数有什么用~

创建一个类,如:class point{public:point(int x=0,y=0){X=x;Y=y}point(point &p);int GetX(){returnX;}int写不下了}
2023-07-12 13:06:073

C++中 class的意思?

2023-07-12 13:06:456

c++的class相当于c的什么?c可以用class吗

类似于struct 两者大体上差不多,c中不能用class
2023-07-12 13:07:033

java 可不可以继承多个类?

不能。一个类不能直接继承多个类,java是单继承语言。比如说这样:class A extends B,C 不能这样写,因为java不支持多继承。但是可以像下面这样实现继承多个类:class A extends B,class C extends A,这样C就同时继承了B和A两个类了。
2023-07-12 13:07:132

C7取下电池后面标签上英文“ CLASS B”是什么意思,你们的有吗?

CLASS B:通话连接优先级高于数据连接就是说在GPRS上网的时候如果有短信或电话接入会自动暂时断开GPRS,优先保证通话或短信连接。CLASS A:数据连接和通话连接互不影响就是说打电话或发短信的同时不断开GPRS连接。CLASS C:无法自动在数据连接和通话连接之间切换在GPRS上网的时候短信进不来,电话也表现为正忙,必须手动断开GPRS才能正常打电话和收发短信。这个CLASS跟手机网络制式有关,和质量无关,目前大部分GSM手机都是CLASS B。有些手机上网的时候无法收短信和接电话,就是因为它是CLASS C级别。3G制式的手机不存在这个冲突。
2023-07-12 13:07:391

谷歌A跟谷歌有什么不一样

谷歌股票(原代码GOOG)已于2014年4月3日进行拆股,拆分为A类股GOOGL(有投票权)和C类股GOOG(无投票权)两种,现均支持正常交易。
2023-07-12 13:07:492

不同class的光模块,比如classB+和classC+,从不同的GPON板拆下来,可以互换么?

支持的传输距离和分光数目不一样。要看你的网络具体情况才知道是否可以互换。GPON OLT模块 发送功率 接受灵敏度 (单位: dBm)Class B+: 1.5~5 -28 Class C+: 3~7 -32ONU模块Class B+: 0.5~5 -27 Class C+: 0.5~5 -30
2023-07-12 13:07:581

#includeclass C{inti;public:C();C(int val);void Dispal();~C();};

没主函数,不能运行
2023-07-12 13:08:052

Java类别载入器

1 Java的动态特性Java的动态特性有两种,一是隐式的;另一种是显示的。隐式的(implicit)方法就是当程式设计师用到new 这个Java 关键字时,会让类别载入器依需求载入您所需要的类别,这种方式使用了隐式的(implicit)方法。显式的方法,又分成两种方式,一种是藉由java.lang.Class 里的forName()方法,另一种则是藉由java.lang.ClassLoader 里的loadClass()方法。您可以任意选用其中一种方法。2 隐式的动态特性在执行java文件时,只有单独的变量声明是不会载入相应的类的,只有在用new生成实例时才载入如示例所示:public class Mainpublic static void main(String args[]){A a1 = new A() ;B b1 ;}类A和B相同,如下:public class A{public void print(“using A”);}编译后,可用java _verbose:class Main运行,察看输出结果。可以看到JVM只载入了A,而没有载入B.另外,类的载入只在执行到new一个类时,才载入,如果没有执行到new语句,则不载入。如://类Officepublic class Office{public static void main(String[] args){Word myword=null;Excel myexcel=null;if (args[0].equals("Word")){myword = new Word();myword.start();}if (args[0].equals("Excel")){myexcel = new Excel();myexcel.start();}}}//类Word和Excel基本相同,如下public class Word{public void start(){System.out.println("using word");}}在dos命令提示符下,输入java _verbose Office Excel可以看到JVM只载入Excel类,而不载入Word类。3 显示的动态特性3.1 java.lang.Class里的forName()方法在上一个Office示例中,进行如下修改:一 加入Assembly类public interface Assembly{public void start();}二 让Word和Excel类实现该接口public class Word implements Assembly{public void start(){System.out.println("using word");}}三 Office 类如下所示public class Office{public static void main(String[] args) throws Exception{java.lang.Class c = java.lang.Class.forName(args[0]);Object o = c.newInstance();Assembly a = (Assembly)o;a.start();}}在命令提示符下输入java _verbose Office Word 输出入下:通过上图你可以看到,interface 如同class 一般,会由编译器产生一个独立的类别档(.class),当类别载入器载入类别时,如果发现该类别继承了其他类别,或是实作了其他介面,就会先载入代表该介面的类别档,也会载入其父类别的类别档,如果父类别也有其父类别,也会一并优先载入。换句话说,类别载入器会依继承体系最上层的类别往下依序载入,直到所有的祖先类别都载入了,才轮到自己载入。下面介绍一下 forName 函数, 如果您亲自搜寻Java 2 SDK 说明档内部对於Class 这个类别的说明,您可以发现其实有两个forName()方法,一个是只有一个参数的(就是之前程式之中所使用的):public static Class forName(String className)另外一个是需要三个参数的:public static Class forName(String name, boolean initialize,ClassLoader loader)这两个方法,最後都是连接到原生方法forName0(),其宣告如下:private static native Class forName0(String name, boolean initialize, ClassLoader loader)throws ClassNotFoundException;只有一个参数的forName()方法,最後叫用的是:forName0(className, true, ClassLoader.getCallerClassLoader());而具有三个参数的forName()方法,最後叫用的是:forName0(name, initialize, loader);这里initialize参数指,在载入类之后是否进行初始化,对于该参数的作用可用如下示例察看:类里的静态初始化块在类第一次被初始化时才被呼叫,且仅呼叫一次。在Word类里,加入静态初始化块public class Word implements Assembly{static{System.out.println("word static initialization ");}public void start(){System.out.println("using word");}}将类Office作如下改变:public class Office{public static void main(String[] args) throws Exception{Office off= new Office();System.out.println("类别准备载入");java.lang.Class c = java.lang.Class.forName(args[0],true,off.getClass().getClassLoader());System.out.println("类别准备实体化");Object o = c.newInstance();Object o2 = c.newInstance();}}#p#副标题#e#如果第二个参数为true 则输出入下如果为false ,则输出入下:可见,类里的静态初始化块仅在初始化时才执行,且不过初始化几次,它仅执行一次(这里有一个条件,那就是只有它是被同一个类别载入器多次载入时,才是这样,如果被不同的载入器,载入多次,则静态初始化块会执行多次)。关于第三个参数请见下节介绍3.2 直接使用类别载入器 java.lang.ClassLoader在Java 之中,每个类别最後的老祖宗都是Object,而Object 里有一个名为getClass()的方法,就是用来取得某特定实体所属类别的参考,这个参考,指向的是一个名为Class 类别(Class.class) 的实体,您无法自行产生一个Class 类别的实体,因为它的建构式被宣告成private,这个Class 类别的实体是在类别档(.class)第一次载入记忆体时就建立的,往後您在程式中产生任何该类别的实体,这些实体的内部都会有一个栏位记录着这个Class 类别的所在位置。基本上,我们可以把每个Class 类别的实体,当作是某个类别在记忆体中的代理人。每次我们需要查询该类别的资料(如其中的field、method 等)时,就可以请这个实体帮我们代劳。事实上,Java的Reflection 机制,就大量地利用Class 类别。去深入Class 类别的原始码,我们可以发现Class类别的定义中大多数的方法都是原生方法(native method)。在Java 之中,每个类别都是由某个类别载入器(ClassLoader 的实体)来载入,因此,Class 类别的实体中,都会有栏位记录着载入它的ClassLoader 的实体(注意:如果该栏位是null,并不代表它不是由类别载入器所载入,而是代表这个类别由靴带式载入器(bootstrap loader,也有人称rootloader)所载入,只不过因为这个载入器并不是用Java 所写成,是用C++写的,所以逻辑上没有实体)。系统里同时存在多个ClassLoader 的实体,而且一个类别载入器不限於只能载入一个类别,类别载入器可以载入多个类别。所以,只要取得Class 类别实体的参考,就可以利用其getClassLoader()方法篮取得载入该类别之类别载入器的参考。getClassLoader()方法最後会呼叫原生方法getClassLoader0(),其宣告如下:private native ClassLoader getClassLoader0();最後,取得了ClassLoader 的实体,我们就可以叫用其loadClass()方法帮我们载入我们想要的类别,因此上面的Office类可做如下修改:public class Office{public static void main(String[] args) throws Exception{Office off= new Office();System.out.println("类别准备载入");ClassLoader loader = off.getClass().getClassLoader();java.lang.Class c = loader.loadClass(args[0]);System.out.println("类别准备实体化");Object o = c.newInstance();Object o2 = c.newInstance();}}其输出结果同forName方法的第二个参数为false时相同。可见载入器载入类时只进行载入,不进行初始化。获取ClassLoader还可以用如下的方法:public class Office{public static void main(String[] args) throws Exception{java.lang.Class cb = Office.class;System.out.println("类别准备载入");ClassLoader loader = cb.getClassLoader();java.lang.Class c = loader.loadClass(args[0]);System.out.println("类别准备实体化");Object o = c.newInstance();Object o2 = c.newInstance();}}在此之前,当我们谈到使用类别载入器来载入类别时,都是使用既有的类别载入器来帮我们载入我们所指定的类别。那麽,我们可以自己产生类别载入器来帮我们载入类别吗? 答案是肯定的。利用Java 本身提供的.URLClassLoader 类别就可以做到。public class Office{public static void main(String[] args) throws Exception{URL u = new URL("file:/d:/myapp/classload/");URLClassLoader ucl = new URLClassLoader(new URL[]{u});java.lang.Class c = ucl.loadClass(args[0]);Assembly asm = (Assembly)c.newInstance();asm.start();}}在这个范例中,我们自己产生.URLClassLoader 的实体来帮我们载入我们所需要的类别。但是载入前,我们必须告诉URLClassLoader 去哪个地方寻找我们所指定的类别才行,所以我们必须给它一个URL 类别所构成的阵列,代表我们希望它去搜寻的所有位置。URL 可以指向网际网路上的任何位置,也可以指向我们电脑里的档案系统(包含JAR 档)。在上述范例中,我们希望URLClassLoader 到d:mylib 这个目录下去寻找我们需要的类别, 所以指定的URL为”file:/d:/my/lib/”。其实,如果我们请求的位置是主要类别(有public static void main(String args[])方法的那个类别)的相对目录,我们可以在URL 的地方只写”file:lib/”,代表相对於目前的目录。下面我们来看一下系统为我们提供的3个类别载入器:java.exe 是利用几个基本原则来寻找Java Runtime Environment(JRE),然後把类别档(.class)直接转交给JRE 执行之後,java.exe 就功成身退。类别载入器也是构成JRE 的其中一个重要成员,所以最後类别载入器就会自动从所在之JRE 目录底下的libt.jar 载入基础类别函式库。当我们在命令列输入java xxx.class 的时候,java.exe 根据我们之前所提过的逻辑找到了JRE(Java Runtime Environment),接着找到位在JRE 之中的jvm.dll(真正的Java 虚拟机器),最後载入这个动态联结函式库,启动Java 虚拟机器。虚拟机器一启动,会先做一些初始化的动作,比方说抓取系统参数等。一旦初始化动作完成之後,就会产生第一个类别载入器,即所谓的Bootstrap Loader,Bootstrap Loader 是由C++所撰写而成(所以前面我们说,以Java 的观点来看,逻辑上并不存在Bootstrap Loader 的类别实体,所以在Java 程式码里试图印出其内容的时候,我们会看到的输出为null),这个Bootstrap Loader 所做的初始工作中,除了也做一些基本的初始化动作之外,最重要的就是载入定义在sun.misc 命名空间底下的Launcher.java 之中的ExtClassLoader(因为是inner class,所以编译之後会变成Launcher$ExtClassLoader.class),并设定其Parent 为null,代表其父载入器为BootstrapLoader。然後Bootstrap Loader 再要求载入定义於sun.misc 命名空间底下的Launcher.java 之中的AppClassLoader(因为是inner class,所以编译之後会变成Launcher$AppClassLoader.class),并设定其Parent 为之前产生的ExtClassLoader 实体。这里要请大家注意的是,Launcher$ExtClassLoader.class 与Launcher$AppClassLoader.class 都可能是由Bootstrap Loader 所载入,所以Parent 和由哪个类别载入器载入没有关系。三个载入器的层次关系可通过运行下面的例子察看:public class Test{public static void main(String[] args){ClassLoader cl1 = Test.class.getClassLoader();System.out.println(cl1);ClassLoader cl2 = cl1.getParent();System.out.println(cl2);ClassLoader cl3 = cl2.getParent();System.out.println(cl3);}}运行结果:////////////////////////////////////////////////////////////sun.misc.Launcher$AppClassLoader@1a0c10fsun.misc.Launcher$ExtClassLoader@e2eec8null//////////////////////////////////////////////////////////如果在上述程式中,如果您使用程式码:cl1.getClass.getClassLoader()及cl2.getClass.getClassLoader(),您会发现印出的都是null,这代表它们都是由Bootstrap Loader 所载入。这里也再次强调,类别载入器由谁载入(这句话有点诡异,类别载入器也要由类别载入器载入,这是因为除了Bootstrap Loader 之外,其余的类别载入器皆是由Java 撰写而成),和它的Parent 是谁没有关系,Parent 的存在只是为了某些特殊目的,这个目的我们将在稍後作解释。在此要请大家注意的是,AppClassLoader 和ExtClassLoader 都是URLClassLoader 的子类别。由於它们都是URLClassLoader 的子类别,所以它们也应该有URL 作为搜寻类别档的参考,由原始码中我们可以得知,AppClassLoader 所参考的URL 是从系统参数java.class.path 取出的字串所决定,而java.class.path 则是由我们在执行java.exe 时,利用_cp 或-classpath 或CLASSPATH 环境变数所决定。#p#副标题#e#用如下示例测试:public class AppLoader{public static void main(String[] args){String s = System.getProperty("java.class.path");System.out.println(s);}}/////////////////////////////////////////////////////////////////D:myappclassloadjava AppLoader.;D:myjavaTomcat5.0webappsaxisWEB-INFlibaxis.jar;D:myjavaTomcat5.0webappsaxisWEB-INFlibcommons-logging.jar;D:myjavaTomcat5.0webappsaxisWEB-INFlibcommons-discovery.jar;C:oracleora81jdbclibclasses12.zip;D:myjavaJDBCforSQLserverlibmssqlserver.jar;D:myjavaJDBCforSQLserverlibmsbase.jar;D:myjavaJDBCforSQLserverlibmsutil.jar;D:myjavaTomcat5.0commonlibservlet-api.jar;D:myjavaj2sdk1.4.2_04jrelibt.jar;C:sunappserverlibj2ee.jar;D:myjavaj2sdk1.4.2_04libjaxp.jar;D:myjavaj2sdk1.4.2_04libsax.jar;D:myappclassloadjava -classpath .;d:myapp AppLoader.;d:myapp/////////////////////////////////////////////////////////////////从这个输出结果,我们可以看出,在预设情况下,AppClassLoader 的搜寻路径为”.”(目前所在目录),如果使用-classpath 选项(与-cp 等效),就可以改变AppClassLoader 的搜寻路径,如果没有指定-classpath 选项,就会搜寻环境变数CLASSPATH。如果同时有CLASSPATH 的环境设定与-classpath 选项,则以-classpath 选项的内容为主,CLASSPATH 的环境设定与-classpath 选项两者的内容不会有加成的效果。至於ExtClassLoader 也有相同的情形,不过其搜寻路径是参考系统参数java.ext.dirs。系统参数java.ext.dirs 的内容,会指向java.exe 所选择的JRE 所在位置下的libext 子目录。Java.exe使用的JRE是在系统变量path里指定的,可以通过修改path从而修改ExtCLassLoader的搜寻路径,也可以如下命令参数来更改,java _Djava.ext.dirs=c:winnt AppLoader //注意 =号两边不能有空格。-D也不能和java分开。////////////////////////////////////////////////////////////////D:myappclassloadjava ExtLoaderD:myjavaj2sdk1.4.2_04jrelibextD:myappclassloadjava -Djava.ext.dirs=c:winnt ExtLoaderc:winnt////////////////////////////////////////////////////////////////最後一个类别载入器是Bootstrap Loader , 我们可以经由查询由系统参数sun.boot.class.path 得知Bootstrap Loader 用来搜寻类别的路径。该路径的修改与ExtClassLoader的相同。但修改后不影响Boots
2023-07-12 13:08:121

反射机制的Java中

Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。1.检测类:1.1 reflection的工作机制考虑下面这个简单的例子,让我们看看 reflection 是如何工作的。import java.lang.reflect.*;public class DumpMethods {public static void main(String args[]) {try {Class c = Class.forName(args[0]);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);}}}按如下语句执行:java DumpMethods java.util.Stack它的结果输出为:public java.lang.Object java.util.Stack.push(java.lang.Object)public synchronized java.lang.Object java.util.Stack.pop()public synchronized java.lang.Object java.util.Stack.peek()public boolean java.util.Stack.empty()public synchronized int java.util.Stack.search(java.lang.Object)这样就列出了java.util.Stack 类的各方法名以及它们的限制符和返回类型。这个程序使用 Class.forName 载入指定的类,然后调用 getDeclaredMethods 来获取这个类中定义了的方法列表。java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类。1.2 Java类反射中的主要方法对于以下三类组件中的任何一类来说 -- 构造函数、字段和方法 -- java.lang.Class 提供四种独立的反射调用,以不同的方式来获得信息。调用都遵循一种标准格式。以下是用于查找构造函数的一组反射调用:Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数,Constructor[] getConstructors() -- 获得类的所有公共构造函数Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关)Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关)获得字段信息的Class 反射调用不同于那些用于接入构造函数的调用,在参数类型数组中使用了字段名:Field getField(String name) -- 获得命名的公共字段Field[] getFields() -- 获得类的所有公共字段Field getDeclaredField(String name) -- 获得类声明的命名的字段Field[] getDeclaredFields() -- 获得类声明的所有字段用于获得方法信息函数:Method getMethod(String name, Class[] params) -- 使用特定的参数类型,获得命名的公共方法Method[] getMethods() -- 获得类的所有公共方法Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型,获得类声明的命名的方法Method[] getDeclaredMethods() -- 获得类声明的所有方法1.3开始使用 Reflection:用于 reflection 的类,如 Method,可以在 java.lang.relfect 包中找到。使用这些类的时候必须要遵循三个步骤:第一步是获得你想操作的类的 java.lang.Class 对象。在运行中的 Java 程序中,用 java.lang.Class 类来描述类和接口等。下面就是获得一个 Class 对象的方法之一:Class c = Class.forName(java.lang.String);这条语句得到一个 String 类的类对象。还有另一种方法,如下面的语句:Class c = int.class;或者Class c = Integer.TYPE;它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段。第二步是调用诸如 getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表。 一旦取得这个信息,就可以进行第三步了——使用 reflection API 来操作这些信息,如下面这段代码:Class c = Class.forName(java.lang.String);Method m[] = c.getDeclaredMethods();System.out.println(m[0].toString());它将以文本方式打印出 String 中定义的第一个方法的原型。2.处理对象:如果要作一个开发工具像debugger之类的,你必须能发现filed values,以下是三个步骤:a.创建一个Class对象b.通过getField 创建一个Field对象c.调用Field.getXXX(Object)方法(XXX是Int,Float等,如果是对象就省略;Object是指实例).例如:import java.lang.reflect.*;import java.awt.*;class SampleGet {public static void main(String[] args) {Rectangle r = new Rectangle(100, 325);printHeight(r);}static void printHeight(Rectangle r) {Field heightField;Integer heightValue;Class c = r.getClass();try {heightField = c.getField(height);heightValue = (Integer) heightField.get(r);System.out.println(Height: + heightValue.toString());} catch (NoSuchFieldException e) {System.out.println(e);} catch (SecurityException e) {System.out.println(e);} catch (IllegalAccessException e) {System.out.println(e); } } }
2023-07-12 13:08:481

小学单词class书写格式?

对于这个小学单词来说。一般来说如果是写几班几年级的时候,通常class的C是要大写的。class还可以做等级来进行使用,这时候可以不用大写。
2023-07-12 13:09:032

c++如何访问其他class private数值

如果一个函数是另一个类的友元函数、或一个类的成员函数是另一个类的友元函数、或一个类是另一个类的友元类,就可以访问另一个类的私有成员。下面是一个例子:#include <iostream>using namespace std;class A;class B{public:void f(const A &a);static void sf(const A &a);};class C{public:void f(const A &a);static void sf(const A &a);};class A{private:string s="hello";static string ss;friend void f(const A &a);friend void B::f(const A &a);friend void B::sf(const A &a);friend class C;};string A::ss="world";void f(const A &a){cout<<a.s<<endl;cout<<a.ss<<endl;}void B::f(const A &a){cout<<a.s<<endl;cout<<a.ss<<endl;}void B::sf(const A &a){cout<<a.s<<endl;cout<<a.ss<<endl;}void C::f(const A &a){cout<<a.s<<endl;cout<<a.ss<<endl;}void C::sf(const A &a){cout<<a.s<<endl;cout<<a.ss<<endl;}int main(){A a;f(a);cout<<endl;B b;b.f(a);B::sf(a);cout<<endl;C c;c.f(a);C::sf(a);cout<<endl;return 0;}运行结果截图如下:
2023-07-12 13:09:112

CS1,6进局域网出现CLASS C提示 进不去..

这个问题我目前知道的唯一个解决方法 其他人说的我感觉都是片面的 不能直接解决问题 你先建一个地图 在在控制台里面输入sv_lan 1就好了我自己是这样搞好了的
2023-07-12 13:09:271

关于c#属性的问题

你连续使用了两个new关键字创建对象,没创建一个实例对象,没有在构造方法(也有人叫构造函数)中复制,dpHosTime的值都为默认的值(DateTime的最小值)。你声明了两次Tohistory对象的实例,第一个classB中赋值的,你在classB中可以取到值。你在classC中声明的实例,就是重新初始化了值,你并没有给属性复制啊,DateTime自己有默认值,就显示出来了。另外你这样如果是在一个方法内连续声明二个实例,也不能使用相同的实例名称啊,两个hostory在一个方法内可能报错啊。你可以这样写: Tohistory hostory=new Tohostory(); hostory=new Tohostory(); 这样不会报错。而你连续两个:Tohistory hostory=new Tohostory(); Tohistory hostory=new Tohostory();这样命名冲突了,编译都通过不了,就报错了哦!!!
2023-07-12 13:09:351

求助c++大神,以下程序段的语法错误,在继承与派生学到的

#include <iostream>using namespace std;class A{ public:int n;};class B:public A{};class C:public B{};class D:public B//,public C{ int getn(){return n;}};int main(){ D d; d.n=10; cout<<d.n<<endl; return 0;}
2023-07-12 13:09:453

C语言里面有Class吗,过多的Class 又是怎么封装的,class & class 有聚合,组合关系这么一说吗?

c语言没有class
2023-07-12 13:10:025

Java中反射的问题:Class c ,c.getDelaredClasses()和c.getClasses()两个方法有什么区别?

前者只是获取该类声明的方法,而后者还包括父类的。
2023-07-12 13:10:183

class中c,l,a,s,s分别代表什么

汗。。。谢谢楼主的知识共享。。。
2023-07-12 13:10:279

下面程序的执行结果是什么?为什么?

class Bclass C这就是运行时多态的概念,这个也是面向对象程序设计的精华
2023-07-12 13:10:432

家宽用户光猫设置安装CLASS-C光模块收光范围是多少

(-8,-27)。家宽用户光猫设置安装CLASS-C光模块收光范围是(-8,-27)。因为接收光的范围固定是-8,光猫显示发送-27,所以家宽用户光猫设置安装CLASS-C光模块收光范围是(-8,-27)。
2023-07-12 13:11:031

class中的c发什么音标?

class中的c发音标为k。
2023-07-12 13:11:091

c++语言中class是什么意思?

在C++ 语言中class是定义类的关键字,C++中也可以使用struct定义类。两者区别是,用class定义的类,如果数据成员或成员函数没有说明则默认为private(私有)的,而用struct定义的,默认为public(公共)的。   示例   #include   using namespace std;   class C {   public:   int getAge() const {   return age;   }   void setAge( int n ) {   age = n;   }   private:   int age;   };   int main() {   C c;   c.setAge( 22 );   cout << "My age: " << c.getAge() << endl;   return 0;  }作为面向对象程序设计的基础,掌握class的基本结构和特性是十分重要的。
2023-07-12 13:11:191

classa的格式范围

classa的格式范围有ClassA、ClassB、ClassC。1、ClassA:范围是1.0.0.0到126.0.0.0,其中第一个字节用于网络地址,剩下的三个字节用于主机地址。2、ClassB:范围是128.0.0.0到191.255.0.0,其中前两个字节用于网络地址,剩下的两个字节用于主机地址。3、ClassC:范围是192.0.0.0到223.255.255,其中前三个字节用于网络地址,剩下的一个字节用于主机地址。
2023-07-12 13:11:271

C++中 new 在什么时候用?? 为什么 Class c = new Class报错?

1>Class c=new Classnew Class 表示在堆栈中创建一个Class类变量,而要访问这个变量,必须通过指针来访问,因此应该改为:Class *c=new Class;2>请高手解释下 Class *c = new Class ; Class *c ; Class c ;第一个是在堆栈中创建Class类型的变量并用指向Class类变量的指针指向它第二个是创建一个指向Class类型变量的指针第三个是创建Class类型的变量3>建议在类、变量、函数名等命名时尽量不要与关键字相似,最好去找一些命名规则来看一下,其实命名是很有讲究的,像你所提问题中的Class最好改为CClass这是因为类的命名规则一般前面都会加一个“C”以表示这是一个类。
2023-07-12 13:11:371

java中clss类的一个让我困惑的问题

new 出来的是实例,而这个clazz 是类类型的一个对象而已。
2023-07-12 13:11:534

FCC 47 CFR PART 15,CLASS C,EN 300328是什么意思详细点谢谢诶

FCC 47 CFR PART 15,CLASS C 美国电磁兼容部分认证FCC里的标准EN 300328 欧盟CE认证里的标准按标准来看,你的产品应该是IT类的。UL 60950-1:2003 美国安全认证UL的标准csa-c22.2 加拿大安全认证CSA的标准ice 60950-1 国际标准IEC
2023-07-12 13:12:012

c++ classA{public:A(){cout

定义一个class B 为cB
2023-07-12 13:12:113

c++中class C:public B,public A { B b; public: C( ) {是什么意思

类C同时公开继承A与B其中C中有一个私有成员变量是B类型的对象b;还有一个无参构造函数C()。
2023-07-12 13:12:341

C语言中的“class”是什么意思

C没有class,这是C++中的系统定义类型,是类的意思
2023-07-12 13:12:451

class C extends B { public C() { super() } } 是什么意思呢

C类继承了B类,C的构造函数会运行B的构造函数。
2023-07-12 13:12:521

奔驰C Class的Class是什么意思

级别~~~~~~~
2023-07-12 13:13:037