1. java閲嶆柊锷犺浇class鏂囦欢
Java绫荤殑锷犺浇鏄锷ㄦ佺殑锛屽畠骞朵笉浼氢竴娆℃у皢镓链夌被鍏ㄩ儴锷犺浇钖庡啀杩愯岋纴钥屾槸淇濊瘉绋嫔簭杩愯岀殑锘虹绫(镀忔槸锘虹被)瀹屽叏锷犺浇鍒癹vm涓锛岃呖浜庡叾浠栫被锛屽垯鍦ㄩ渶瑕佺殑镞跺欐墠锷犺浇銆傝繖褰撶劧灏辨槸涓轰简鑺傜渷鍐呭瓨寮阌銆
Java镄勭被锷犺浇鍣ㄦ湁涓変釜锛屽瑰簲Java镄勪笁绉岖被:
Bootstrap Loader // 璐熻矗锷犺浇绯荤粺绫 (鎸囩殑鏄鍐呯疆绫伙纴镀忔槸String锛屽瑰簲浜嶤#涓镄凷ystem绫诲拰C/C++镙囧嗳搴扑腑镄勭被)
|
- - ExtClassLoader // 璐熻矗锷犺浇镓╁𪾢绫(灏辨槸缁ф圹绫诲拰瀹炵幇绫)
|
- - AppClassLoader // 璐熻矗锷犺浇搴旂敤绫(绋嫔簭锻樿嚜瀹氢箟镄勭被)
涓変釜锷犺浇鍣ㄥ悇镊瀹屾垚镊宸辩殑宸ヤ綔锛屼絾瀹冧滑鏄濡备綍鍗忚皟宸ヤ綔锻锛熷摢涓涓绫昏ョ敱鍝涓绫诲姞杞藉櫒瀹屾垚锻锛熶负浜呜В鍐宠繖涓闂棰桡纴Java閲囩敤浜嗗旀墭妯″瀷链哄埗銆
濮旀墭妯″瀷链哄埗镄勫伐浣滃师鐞嗗緢绠鍗曪细褰撶被锷犺浇鍣ㄩ渶瑕佸姞杞界被镄勬椂鍊欙纴鍏堣风ず鍏禤arent(鍗充笂涓灞傚姞杞藉櫒)鍦ㄥ叾鎼灭储璺寰勮浇鍏ワ纴濡傛灉镓句笉鍒帮纴镓嶅湪镊宸辩殑鎼灭储璺寰勬悳绱㈣ョ被銆傝繖镙风殑椤哄簭鍏跺疄灏辨槸锷犺浇鍣ㄥ眰娆′笂镊椤惰屼笅镄勬悳绱锛屽洜涓哄姞杞藉櫒蹇呴’淇濊瘉锘虹绫荤殑锷犺浇銆备箣镓浠ユ槸杩欑嶆満鍒讹纴杩樻湁涓涓瀹夊叏涓婄殑钥冭槛锛氩傛灉镆愪汉灏嗕竴涓鎭舵剰镄勫熀纭绫诲姞杞藉埌jvm锛屽旀墭妯″瀷链哄埗浼氭悳绱㈠叾鐖剁被锷犺浇鍣锛屾樉铹舵槸涓嶅彲鑳芥垒鍒扮殑锛岃嚜铹跺氨涓崭细灏呜ョ被锷犺浇杩涙潵銆
鎴戜滑鍙浠ラ氲繃杩欐牱镄勪唬镰佹潵銮峰彇绫诲姞杞藉櫒:
ClassLoader loader = ClassName.class.getClassLoader();
ClassLoader ParentLoader = loader.getParent();
娉ㄦ剰涓涓寰堥吨瑕佺殑闂棰桡纴灏辨槸Java鍦ㄩ昏緫涓婂苟涓嶅瓨鍦˙ootstrapKLoader镄勫疄浣掳紒锲犱负瀹冩槸鐢–++缂栧啓镄勶纴镓浠ユ墦鍗板叾鍐呭瑰皢浼氩缑鍒皀ull銆
鍓嶉溃鏄瀵圭被锷犺浇鍣ㄧ殑绠鍗曚粙缁嶏纴瀹幂殑铡熺悊链哄埗闱炲父绠鍗曪纴灏辨槸涓嬮溃鍑犱釜姝ラ:
1.瑁呰浇:镆ユ垒鍜屽煎叆class鏂囦欢;
2.杩炴帴:
(1)妫镆:妫镆ヨ浇鍏ョ殑class鏂囦欢鏁版嵁镄勬g‘镐;
(2)鍑嗗:涓虹被镄勯润镐佸彉閲忓垎閰嶅瓨鍌ㄧ┖闂;
(3)瑙f瀽:灏嗙﹀彿寮旷敤杞鎹㈡垚鐩存帴寮旷敤(杩欎竴姝ユ槸鍙阃夌殑)
3.鍒濆嫔寲:鍒濆嫔寲闱欐佸彉閲忥纴闱欐佷唬镰佸潡銆
杩欐牱镄勮繃绋嫔湪绋嫔簭璋幂敤绫荤殑闱欐佹垚锻樼殑镞跺椤紑濮嬫墽琛岋纴镓浠ラ润镐佹柟娉昺ain()镓崭细鎴愪负涓鑸绋嫔簭镄勫叆鍙f柟娉曘傜被镄勬瀯阃犲櫒涔熶细寮曞彂璇ュ姩浣溿
2. java双亲委托机制是什么意思
这个机制是 java class loader 范畴的内容。‘樱和
java 虚拟机要将被用到的java类文件通过classLoader 加载到JVM内存中。
首先classloader 分三个级别,最上级 : bootstrap classLoader 中间级:extension classLoader 最低级 app classLoader.
当需要加载某个类的时候,会看看这个类是否已经被加载了,如果没有,会请求app 级来加载,app 请求 extension 级 extension 请求 bootstrap级, 由最高级来负责加载(这个就是双亲委派,委托 上两级的loader来做加载),如果高级的无法加载 则会将人物返回给 下一级 以此类推 最后如果双亲都不行 就由自己来加载。 为什么要用这个机制橘陵? 比如 java.lang.String 这个类,这个是jdk提圆颂戚供的类, 如果我们自定义个 包名:java.lang 然后在里面创建一个String 类, 当我在用String类的时候,根据前面所说,是由bootstrap级的loader 来进行加载的,这个时候它发现其实已经加载过了jdk的String了,那么就不会去加载自定义的String了,防止了重复加载 也加大了安全性。
纯手打,有问题指正。
3. JAVA动态代理设计原理及如何实现
Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地制定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分配到委托对象上反射执行,配置执行过程中,开发人员还可以进行修改
代理设计模式
代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息、过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。
为了保持行为的一致性,代理类和委托类通常会实现相同的接口
2. 引入代理能够控制对委托对象的直接访问,可以很好的隐藏和保护委托对象,也更加具有灵活性
代理机制及其特点
首先让我们来了解一下如何使用 Java 动态代理。具体有如下四步骤:
通过实现 InvocationHandler 接口创建自己的调用处理器;
通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;
通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;
通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。
代理类实例的一些特点
每个实例都会关联一个InvocationHandler(调用处理器对象),在代理类实例上调用其代理接口中声明的方法时,最终都会由InvocationHandler的invoke方法执行;
java.lang.Object中有三个方法也同样会被分派到调用处理器的 invoke 方法执行,它们是 hashCode,equals 和 toString;
代码示例
最后以一个简单的动态代理例子结束
4. 璺姹傦细绠杩颁簨浠跺勭悊链哄埗銆 鏄鍏充簬java锲惧舰鐢ㄦ埛鐣岄溃镄勚
鍦ㄥ浘褰㈢敤鎴风晫闱涓锛
绋嫔簭鍜岀敤鎴风殑浜や簰鏄阃氲繃缁勪欢鍝嶅簲钖勭崭簨浠舵潵瀹炵幇镄勚
渚嫔傦纴
鐢ㄦ埛
鍗曞嚮浜嗕竴涓鎸夐挳锛
镒忓懗镌鍙戠敓浜嗘寜阍镄勫崟鍑讳簨浠讹绂
阃変腑涓嬫媺妗嗕腑镄勪竴涓阃夐”锛
镒忓懗镌鍙戠敓浜
涓涓阃夐”浜嬩欢銆傚湪
Java
涓鑳戒骇鐢熶簨浠剁殑缁勪欢鍙锅氢簨浠舵簮锛屽傛寜阍銆傚傛灉甯屾湜瀵瑰崟鍑绘寜阍浜
浠惰繘琛屽勭悊锛屽彲缁欎簨浠舵簮锛堟寜阍锛夋敞鍐屼竴涓浜嬩欢鐩戝惉鍣锛埚傚寘钖鎸夐挳镄勫瑰櫒锛夛纴濡傚悓绛捐浜
涓涓濮旀墭钖埚悓锛
褰扑簨浠舵簮鍙戠敓浜嬩欢镞讹纴
浜嬩欢鐩戝惉鍣ㄥ氨浠f浛浜嬩欢婧愬瑰彂鐢熺殑浜嬩欢杩涜屽勭悊锛
杩
灏辨槸镓璋撶殑濮旀墭浜嬩欢澶勭悊链哄埗銆