package test2;
成都创新互联2013年开创至今,是专业互联网技术服务公司,拥有项目网站建设、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元盘龙做网站,已为上家服务,为盘龙各地企业和个人服务,联系电话:028-86922220
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;
MapString, 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 MapString,Integer getKeyWords(){
MapString,Integer map = new HashMapString, 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,MapString,Integer map){
SetString keys = map.keySet();
for(String ss:keys){
if(s.indexOf(ss)!=-1){
map.put(ss, map.get(ss)+1);
}
}
}
}
上班没啥时间了,还有点没写完,你在想想。
1)尽量指定类、方法的final修饰符。带有final修饰符的类是不可派生的,Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,此举能够使性能平均提高50%。
2)尽量重用对象。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此生成过多的对象将会给程序的性能带来很大的影响。
3)尽可能使用局部变量。调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,其他变量,如静态变量、实例变量等,都在堆中创建速度较慢。
4)慎用异常。异常对性能不利,只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。
5)乘法和除法使用移位操作。用移位操作可以极大地提高性能,因为在计算机底层,对位的操作是最方便、最快的,但是移位操作虽然快,可能会使代码不太好理解,因此最好加上相应的注释。
6)尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用 Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销。
尽量在合适的场合使用单例。使用单例可以减轻加载的负担、缩短加载的时间、提高加载的效率,但并不是所有地方都适用于单例。
class Person {
public String name; //定义一个name属性
public String location; //定义一个location属性
Person(String name){ //定义一个构造方法,用于初始化name属性
this.name = name;
location = "beijing"; //初始化location属性
}
Person(String name,String location) { //重载一个构造方法,用于初始化name属性和location属性
this.name = name;
this.location = location;
}
public String info() { //定义一个方法,返回实例的属性信息
return "name:"+ name +"location:"+location;
}
}
class Teacher extends Person { //定义一个Teacher类,从Person继承
private String capital;
Teacher (String name,String capital) { //定义一个构造方法,用于初始化name和capital属性
this(name,"beijing",capital); //调用本类中定义的构造方法
}
Teacher (String n,String l,String capital){ //定义一个构造方法,用于初始Teacher类中的capital,name和location属性
super (n,l); //调用父类中的构造方法初始化name,location属性
this.capital = capital; //初始化Teacher类中的capital属性
}
public String info() { //重写父类中的info()方法,并且附加capital属性的信息
return super.info() + "capital" + capital; //返回Teacher的各个属性信息
}
}
class Student extends Person { // 定义一个Student类,从Person继承
private String school; //定义chool字段
Student(String name,String school) { //定义一个构造方法,用于初始化name和school属性
this(name,"beijing",school); //调用本类中定义的构造方法
}
Student(String n,String l,String school) { //定义一个构造方法,用于初始Student类中的school,name和location属性
super(n,l); //调用父类中的构造方法初始化name,location属性
this.school = school; //初始化Student类中的school字段
}
public String info() { /重写父类中的info()方法
return super.info() + "school:" + school; //返回Student类中各个字段或属性信息
}
}
public class Test { //定义Test主类,用于测试定义各个类
public static void main (String[] args) {
Person p1 = new Person("A"); //实例化Person类,调用构造器初始化name属性
Person p2 = new Person("B","shanghai"); //实例化Person类,调用构造器初始化name,location属性
Student s1 = new Student("C","s1"); //实例化Student类,调用构造器初始化name,school属性
Student s2 = new Student("C","shanghai","s2"); //实例化Student类,调用构造器初始化name,location,school属性
Teacher t1 = new Teacher("D","perfessor"); //实例化Teacher类,调用构造器初始化name,capital属性
System.out.println(p1.info()); //输出实例p1的属性信息
System.out.println(p2.info()); //输出实例p2的属性信息
System.out.println(s1.info()); //输出实例s1的属性信息
System.out.println(s2.info()); //输出实例s2的属性信息
System.out.println(t1.info()); //输出实例t1的属性信息
}
}
//求采纳
//一个随机数生成工具
Random rand = new Random();
// rand.nextInt() 用工具生成一个随机的整数
//rand.nextInt() % a.length 对上边数组长度取余 应该是对 52 取余
//任何整数对52取余结果只能是 -51 ~ 51 之间的一个整数
int index = rand.nextInt() % a.length;
//如果得到的这个整数小于0
if(index 0){
//用0 减去这个数即变成其相反数
index = 0 - index;
}
//从数组a中取对应位置的字符,比如index=2 a[index] 就是 c
return a[index];
亲测:结果为空
原因,System.exit(0)将当前JVM停止掉了。这个方法的作用就是将当前程序停止,参数为0表示正常退出,参数为1表示非正常退出。
JVM都停止了,后面的程序自然运行不了。所以finally里的语句根本没走到。