java源代码分析 实在是不太会,求高手教教我。

Python013

java源代码分析 实在是不太会,求高手教教我。,第1张

package test2

import java.io.BufferedReader

import java.io.File

import java.io.FileInputStream

import java.io.FileOutputStream

import java.io.IOException

import java.io.InputStream

import java.io.InputStreamReader

import java.util.HashMap

import java.util.Map

import java.util.Set

public class JavaCodeAnalyzer {

    public static void analyze(File file) throws IOException{

        //FileOutputStream fos = new FileOutputStream("F"+File.separator+"result.txt")

        if(!(file.getName().endsWith(".txt")||file.getName().endsWith(".java"))){

            System.out.println("输入的分析文件格式不对!")

        }

        InputStream is= new FileInputStream(file)

        BufferedReader br= new BufferedReader(new InputStreamReader(is))

        String temp

        int count=0

        int countSpace=0

        int countCode=0

        int countDesc=0

        Map<String, Integer> map = getKeyWords()

        while((temp=br.readLine())!=null){

            countKeys(temp, map)

            count++

            if(temp.trim().equals("")){

                countSpace++

            }else if(temp.trim().startsWith("/*")||temp.trim().startsWith("//")){

                countDesc++

            }else{

                countCode++

            }

        }

        System.out.printf("代码行数:"+countCode+"占总行数的%4.2f\n",(double)countCode/count)

        System.out.printf("空行数:"+countSpace+"占总行数的%4.2f\n",(double)countSpace/count)

        System.out.printf("注释行数:"+countDesc+"占总行数的%4.2f\n",(double)countDesc/count)

        System.out.println("总行数:"+count)

        System.out.println("出现最多的5个关键字是:")

        System.out.println("")

        System.out.println("")

        System.out.println("")

        System.out.println("")

        System.out.println("")

    }

    public static void main(String[] args) {

        getKeyWords()

        File file = new File("F://Test.java")

        try {

            analyze(file)

        } catch (IOException e) {

            // TODO 自动生成 catch 块

            e.printStackTrace()

        }

    }

    public static Map<String,Integer> getKeyWords(){

        Map<String,Integer> map = new HashMap<String, Integer>()

        String[]keywords = {"abstract","assert","boolean","break","byte","case","catch","char","class","continue","default","do","double","else","enum","extends","final","finally","float","for","if","implements","import","instanceof","int","interface","long","native","new","package","private","protected","public","return","    strictfp","short","static","super","    switch","synchronized","this","throw","throws","transient","try","void","volatile","while","goto","const"}

        for(String s:keywords){

            map.put(s, 0)

        }

        return map

    }

    public static void countKeys(String s,Map<String,Integer> map){

        Set<String> keys = map.keySet()

        for(String ss:keys){

            if(s.indexOf(ss)!=-1){

                map.put(ss, map.get(ss)+1)

            }

        }

    }

}

上班没啥时间了,还有点没写完,你在想想。

1、拿到代码查看项目当中是否有readme这样的文件,如果没有查看是否有文档之类的

2、代码当中没有文档,那么就想你的同事或者其他人要这个框架的介绍或者资料

3、先请教别人这个框架的大体思路

4、自己独立去按照文档或者其他人说的思路去看代码

5、不懂的地方全部记录下面,一次行去问,有的时候很多问题在你看到后面的东西的时候就自然明白了

6、看懂了代码之后自己尝试着写一个,看自己的理解是否正确就这么多了。