[425] 2021-08-08_自定义类加载器

文档创建者:s7ckTeam
浏览次数:7
最后更新:2025-01-16
2021-08-08_自定义类加载器 a l u m m 0 x   a l u m m 0 x   2 0 2 1 - 0 8 - 0 8   # J a v a   , 2 5 j a v a . l a n g . C l a s s L o a d e r C l a s s L o a d e r f i n d C l a s s C l a s s N o t F o u n d E x c e p t i o n C l a s s L o a d e r . l o a d C l a s s 1 2 B o o t s t r a p C l a s s l o a d e r p r o t e c t e d   C l a s s < ? >   f i n d C l a s s ( S t r i n g   n a m e )   t h r o w s   C l a s s N o t F o u n d E x c e p t i o n   {             t h r o w   n e w   C l a s s N o t F o u n d E x c e p t i o n ( n a m e ) ; } p r o t e c t e d   C l a s s < ? >   l o a d C l a s s ( S t r i n g   n a m e ,   b o o l e a n   r e s o l v e )             t h r o w s   C l a s s N o t F o u n d E x c e p t i o n     {             s y n c h r o n i z e d   ( g e t C l a s s L o a d i n g L o c k ( n a m e ) )   {                     / /   F i r s t ,   c h e c k   i f   t h e   c l a s s   h a s   a l r e a d y   b e e n   l o a d e d                     C l a s s < ? >   c   =   f i n d L o a d e d C l a s s ( n a m e ) ;                     i f   ( c   = =   n u l l )   {                             l o n g   t 0   =   S y s t e m . n a n o T i m e ( ) ;                             t r y   {                                     i f   ( p a r e n t   ! =   n u l l )   {                                             c   =   p a r e n t . l o a d C l a s s ( n a m e ,   f a l s e ) ;                                     }   e l s e   {                                             c   =   f i n d B o o t s t r a p C l a s s O r N u l l ( n a m e ) ;                                     }                             }   c a t c h   ( C l a s s N o t F o u n d E x c e p t i o n   e )   {                                     / /   C l a s s N o t F o u n d E x c e p t i o n   t h r o w n   i f   c l a s s   n o t   f o u n d                                     / /   f r o m   t h e   n o n - n u l l   p a r e n t   c l a s s   l o a d e r                             }                             i f   ( c   = =   n u l l )   {                                     / /   I f   s t i l l   n o t   f o u n d ,   t h e n   i n v o k e   f i n d C l a s s   i n   o r d e r                                     / /   t o   f i n d   t h e   c l a s s .                                     l o n g   t 1   =   S y s t e m . n a n o T i m e ( ) ;                                     c   =   f i n d C l a s s ( n a m e ) ;                                     / /   t h i s   i s   t h e   d e f i n i n g   c l a s s   l o a d e r ;   r e c o r d   t h e   s t a t s                                     s u n . m i s c . P e r f C o u n t e r . g e t P a r e n t D e l e g a t i o n T i m e ( ) . a d d T i m e ( t 1   -   t 0 ) ;                                     s u n . m i s c . P e r f C o u n t e r . g e t F i n d C l a s s T i m e ( ) . a d d E l a p s e d T i m e F r o m ( t 1 ) ;                                     s u n . m i s c . P e r f C o u n t e r . g e t F i n d C l a s s e s ( ) . i n c r e m e n t ( ) ;                             }                     }                     i f   ( r e s o l v e )   {                             r e s o l v e C l a s s ( c ) ;                     }                     r e t u r n   c ;             }     }
3 f i n d C l a s s l o a d C l a s s f i n d C l a s s l o a d C l a s s p a c k a g e   L o a d e r ; i m p o r t   j a v a . i o . B y t e A r r a y O u t p u t S t r e a m ; i m p o r t   j a v a . i o . F i l e ; i m p o r t   j a v a . i o . F i l e I n p u t S t r e a m ; p u b l i c   c l a s s   M y C l a s s l o a d e r   e x t e n d s   C l a s s L o a d e r {       p u b l i c   s t a t i c   v o i d   m a i n ( S t r i n g [ ]   a r g s )   t h r o w s   C l a s s N o t F o u n d E x c e p t i o n ,   I l l e g a l A c c e s s E x c e p t i o n ,   I n s t a n t i a t i o n E x c e p t i o n   {               n e w   M y C l a s s l o a d e r 1 ( ) . l o a d C l a s s ( " L o a d e r . U s e r " ) . n e w I n s t a n c e ( ) ;     } } c l a s s   M y C l a s s l o a d e r 1   e x t e n d s   C l a s s L o a d e r {       p u b l i c   M y C l a s s l o a d e r 1 ( )   {               s u p e r ( ) ;     }       @ O v e r r i d e       p r o t e c t e d   C l a s s < ? >   f i n d C l a s s ( S t r i n g   n a m e )   t h r o w s   C l a s s N o t F o u n d E x c e p t i o n   {               S y s t e m . o u t . p r i n t l n ( " " ) ;               / / , n a m e x x . x x . x x . n a m e               F i l e   f i l e   =   n e w   F i l e ( " D : c o d e t e s r t t a r g e t c l a s s e s "   +   n a m e . r e p l a c e ( " . " ,   " / " )   +   " . c l a s s " ) ;               t r y   {                       / / c l a s s                       / /   . c l a s s 使                       F i l e I n p u t S t r e a m   f i s   =   n e w   F i l e I n p u t S t r e a m ( f i l e ) ;                       B y t e A r r a y O u t p u t S t r e a m   b a o s   =   n e w   B y t e A r r a y O u t p u t S t r e a m ( ) ;                       b y t e [ ]   b y   =   n e w   b y t e [ 1 0 2 4 ] ;                       i n t   r e s u l t   =   - 1 ;                       w h i l e   ( ( r e s u l t   =   f i s . r e a d ( b y ) )   ! =   - 1 ) {                               b a o s . w r i t e ( b y ) ;                     }                       b y t e [ ]   b y t e s   =   b a o s . t o B y t e A r r a y ( ) ;                       / / C l a s s                       C l a s s < ? >   c   =   t h i s . d e f i n e C l a s s ( n a m e ,   b y t e s ,   0 ,   b y t e s . l e n g t h ) ;                       r e t u r n   c ;             }   c a t c h   ( E x c e p t i o n   e )   {                       e . p r i n t S t a c k T r a c e ( ) ;             }               / / f i n d C l a s s - - C l a s s N o t F o u n d E x c e p t i o n               r e t u r n   s u p e r . f i n d C l a s s ( n a m e ) ;     } }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则