导航:首页 > 源码编译 > java源码分析

java源码分析

发布时间:2022-01-27 06:11:54

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

packagetest2;

importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.util.HashMap;
importjava.util.Map;
importjava.util.Set;

publicclassJavaCodeAnalyzer{
publicstaticvoidanalyze(Filefile)throwsIOException{
//FileOutputStreamfos=newFileOutputStream("F;"+File.separator+"result.txt");
if(!(file.getName().endsWith(".txt")||file.getName().endsWith(".java"))){
System.out.println("输入的分析文件格式不对!");
}
InputStreamis=newFileInputStream(file);
BufferedReaderbr=newBufferedReader(newInputStreamReader(is));
Stringtemp;
intcount=0;
intcountSpace=0;
intcountCode=0;
intcountDesc=0;
Map<String,Integer>map=getKeyWords();
while((temp=br.readLine())!=null){
countKeys(temp,map);
count++;
if(temp.trim().equals("")){
countSpace++;
}elseif(temp.trim().startsWith("/*")||temp.trim().startsWith("//")){
countDesc++;
}else{
countCode++;
}
}
System.out.printf("代码行数:"+countCode+"占总行数的%4.2f ",(double)countCode/count);
System.out.printf("空行数:"+countSpace+"占总行数的%4.2f ",(double)countSpace/count);
System.out.printf("注释行数:"+countDesc+"占总行数的%4.2f ",(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("");
}
publicstaticvoidmain(String[]args){
getKeyWords();
Filefile=newFile("F://Test.java");
try{
analyze(file);
}catch(IOExceptione){
//TODO自动生成catch块
e.printStackTrace();
}
}
publicstaticMap<String,Integer>getKeyWords(){
Map<String,Integer>map=newHashMap<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(Strings:keywords){
map.put(s,0);
}
returnmap;
}
publicstaticvoidcountKeys(Strings,Map<String,Integer>map){
Set<String>keys=map.keySet();
for(Stringss:keys){
if(s.indexOf(ss)!=-1){
map.put(ss,map.get(ss)+1);
}
}
}
}

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

❷ java代码详细分析

这个方法就是生成一个随机数(这个随机数是有范围的),但是这个随机数可能小于0,所以就加了一个if判断,如果小于0就在前面加负号,负负为正,然后将这个随机数返回。

❸ java代码解析

图发不上来,请看参考资料连接

初学的话只要了解值传递不会改变,引用传递会改变。
至于原理,有兴趣的话可以了解一下。下面讲得很详细
讲解:按值传参与按引用传参

----------------------------------------------------------------------------

类中包含方法,方法又分为方法声明和方法实现,方法声明中又有参数列表,参数根据调用后的效果不同,即是否改变参数的原始数值,又可以分为两种:按值传递的参数与按引用传递的参数。

他们的区别是什么呢?上面旺旺老师是说调用后的效果,我们看一个案例说明:比如有个女孩非常喜欢QQ,还给自己起了个浪漫的名字“轻舞飞扬”,飞扬小姐认识了一个网友“痞子蔡”(n年前非常火的一个网络小说《第一次亲密接触》的两个主人公),他们聊的很投缘,有天飞扬小姐竟然把自己的电话号码告诉了痞子蔡,有天痞子蔡竟然电话过来约飞扬小姐见面,考虑到网络的虚幻与现实人心的叵测,飞扬小姐面临着艰难的选择:是否去见网友?

那么见网友就是个方法,方法的参数就是轻舞飞扬,如果痞子蔡是个披着羊皮的狼,那飞扬小姐就可能面临危险,比如身上少些东西或者多些东西,就是说在方法体中有可能改变参数的原始数值。

现实中飞扬小姐只有两种选择,第一,为了爱情奋不顾身,上刀山下火海,再所不辞,但这有可能改变飞扬状态,即数值;第二,委婉拒绝以求自保,但如果痞子蔡为人特别好,比如像旺旺老师这样(呕吐中),她也许会失去一段大好的姻缘。这里,如果科技足够发达,我们可以完全给出第三种选择,轻舞飞扬制作一个自己的替身,即把自己备份一份,然后把备份传入方法体,这样不论痞子蔡对她做了什么都不会对她的源体发生影响,又能检测痞子蔡对自己是否真心。

OK,这里我们就把飞扬小姐本人去见网友叫按引用传递,这样在方法体中发生的改变在方法调用完对参数还有影响,而把让她替身去叫按值传递,这样方法调用完对参数原始数值没有影响,发生改变的只是参数的备份,这份备份在方法调用完会自动消亡,也就是说飞扬的替身在见完网友自动消亡。最后可以简单概括为一句话:按值传递参数数值不变,按引用传递参数数值改变。

我们上面刚学习了JAVA的数据类型,则有:值类型就是按值传递的,而引用类型是按引用传递的。下面看一个例子:

public class TestValueAndRef {

public static void main(String[] args) {

Student student = new Student();

student.stuAge = 10;

int a = 10;

int arr[] = new int[]{9, 5, 27};

System.out.println("初始值 a = " + a);

System.out.println("初始值 student.stuAge = " + student.stuAge);

System.out.println("初始值 arr[0] = " + arr[0]);

TestValueAndRef testValueAndRef = new TestValueAndRef();

testValueAndRef.change(a, student, arr);

System.out.println("调用函数后 a = " + a);

System.out.println("调用函数后 student.stuAge = "

+ student.stuAge);

System.out.println("调用函数后 arr[0] = " + arr[0]);

}

public void change(int pa, Student pstu, int[] parr) {

//方法体中改变值类型pa的值

pa = pa + 10;

//方法体中改变引用类型stu,parr的值

pstu.stuAge = pstu.stuAge + 10;

parr[0] = parr[0] + 10;

System.out.println("方法体改变后pa = " + pa);

System.out.println("方法体改变后student.stuAge = "

+ student.stuAge);

System.out.println("方法体改变后parr[0] = " + parr[0]);

}

}

运行结果:

--------------------------------------------------------------------------

初始值 a = 10

初始值 student.stuAge = 10

初始值 arr[0] = 9

方法体改变后pa = 20

方法体改变后student.stuAge = 20

方法体改变后parr[0] = 19

调用函数后 a = 10

调用函数后 student.stuAge = 20

调用函数后 arr[0] = 19

---------------------------------------------------------------------------------

我们看到,基本数据类型int变量a虽然在方法体中改变了数值,但方法调用完后其原始数值并没有改变。而引用数据类型Student在方法体中改变年龄的数值,方法执行完其数值发生了改变,数组也是引用类型,所以其值也发生了改变。也就是说:按值传递参数数值不变,按引用传递参数数值改变。它们在内存中的变化如下所示:

根据上面讲解的值类型和引用类型的知识,int类型变量在栈中分配一块内存,而student与arr分配两块内存,当方法调用时,创建三个变量pa,pstu,parr这里相当于把栈中的数据全备份一份给这三个数值,则有:

大家看到,不管是按值传递还是按引用传递,都是把栈中的数据备份了一份给参数变量,只不过值类型备份的是具体的数值,而引用类型备份的是内存地址。

方法体执行完时:

我们看到,根据pstu与parr改变了堆中的具体数值,而pa改变的只是栈中的数值。最后方法调用结束,pstu,pa,parr三个变量消亡,则有:

根据这样的内存变换,您知道按值传递与按引用传递的深层原因了吗

❹ java源码分析,最好的解答,应该最好逐句解答,这句什么要这样写,为什么不哪样写,看的人一样就看懂了。

但是如果连程序最基本的元素——标识符、关键字、……等等的都没有了解的话,那么最先开始看实例是比较困难的,哪怕是逐句解释。当然了,可以把概念放到实例中讲解,但是这样一来大量概念和其它信息的相互关联,未必能让初学者在一开始就理解实例程序。
我也觉得结合实例的基础讲解比价好,只是不能一味全部是实例,当然也不能全部是概念,要相互结合,适当地概括和总结。

❺ java 代码解析

你的第一个错误就是类没有找到,原因是.java 文件名和类名不一致,仔细检查一下吧,另外程序里本身还有一些错误,我已经改好了,代码如下:

public class Example1_1 {

public static void main(String args[])
{
String arrStu[][]={{"20073401","王宏","女","18"},{"20073402","张华","女","19"},
{"20073403","刘鹏","女","20"},{"20073404","王秋月","女","22"}};

System.out.println("下面是打印结果\t学号\t姓名\t性别\t年龄");
for(int i=0;i<arrStu.length;i++)
{ System.out.println("第"+(i+1)+"行的所有元素:");
for (int j=0;j<arrStu[i].length;j++)
{ System.out.println(arrStu[i][j]+"\t");
}
System.out.println("\n");
}

}

}

❻ java代码解读

第一个if是判断searchkey是不是空的,如果不是空的,就追加到name字段作为查询条件,like模糊查询
接着第二个if判断如果status的值不为空,就追加到status作为条件
如果status为空,走else分支,从userContext中获取到employee对象,接着判断,如果它的角色不是manager的话
把这个对象的id拿出来,作为seller.Id的条件进行查询

❼ java代码分析

定义一个Mystery类,包含一个字符串变量s
Mystery m = new Mystery();
产生一个Mystery类的实例m,调用构造方法Mystery()
构造方法的作用是令s="constructor"
再调用m的go()方法
go()方法的作用是在屏幕上输出s
所以显示"constructor"字符串

❽ 解读Java代码

从文件里读入数据,初始化Vehicles,初始化Edges,通过geneticAlgorithm生成解决方案。最后打印结果数据。

❾ Java大神如何学习和分析Java框架的源码

1、拿到代码查看项目当中是否有readme这样的文件,如果没有查看是否有文档之类的
2、代码当中没有文档,那么就想你的同事或者其他人要这个框架的介绍或者资料
3、先请教别人这个框架的大体思路
4、自己独立去按照文档或者其他人说的思路去看代码
5、不懂的地方全部记录下面,一次行去问,有的时候很多问题在你看到后面的东西的时候就自然明白了
6、看懂了代码之后自己尝试着写一个,看自己的理解是否正确就这么多了。

❿ java基础代码解读

//Scanner是一个是一个接收键盘输入的一个类


//这句话创建了一个Scanner实例
Scannerin=newScanner(System.in);
//
这句话打印了Whatisyourname
System.out.println("Whatisyourname");
//这句话等待用户输入当用户输入字符串后按下回车nextLine()将返回一个字符串
//符给name
Stringname=in.nextLine();
//同上
System.out.println("Howoldareyou");
//这句视乎有错
//age是int类型的所以你应该用nextInt()而不是nextLine()
//怎样你就必须输入数字
intage=in.nextLine();

//这句话打印你的信息
//加入你输入的name为张三age为20
//将打印Hello张三,nextyear.you'll,you21
System.out.println("Hello"+name+",nextyear.you'll,you"+(age+1));

阅读全文

与java源码分析相关的资料

热点内容
android图片变灰 浏览:268
linuxvi下一个 浏览:975
安卓手机的应用锁怎么解 浏览:735
linux增加路径 浏览:849
sql身份证号最后四位加密 浏览:533
xp系统表格加密 浏览:856
光遇安卓军大衣什么时候上线 浏览:840
android应用商店图标 浏览:341
java计算圆的面积 浏览:643
应用编译优化recovery 浏览:577
域控命令n 浏览:258
php导出文件 浏览:15
谷歌地图网页版无法连接服务器地址 浏览:298
菜鸟工具在线编译python 浏览:858
栅格化命令有何作用 浏览:825
为什么压缩文件不能解压 浏览:311
足球app哪个软件好 浏览:96
产品经理逼疯程序员的一天 浏览:17
修改svn服务器ip地址 浏览:584
下列关于编译说法正确的是 浏览:246