类对象

反射与类对象获取-Java学习

浪子不回头ぞ 提交于 2019-12-03 09:59:00
类对象 类对象指的是一个类在jvm中加载后所形成的对象,每一个类都只有一个类对象,该类对象被所有的实例对象所共享。 类之间有不同的方法,不同的属性。类对象,就是用于描述这种类,都有什么属性,什么方法的。 获取类对象有三种方式: Class.forName Hero.class new Hero().getClass() Class pClass1 = Class.forName(className); Class pClass2 = Hero.class; Class pClass3 = new Hero().getClass(); 一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样的( 一个ClassLoader下,一种类只会有一个类对象存在。通常一个JVM下,只会有一个ClassLoader ) 获取类对象的时候,会导致类属性被初始化 无论什么途径获取类对象,都会导致静态属性被初始化,而且只会执行一次。(除了直接使用 Class c = Hero.class 这种方式,这种方式不会导致静态属性被初始化) 反射 与传统的通过new来获取对象的方式不同,反射机制,会先拿到“类对象”,然后通过类对象获取“构造器对象”,再通过构造器对象创建一个对象 //传统的使用new的方式创建对象 Hero h1 =new Hero(); h1.name =

代理实现aop以及代理工厂实现增强

谁都会走 提交于 2019-12-03 04:24:51
一、静态代理实现   1.接口(抽象主题)       2.接口的实现类(真实主题)      3.代理类(代理主题)       4.测试类:      ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); ProxySubject proxySubject =(ProxySubject) context.getBean("proxySubject"); proxySubject.doSome(); 二、JDK动态代理    JDK动态代理所用到的代理类在程序调用到代理类对象时才由JVM真正创建,JVM根据传进来的 业务实现类对象 以及 方法名 ,动态地创建了一个代理类的class文件并被字节码引擎执行,然后通过该代理类对象进行方法调用。    1.抽象主题,真实主题与上面一致    2.动态代理类 package com.cmy.handler; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class DoSomeBeanFactory implements

开源项目源码解析-Java 动态代理

半世苍凉 提交于 2019-12-03 00:40:02
Java 动态代理 本文为 Android 开源项目源码解析 公共技术点中的 动态代理 部分 项目地址: Jave Proxy ,分析的版本: openjdk 1.6 ,Demo 地址: Proxy Demo 分析者: Caij ,校对者: Trinea ,校对状态:完成 1. 相关概念 1.1 代理 在某些情况下,我们不希望或是不能直接访问对象 A,而是通过访问一个中介对象 B,由 B 去访问 A 达成目的,这种方式我们就称为代理。 这里对象 A 所属类我们称为委托类,也称为被代理类,对象 B 所属类称为代理类。 代理优点有: 隐藏委托类的实现 解耦,不改变委托类代码情况下做一些额外处理,比如添加初始判断及其他公共操作 根据程序运行前代理类是否已经存在,可以将代理分为静态代理和动态代理。 1.2 静态代理 代理类在程序运行前已经存在的代理方式称为静态代理。 通过上面解释可以知道,由开发人员编写或是编译器生成代理类的方式都属于静态代理,如下是简单的静态代理实例: class ClassA { public void operateMethod1() {}; public void operateMethod2() {}; public void operateMethod3() {}; } public class ClassB { private ClassA a; public

c++中的类型识别

匿名 (未验证) 提交于 2019-12-03 00:36:02
基类指针指向子类对象 基类引用成为子类对象的别名 静态类型-变量(对象)自身的类型 动态类型-指针(引用)所指向对象的实际类型 基类指针是否可以强制类型转换为子类指针取决于动态类型! c++中如何得到动态类型? 解决方案-利用多态 1.在基类中定义虚函数返回具体的类型信息 2.所有的派生类都必须实现相关的虚函数 3.每个类中的类型虚函数都需要不同的实现 多态解决方案的缺陷 必须从基类开始提供类型虚函数 所有的派生类都必须重写类型虚函数 每个派生类的类型名必须唯一 c++提供了typeid关键字用于获取类型信息 typeid关键字返回对应参数的类型信息 typeid返回一个type_info类对象 当typeid的参数为NULL时将抛出异常 typeid关键字的使用 Int i = 0; const type_info& tiv = typeid( i ); const type_info& tii = typeid( int ); typeid的注意事项 当参数为类型时:返回静态类型信息 当参数为变量时:   不存在虚函数表-返回静态类型信息   存在虚函数表-返回动态类型信息 小结 c++中有静态类型和动态类型的概念 利用多态能够实现对象的动态类型识别 typeid是专用于类型识别的关键字 typeid能够返回对象的动态类型信息 原文:https://www.cnblogs

OSG学习:几何体的操作(二)――交互事件、Delaunay三角网绘制

匿名 (未验证) 提交于 2019-12-03 00:30:01
2、《OpenSceneGraph三维渲染引擎设计与实践》王锐 钱学雷 清华大学出版社 3、自己的总结 创建C++项目后,首先需要配置OSG环境,具体步骤看 OSG学习:WIN10系统下OSG+VS2017编译及运行 第六步:新建OSG项目测试。 首先重新来看一下场景的构成:基本的绘图基元――场景: 基本的绘图基元――简单的几何体――复杂的几何体――复杂的场景。 对几何体进行适当地修改,可以提高渲染效率。这些操作都由osgUtil库提供,主要有 简化osgUtil::Simplifier 、生成法线osgUtil::SmoothingVisitor( OSG学习:几何对象的绘制(二)――简易房屋:创建人字顶部分 )、 生成Delaunay三角网osgUtil::DelaunayTriangulator 、条带化osgUtil::TriStripVisitor等。 本篇文章解析 生成Delaunay三角网 的方法: 不规则三角网TIN 是数字地形建模中表达地形表面的重要手段,它通过不规则离散分布的数据点生成的连续三角面来逼近地形表面,它能以不同层次的分辨率来描述地形表面,地形平坦的地方点稀疏三角网较大且稀疏,地形陡峭的地方三角网小且密集。 狄洛尼Delaunay三角网是所有可能的三角网中在地形拟合方面最出色的方法

内部类(二) 使用.this与.new & 内部类与向上转型

匿名 (未验证) 提交于 2019-12-03 00:26:01
如果需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟圆点和this。 有时候需要告知某些其他对象,去创建其某个内部类的对象。需要在new表达式中提供对其他外部类对象的引用,这时需要使.new语法。 要想直接创建内部类的对象,不能按照想象的方式,去引用外部类的名字DotNew,而是必须使用外部类的对象来创建该内部类对象。 在拥有外部类对象之前是不可能创建 内部类对象的。这是因为内部类对象会连接到创建它的外部类对象上。但是,如果创建的是嵌套类(静态内部类),就不需要对外部类对象的引用。 当将内部类向上转型为其基类,尤其是转型为一个借口的时候,内部类很有用。(从实现了某个接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样的)这是因为此内部类―某个接口的实现―能够完全不可见,并且不可用。所得到的只是指向基类或接口的引用,能够很方便地隐藏实现细节。 /** * Created by Panda on 2018/6/8. */ public interface Contents { int value (); } /** * Created by Panda on 2018/6/8. */ public interface Destination { String readLabel (); } /** * Created by Panda on 2018/6

同步锁的理解以及转变安全集合的方法

匿名 (未验证) 提交于 2019-12-03 00:23:01
Runnable package com.westos.Runnable; public class MyRunnable implements Runnable{ /** * 同步锁的对象可以是任意的java类对象 * 例如我们在下方定义一个Dome类,并在此创建Dome类对象 * 然后将同步锁的对象换成Dome类对象,依旧可以模拟现实窗口售票 */ private Dome d=new Dome(); //定义一个私有公用的票数变量 private static int tickets=100; 定义同一把锁对象 //private Object obj=new Object(); @Override public void run() { while(true) { /** * 为了多个线程可以享用到共享资源我们必须的设置同一把锁,不然依旧会出现好几个窗口在出售同一张票的情况 * 这里的synchronized()方法就好比是一扇门,当其中的一个线程进来后就会关闭这扇门,然后去享受资源 * 等它享受完后,下一个线程会继承抢着进来享受资源,每一线程进来后 * 共享代码块就会发挥它的作用,这样就不会出现同票和负票的现象了 */ synchronized (d) { if(tickets>0) { //模范现实售票延迟的效果,给线程加入睡眠的功能(睡眠100毫秒) try {

在继承多态中关于this的使用

匿名 (未验证) 提交于 2019-12-03 00:22:01
通过this调用method和filed的区别 在继承多态中: 1、对于方法的覆盖,new的谁就调谁,这就是多态。 2、对于成员变量的覆盖,this在哪个类就指向哪个类的成员变量,没有多态。 public class ThisTest { @override public void Test(){ Fu f = new Zi(); System.out.println(f.num);//这里定义的是父类,而成员变量没有多态,所以即使你new的子类,依然指向父类的成员变量。 System.out.println(f.fun1());//不解释了,就是多态。 f.show(); } } class Fu { public String num = "父类成员变量"; public void show() { System.out.println(this.num);//因为成员变量没有多态,所以this指向当前类对象的成员变量。 System.out.println(this.fun1());//因为方法有多态,所以this指向new对象的方法。 System.out.println(this);//打印的是子类对象 } public String fun1() { System.out.println(this.num);//因为成员变量没有多态,所以this指向当前类对象的成员变量

同步锁的理解以及转变安全集合的方法

匿名 (未验证) 提交于 2019-12-03 00:22:01
Runnable package com.westos.Runnable; public class MyRunnable implements Runnable{ /** * 同步锁的对象可以是任意的java类对象 * 例如我们在下方定义一个Dome类,并在此创建Dome类对象 * 然后将同步锁的对象换成Dome类对象,依旧可以模拟现实窗口售票 */ private Dome d=new Dome(); //定义一个私有公用的票数变量 private static int tickets=100; 定义同一把锁对象 //private Object obj=new Object(); @Override public void run() { while(true) { /** * 为了多个线程可以享用到共享资源我们必须的设置同一把锁,不然依旧会出现好几个窗口在出售同一张票的情况 * 这里的synchronized()方法就好比是一扇门,当其中的一个线程进来后就会关闭这扇门,然后去享受资源 * 等它享受完后,下一个线程会继承抢着进来享受资源,每一线程进来后 * 共享代码块就会发挥它的作用,这样就不会出现同票和负票的现象了 */ synchronized (d) { if(tickets>0) { //模范现实售票延迟的效果,给线程加入睡眠的功能(睡眠100毫秒) try {

面向对象的四大基本特征和五大基本原则

匿名 (未验证) 提交于 2019-12-03 00:22:01
面向对象主要有四大特性 抽象 忽略一个主题中与当前目标无关的东西 , 专注的注意与当前目标有关的方面 .( 就是把现实世界中的某一类东西 , 提取出来 , 用程序代码表示 , 抽象出来的一般叫做类或者接口 ). 抽象并不打算了解全部问题 , 而是选择其中的一部分 , 暂时不用部分细节 . 抽象包括两个方面 , 一个数据抽象 , 而是过程抽象 . 数据抽象 --> 表示世界中一类事物的特征 , 就是对象的属性 . 比如鸟有翅膀 , 羽毛等 ( 类的属性 ) 过程抽象 --> 表示世界中一类事物的行为 , 就是对象的行为 . 比如鸟会飞 , 会叫 ( 类的方法 ) 封装 封装就是把过程和数据包围起来 , 对数据的访问只能通过特定的界面 . 如私有变量 , 用 set,get 方法获取 继承 一种联结类的层次模型 , 并且允许和鼓励类的重用 , 提供一种明确表达共性的方法 . 对象的一个新类可以从现有的类中派生 , 这个过程称为类继承 . 新类继承了原始类的特性 , 新类称为原始类的派生类 ( 子类 ), 原始类称为新类的基类 ( 父类 ). 派生类可以从它的父类哪里继承方法和实例变量 , 并且类可以修改或增加新的方法使之更适合特殊的需要 . 因此可以说 , 继承为了重用父类代码 , 同时为实现多态性作准备 . 多态 多态是指允许不同类的对象对同一消息做出响应 .