자바 언어 기초 - 반사 메커니즘, 정규 표현 식

20241 단어 자바 언어
반사 메커니즘
반사 메커니즘 은 실행 상태 에서 임의의 클래스 에 대해 이 클래스 (class 파일) 의 모든 속성 과 방법 을 알 수 있 습 니 다.임의의 대상 에 대해 서 는 그것 의 임의의 방법 과 속성 을 호출 할 수 있다.이러한 동적 으로 정 보 를 얻 고 대상 을 동적 으로 호출 하 는 방법의 기능 을 자바 언어의 반사 메커니즘 이 라 고 한다.
쉽게 말 하면 동적 획득 류 의 정 보 는 자바 의 반사 체제 이다.유형 에 대한 해부 로 이해 할 수 있다.
Tomcat 은 요청 과 응답 을 처리 하 는 방식 을 제공 합 니 다.구체 적 인 처리 동작 이 다 르 기 때문에 대외 적 으로 인 터 페 이 스 를 제공 하고 개발 자가 구체 적 인 요청 과 응답 처 리 를 실현 합 니 다.
Class 클래스 는 바이트 파일 의 모든 내용 을 가 져 올 수 있 습 니 다. 반 사 는 이 클래스 에 의 해 이 루어 집 니 다.클래스 파일 을 해부 하려 면 이러한 바이트 파일 만 가 져 오 면 됩 니 다.
클래스 의 바이트 파일 가 져 오기:
package cn.itcast.reflect.demo;



import cn.itcast.bean.Person;



/*

 *             ,           

 */

public class ReflectDemo {



    /**

     * @param args

     * @throws ClassNotFoundException 

     */

    public static void main(String[] args) throws ClassNotFoundException {

        

//        getClassObject_1();

//        getClassObject_2();

        getClassObject_3();

        

    }

    /*

     *    :(  )

     *               ,       ,    。

     *    Class       。

     *      forName。

     *            ,    ,     。

     */

    public static void getClassObject_3() throws ClassNotFoundException {

        String className="cn.itcast.bean.Person";

        

        Class clazz=Class.forName(className);

        

        System.out.println(clazz);

    }

    

    /*

     *    :

     *                 .class       Class  。

     *        。

     *     ,                 。

     *     

     */

    public static void getClassObject_2() {

        Class clazz=Person.class;

        

        Class clazz1=Person.class;

        System.out.println(clazz==clazz1);



    }



    /*

     *           :

     *    :

     * Object   getClass  

     *        ,         ,     。

     */

    public static void getClassObject_1(){

        Person p=new Person();

        Class clazz=p.getClass();

        

        Person p1=new Person();

        Class clazz1=p1.getClass();

        

        System.out.println(clazz==clazz1);

    }



}




Class 의 구조 함수 가 져 오기:
package cn.itcast.reflect.demo;



import java.lang.reflect.Constructor;



public class ReflectDemo2 {



    /**

     * @param args

     * @throws Exception 

     */

    public static void main(String[] args) throws Exception {



        // createNewObject();

        createNewObject_2();

    }



    public static void createNewObject_2() throws Exception {



        // cn.itcast.bean.Person p = new cn.itcast.bean.Person("  ",39);

        

        /*

         *                     ,

         *                  

         *                     ,

         *           。

         *            

         *     :getConstructor(parameterTypes)

         */

        String name = "cn.itcast.bean.Person";

        Class clazz = Class.forName(name);

        //             

        Constructor constructor=clazz.getConstructor(String.class,int.class);

        //         newInstance          

        Object obj=constructor.newInstance("  ",38);

    }



    public static void createNewObject() throws ClassNotFoundException,

            InstantiationException, IllegalAccessException {



        //   :new   ,    new               ,      ,           ,             Person  

        cn.itcast.bean.Person p = new cn.itcast.bean.Person();



        //   :

        String name = "cn.itcast.bean.Person";

        //          ,      ,   Class  

        Class clazz = Class.forName(name);

        //          

        Object obj = clazz.newInstance();//      

    }



}




Class 의 필드 예제 가 져 오기: Public class AccessibleObjectextends Object implements Annotated Element AccessibleObject 류 는 Field, Method, Constructor 대상 의 기본 클래스 입 니 다.반 사 된 대상 을 사용 할 때 기본 자바 언어 접근 제어 검 사 를 취소 하 는 능력 으로 표시 합 니 다.
package cn.itcast.reflect.demo;



import java.lang.reflect.Field;



public class ReflectDemo3 {



    /**

     * @param args

     * @throws Exception

     */

    public static void main(String[] args) throws Exception {

        getFieldDemo();

    }



    /*

     *            

     */

    public static void getFieldDemo() throws Exception {



        Class clazz = Class.forName("cn.itcast.bean.Person");



        // Field field=clazz.getField("age");//        public   



        Field field=clazz.getDeclaredField("age");//            (    )

        //           ,    

        field.setAccessible(true);

        

        Object obj=clazz.newInstance();

        

        field.set(obj, 90);

        Object o=field.get(obj);

        

        System.out.println(o);

    }



}




Class 에서 가 져 오 는 방법:
package cn.itcast.reflect.demo;



import java.lang.reflect.Constructor;

import java.lang.reflect.Method;



import cn.itcast.bean.Person;



public class ReflectDemo4 {



    /**

     * @param args

     * @throws Exception

     */

    public static void main(String[] args) throws Exception {



        // getMethodDemo();

        // getMethodDemo_2();

        getMethodDemo_3();

    }



    public static void getMethodDemo_3() throws Exception {

        Class clazz = Class.forName("cn.itcast.bean.Person");



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



        Object obj = clazz.newInstance();

        method.invoke(obj, "  ", 39);



    }



    public static void getMethodDemo_2() throws Exception {



        Class clazz = Class.forName("cn.itcast.bean.Person");



        Method method = clazz.getMethod("show", null);//          

        // Person p=new Person();

        // p.show();



        // Object obj=clazz.newInstance();

        Constructor constructor = clazz.getConstructor(String.class, int.class);

        Object obj = constructor.newInstance("  ", 37);

        method.invoke(obj, null);

    }



    /*

     *     Class      

     */

    public static void getMethodDemo() throws Exception {



        Class clazz = Class.forName("cn.itcast.bean.Person");



        Method[] methods = clazz.getMethods();//           

        methods = clazz.getDeclaredMethods();//           (    )



        for (Method method : methods) {

            System.out.println(method);

        }



    }



}



package cn.itcast.bean;



public class Person {



    private int age;

    private String name;



    public Person(String name, int age ) {

        super();

        this.age = age;

        this.name = name;

        System.out.println("person param run..."+this.name+":"+this.age);

    }

    public Person() {

        super();

        System.out.println("person run");

    }

    

    public void show(){

        System.out.println(name+"...show run..."+age);

    }

    

    private void privateMethod(){

        System.out.println("private method run");

    }

    

    public void paramMethod(String str,int num){

        System.out.println("paramMethod run......"+str+":"+num);

    }

    

    public static void staticMethod(){

        System.out.println("staticMethod run");

    }

}




반사 연습:
package cn.itcast.reflect.test;



import java.io.File;

import java.io.FileInputStream;

import java.util.Properties;



/*

 *     

 */

public class ReflectTest {



    /**

     * @param args

     * @throws Exception 

     */

    public static void main(String[] args) throws Exception {



        MainBoard mb=new MainBoard();

        mb.run();

        

        //             ,        

//        mb.usePCI(new SoundCard());//  SoundCard,      

        

        

        //     ,         

        //   new,      class  ,            

        File configFile=new File("pci.properties");

        

        Properties prop=new Properties();

        FileInputStream fis=new FileInputStream(configFile);

        

        prop.load(fis);

        

        for(int x=0;x<prop.size();x++){

            

            String pciName=prop.getProperty("pci"+(x+1));

            

            Class clazz=Class.forName(pciName);// Class     pci  

            

            PCI p=(PCI) clazz.newInstance();//        PCI   ,               PCI

            

            mb.usePCI(p);

        }

        fis.close();

        

        

    }

}



package cn.itcast.reflect.test;



public class MainBoard {



    public void run() {

        System.out.println("main board run");

    }



    public void usePCI(PCI p) {//  ,     

        if (p != null) {

            p.open();

            p.close();

        }

    }

}





package cn.itcast.reflect.test;



public interface PCI {

    

    public void open();

    public void close();

}

package cn.itcast.reflect.test;



public class SoundCard implements PCI{



    public void open(){

        System.out.println("sound open");

    }

    public void close(){

        System.out.println("sound close");

    }



}

package cn.itcast.reflect.test;



public class NetCard implements PCI{



    @Override

    public void open() {

        System.out.println("net open");

    }



    @Override

    public void close() {

        System.out.println("net close");

    }

}



pci.properties

pci1=cn.itcast.reflect.test.SoundCard

pci2=cn.itcast.reflect.test.NetCard

정규 표현 식 정규 표현 식 은 문자열 데 이 터 를 조작 하 는 데 사 용 됩 니 다.특정한 기 호 를 통 해 표현 한다.정규 표현 식 은 쓰 기 를 간소화 하 였 으 나 읽 기 는 나 빠 졌 다.
package cn.itcast.regex.demo;



public class RegexDemo {



    /**

     * @param args

     */

    public static void main(String[] args) {



        String qq = "123456789";

        // checkQQ(qq);



        String regex = "[1-9][0-9]{4,14}";//      

        // String regex="[1-9]\\d{4,14}";//     



        // boolean b=qq.matches(regex);

        // System.out.println(qq+":"+b);



        String str = "aoob";

        String reg = "ao+b";// o      

        boolean b = str.matches(reg);

        System.out.println(b);



    }



    /*

     *   :       QQ     

     *   :  5-15 ;     ;0    

     */

    public static void checkQQ(String qq) {

        int len = qq.length();

        if (len >= 5 && len <= 15) {

            if (!qq.startsWith("0")) {

                try {

                    long l = Long.parseLong(qq);

                    System.out.println(qq + "  ");

                } catch (NumberFormatException e) {

                    System.out.println(qq + "      ");

                }

            } else {

                System.out.println(qq + "  0  ");

            }

        } else {

            System.out.println("    ");

        }

    }



}




정규 표현 식 은 문자열 의 일반적인 작업 그룹 과 캡 처 캡 처 그룹 에 대해 왼쪽 에서 오른쪽으로 괄호 를 계산 하여 번 호 를 매 길 수 있 습 니 다.예 를 들 어 표현 식 (A) (B (C))) 에 다음 과 같은 그룹 이 네 개 있 습 니 다.
1     ((A)(B(C))) 2     \A 3     (B(C)) 4     (C)
그룹 0 은 항상 전체 표현 식 을 대표 합 니 다.
캡 처 그룹 이 라 고 명명 한 이 유 는 일치 하 는 그룹 과 일치 하 는 입력 시퀀스 의 모든 하위 시퀀스 를 저장 하기 때 문 입 니 다.캡 처 된 하위 시퀀스 는 나중에 Back 참조 로 표현 식 에서 사용 할 수 있 으 며, 일치 하 는 작업 이 끝 난 후에 일치 하 는 장치 에서 가 져 올 수 있 습 니 다.
그룹 과 연 결 된 캡 처 입력 은 항상 그룹 과 최근 에 일치 하 는 하위 시퀀스 입 니 다.양 적 인 이유 로 그룹 을 다시 계산 하면 두 번 째 계산 이 실 패 했 을 때 이전에 캡 처 한 값 (있 으 면) 을 유지 합 니 다. 예 를 들 어 문자열 'aba' 를 표현 식 (a (b)?) + 와 일치 시 키 면 두 번 째 그룹 을 'b' 로 설정 합 니 다.일치 하 는 시작 마다 캡 처 된 입력 이 버 려 집 니 다.
(?) 로 시작 하 는 그룹 은 순수한 비 포획 그룹 으로 텍스트 를 포획 하지 않 고 조합 계 에 대해 계산 하지 않 습 니 다.
public final class Patternextends Object implements Serializable 정규 표현 식 의 컴 파일 표시 형식 입 니 다.문자열 로 지정 한 정규 표현 식 은 먼저 이러한 인 스 턴 스 로 컴 파일 되 어야 합 니 다 (정규 표현 식 을 대상 으로 밀봉 합 니 다).그리고 얻 은 모드 를 Matcher (일치) 대상 을 만 드 는 데 사용 할 수 있 습 니 다. 정규 표현 식 에 따라 이 대상 은 임의의 문자 시퀀스 와 일치 할 수 있 습 니 다.일치 하 는 모든 상 태 를 일치 기 에 저장 하기 때문에 여러 일치 기 는 같은 모드 를 공유 할 수 있 습 니 다.따라서 전형 적 인 호출 순 서 는 Pattern p = Pattern. copile ('a * b') 이다.Matcher m = p.matcher("aaaaab"); boolean b = m.matches();
package cn.itcast.regex.demo;



import java.util.regex.Matcher;

import java.util.regex.Pattern;



public class RegexDemo2 {



    /**

     * @param args

     */

    public static void main(String[] args) {



        /*

         *               

         * 1.  

         *     String  matchs  ;

         * 

         * 2.  

         *     String   split  ;

         * 

         * 3.  

         *     String   replaceAll  ;

         * 

         * 4.  

         *             ;

         * Pattern p = Pattern.compile("a*b");

         *        matcher        ,               Matcher

         * Matcher m = p.matcher("aaaaab");

         *   Matcher                

         * boolean b = m.matches();

         */

        // functionDemo1();

        // functionDemo2();

        // functionDemo3();

        functionDemo4();

    }



    /*

     *     

     */

    public static void functionDemo4() {

        String str = "da jia hao,ming tian bu fang jia!";



        String regex = "\\b[a-z]{3}\\b";// \\b-    ,     jia hao    min   



        // 1.        

        Pattern p = Pattern.compile(regex);

        // 2.             

        Matcher m = p.matcher(str);



        //   Matcher             

        //               

        //      find()  

        System.out.println(str);

        while (m.find()) {

            System.out.println(m.group());//          

            

            System.out.println(m.start()+":"+m.end());//          

        }



    }



    /*

     *     

     */

    public static void functionDemo3() {



        String str = "zhangsantttxiaoqiangmmmmmzhaoliu";



        // str=str.replaceAll("(.)\\1+", "#");//      #



        str = str.replaceAll("(.)\\1+", "$1");//           ;$1,            

        System.out.println(str);



        String tel = "15812345678";// 158****5678

        tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");

        System.out.println(tel);

    }



    /*

     *     

     */

    public static void functionDemo2() {

        // String str="zhangsan        xiaoqiang    zhaoliu";

        // String[] names=str.split(" +");//         



        // String str="zhangsan.xiaoqiang.zhaoliu";

        // String[] names=str.split("\\.");



        String str = "zhangsantttxiaoqiangmmmmmzhaoliu";//  ttt,mmmmm  

        // (X) X,      ;
nth // ((A) (B(C)) , , ; , 0 String[] names = str.split("(.)\\1+");// , for (String name : names) { System.out.println(name); } } /* * */ public static void functionDemo1() { // String tel = "15800001111"; // String regex="1[358][0-9]{9}"; String regex = "1[358]\\d{9}"; boolean b = tel.matches(regex); System.out.println(tel + ":" + b); } }

정규 표현 식 - 연습:
package cn.itcast.regex.test;



import java.util.TreeSet;



public class RegexTest {



    /**

     * @param args

     */

    public static void main(String[] args) {

        

        /*

         * 1.    : ...    ...  ..  ... ...    ...  ...  

         * 2. ip    

         * 3.       

         */

//        test_1();

//        test_2();

        test_3();

    }

    

    /*

     *       

     */

    public static void test_3() {

        

        String mail="[email protected]";

        

        String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{2,3})+";//(\\.[a-zA-Z]{2,3})+,   .com,.cn  ,        

        regex="\\w+@a\\w+(\\.\\w+)+";//     

        

        boolean b=mail.matches(regex);

        

        System.out.println(mail+":"+b);

        

    }



    /*

     * ip    

     * 192.168.10.34    127.0.0.1    3.3.3.3    105.70.11.55

     */

    public static void test_2() {

        

        String ip_str="192.168.10.34  127.0.0.1 3.3.3.3    105.70.11.55";

        

        //1.   ip          ,   ip        ,  

        //          0       ;     2 0;

        

        ip_str=ip_str.replaceAll("(\\d+)", "00$1");

//        System.out.println(ip_str);//00192.00168.0010.0034  00127.000.000.001 003.003.003.003    00105.0070.0011.0055

        

        //2.         

        ip_str=ip_str.replaceAll("0*(\\d{3})", "$1");

//        System.out.println(ip_str);//192.168.010.034  127.000.000.001 003.003.003.003    105.070.011.055

        

        //  ip  

        String[] ips=ip_str.split(" +");

        TreeSet<String> ts=new TreeSet<String>();

        

        for(String ip:ips){

            ts.add(ip);

        }

        

        for(String ip:ts){

            System.out.println(ip.replaceAll("0*(\\d+)", "$1"));

        }

    }

    /*

     *    

     */

    public static void test_1(){

        

        String str=" ...    ...  ..  ... ...    ...  ...  ";

        

        //1.       “.”   ,    

        str=str.replaceAll("\\.+", "");

        //2.    

        str=str.replaceAll("(.)\\1+", "$1");

        System.out.println(str);

    }



}




정규 표현 식 - 연습 - 파충류
package cn.itcast.regex.test;



import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;



/*

 *     :                         

 * 

 *       

 */

public class RegexTest2 {



    /**

     * @param args

     * @throws IOException

     */

    public static void main(String[] args) throws IOException {



        // List<String> list=getMail();

        List<String> list = getMailByWeb();

        for (String mail : list) {

            System.out.println(mail);

        }



    }



    public static List<String> getMailByWeb() throws IOException {



        // 1.     

        URL url=new URL("http://iask.sina.com.cn/b/1005465.html");

        BufferedReader bufIn=new BufferedReader(new InputStreamReader(url.openStream()));



        // 2.             ,           

        String mail_regex = "\\w+@\\w+(\\.\\w+)+";



        List<String> list = new ArrayList<String>();



        Pattern p = Pattern.compile(mail_regex);



        String line = null;

        while ((line = bufIn.readLine()) != null) {

            Matcher m = p.matcher(line);

            while (m.find()) {

                // 3.              

                list.add(m.group());

            }

        }

        bufIn.close();

        return list;

    }



    public static List<String> getMail() throws IOException {

        // 1.     

        BufferedReader bufr = new BufferedReader(

                new FileReader("c:\\mail.html"));



        // 2.             ,           

        String mail_regex = "\\w+@\\w+(\\.\\w+)+";



        List<String> list = new ArrayList<String>();



        Pattern p = Pattern.compile(mail_regex);



        String line = null;

        while ((line = bufr.readLine()) != null) {

            Matcher m = p.matcher(line);

            while (m.find()) {

                // 3.              

                list.add(m.group());

            }

        }

        bufr.close();

        return list;

    }



}

좋은 웹페이지 즐겨찾기