Java进阶代码的具体写法

简介: Java进阶代码的具体写法
  1. public static void arraycopy(全小写)(object src,int srcPos,object dest,int destPos,int length)

复制代码
View Code
1 package b;
2 /
3
使用java.lang.System类的静态方法,使用for循环一个一个拷贝会很慢,由于数组
4 在内存里往往都是连续的区域,因此最有效率的往往是直接拷贝内存。
5
public static void arraycopy(全小写)(object src,int srcPos,object dest,int destPos,int length)
6 如果超过目标数组的边界,则会抛出数组越界异常。
7
/
8 public class ArrayCopy {
9 //没加上String args[]时运行的话还是前一个运行过的程序的结果。
10 public static void main(String args[]) {
11 String src[] = {"Microsoft","IBM","Sun","Oracle"};
12 String dest[]= new String[6];
13 System.arraycopy(src,0,dest,0,src.length);
14 //拷贝是并不是真的真考,而是dest数组在堆里也指向那几个公司,那几个公司在堆内存里还是只有一份。
15 for(int i=0; ia[mid]) {
28 start = mid +1;
29 }else {
30 end = mid -1;
32 mid = (start + end)/2;
33 }
34 return -1;
36
37 }
3.正则表达式
1 package b;
2
3 import java.util.Calendar;
4 import java.util.regex.Matcher;
5 import java.util.regex.Pattern;
6
7 public class Calender {
8 public static void main(String[] args) {
9 Pattern p = Pattern.compile("(\d\d)\1");
10 /
11
输出true,\1表示和第一个组的一样,若改成1213就不对了;
12 若是Pattern.compile("(\d(\d))\2")则需改成122才对
13

14 /
15
16 String s = "1212";
17 Matcher m = p.matcher(s);
18 System.out.println(m.matches());
19
20 }
21
22 }
4.统计代码里多少空行,注释行,程序行
3 /

4 统计代码里多少空行,注释行,程序行
5
实际上使用String里的startsWith和endsWith也行.
6 若是项目经理用的话还要统计每行的字符数是否以{;结尾,防止偷懒
8 import java.io.BufferedReader;
9 import java.io.File;
10 import java.io.FileNotFoundException;
11 import java.io.FileReader;
12 import java.io.IOException;
13
14 public class CoderCount {
16 static long normalLines = 0;
17 static long commentLines = 0;
18 static long whiteLines = 0;
20 public static void main(String[] args) {
21 File f = new File("D:\share\src");
22 File[] codeFiles = f.listFiles();
23 for(File child : codeFiles){
24 //.java$表示以“.java”结尾
25 if(child.getName().matches(".
\.java$")) {
26 solve(child);
27 }
28 }
29
30 System.out.println("normalLines:" + normalLines);
31 System.out.println("commentLines:" + commentLines);
32 System.out.println("whiteLines:" + whiteLines);
33
34 }
35
36 private static void solve(File f) {
37 BufferedReader br = null;
38 boolean comment = false;
39 try {
40 br = new BufferedReader(new FileReader(f));
41 String line = "";
42 while((line = br.readLine()) != null) {
43 /
44
//有的注释行前面有一个tab
45 不可写在readLine后
46
最后一行的话会空指针
47 /
48 line = line.trim();
49 //readLine读出字符串后就把后面的换行去掉啦
50 // 小写的s,\s表示空白字符,大写的表示非空白字符
51 if(line.matches("^[\s&&[^\n]]
$")) {//^表示行开头
52 whiteLines ++;
53 } else if (line.startsWith("/") && !line.endsWith("/")) {
54 commentLines ++;
55 comment = true;
56 } else if (line.startsWith("/") && line.endsWith("/")) {
57 commentLines ++;
58 } else if (true == comment) {
59 commentLines ++;
60 if(line.endsWith("/")) {
61 comment = false;
62 }
63 } else if (line.startsWith("//")) {
64 commentLines ++;
65 } else {
66 normalLines ++;
67 }
68 }
69 } catch (FileNotFoundException e) {
70 e.printStackTrace();
71 } catch (IOException e) {
72 e.printStackTrace();
73 } finally {
74 if(br != null) {
75 try {
76 br.close();
77 br = null;
78 } catch (IOException e) {
79 e.printStackTrace();
80 }
81 }
82 }
83 }
84
85 }
5.面向对象思路解决约瑟夫问题
3 /
面向对象的思路可以代替算法,先考虑有几个类,再考虑各个类的属性和方法,方法先考虑构造方法(考虑别人会怎么用就怎么设计)。
4 实际上相当于链表
5
/
6 //有个小问题,马士兵的两个类都没有加static就行了,我的却必须加,否则CE
7 public class Count3Quit1 {
8 public static void main(String[] args) {
9 KidCircle kc = new KidCircle(500);
10 int num = 0;
11 Kid k = kc.first;
12 while(kc.count>1) {
13 num++;
14 if(num==3) {
15 num=0;
16 kc.delete(k);
17 }
18 k = k.right;
19 }
20 System.out.println(kc.first.id+1);
21 }
22 static class Kid {
23 int id;
24 Kid left;
25 Kid right;
26
27 }
28
29 static class KidCircle {
30 int count = 0;//刚开始是空圈
31 Kid first, last;
32
33 //表示几个人的圈,考虑别人怎么用,咱就怎么写
34 KidCircle(int n) {
35 for(int i=0; iyear)
47 return 1;
48 else if(d.month >month)
49 return 1;
50 else if(d.day>day)
51 return 1;
52 else
53 return -1;
54 }
55 public String toString() {
56 return "Year:Month:Day --" + year + "-" +month+"-" + day;
57 }
58 }
11.HashMap
3 import java.util.HashMap;
4 import java.util.Map;
6 //需要命令行参数
7 public class MapStatistics {
8 private static final Integer ONE = new Integer(1);
9 public static void main(String[] args) {
10 Map m = new HashMap();
11 for(int i=0; i<args.length; i++) {
12 Integer freq = (Integer)m.get(args[i]);
13 //freq肯定是null,因为4 5 6 都没有对应的value值,一直迷惑在这了
14 if(freq == null) {
15 m.put(args[i],ONE);
16 }else {
17 m.put(args[i],new Integer(freq.intValue() + 1));
18 }
20 System.out.println(m.size() + " distinct words detected");
21 System.out.println(m);
22 }
23
24 }
25
26 /
27
输入 4 5 6
28 输出
29
3 distinct words detected
30 {6=1, 5=1, 4=1}
31
/
12.事件监听
3 import javax.swing.;
4 import java.awt.
;
5 import java.awt.event.;
6 public class FrameDemo
7 {
8 //定义该图形中所需的组件的引用
9 private Frame f;
10 private Button bt;
11
12 //方法
13 FrameDemo()//构造方法
14 {
15 madeFrame();
17
18 public void madeFrame()
19 {
20 f = new Frame("My Frame");
21
22 //对Frame进行基本设置。
23 f.setBounds(300,100,600,500);//对框架的位置和大小进行设置
24 f.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));//设计布局
25
26 bt = new Button("My Button");
27
28 //将组件添加到Frame中
29 f.add(bt);
30
31 //加载一下窗体上的事件
32 myEvent();
34 //显示窗体
35 f.setVisible(true);
37
38 private void myEvent()
39 {
40 f.addWindowListener(new WindowAdapter()//窗口监听
41 {
42 public void windowClosing(WindowEvent e)
43 {
44 System.out.println("窗体执行关闭!");
45 System.exit(0);
46 }
47 });
48 //让按钮具备关闭窗口的功能
49 bt.addActionListener (new ActionListener()
50 {
51 public void actionPerformed(ActionEvent e)
52 {
53 System.out.println("按钮执行关闭窗口的功能");
54 System.exit(0);
55 }
56 });
58
59 public static void main(String[] agrs)
60 {
61 new FrameDemo();
62 }
63 }
13.split
4
判断一个正整数是几位数在while循环里不断除以10,直到商为0
5 或者转换为字符串只需求出长度即可。
6
/
7 public class TestSplit {
9 int j = 1234567;
10 String strNum = String.valueOf(j);
11 System.out.println("j是"+strNum.length()+"位数");
12
13 String s = "Mary,F,1978";
14 String[] str = s.split(",");//注意参数是String类型的正则表达式,所以是双引号
15 for(int i=0; i<str.length; i++) {//length不带括号
16 System.out.println(str[i]);
17 }
18 System.out.println("-------ok--------");

  1. 多维数组
    3 Java中的多维数组和C/C++不同,不一定是每行长度一样,必须从左到右声明,
    4
    即int a[][] = new int[3][]可以,但是int a[][] = new int[][4]不行,
    5 因为java中二维数组看成以数组为元素的数组,前一维不存在的话,没法分配下一维内存。
    6
    Int a[3][2] = {(1,2),(5,5),(6,8)}这样写非法,
    7 执行静态初始化时不该指定维度,防止出错。
    8
    /
    9 public class TestString {
    11 String s[][];//执行动态初始化时分为两步走,第一步时任何一维都不可指定
    12 s = new String[3][];
    13 s[0] = new String[2];
    14 s[1] = new String[3];
    15 s[2] = new String[2];
    16 for(int i=0; i s = new HashSet();//若是import java.util.Set就CE
    12 s.add("hello");
    13 s.add(new OtherName("f1","f2"));
    15 由于在OtherName里重写了equals方法,所以
    16
    下面的这一对象相当于同一个元素,不会被加入
    17 /
    18 s.add(new OtherName("f1","f2"));
    19 System.out.println(s);
    20
    21 Set s1 = new HashSet();
    22 Set s2 = new HashSet();
    23 s1.add("a"); s1.add("b"); s1.add("d");
    24 s2.add("a"); s2.add("c"); s2.add("d");
    25 Set sn = new HashSet(s1);
    26 sn.retainAll(s2);//求交集
    27 Set su = new HashSet(s1);//因为sn已经变化
    28 su.addAll(s2);//并集
    29 System.out.println(sn);
    30 System.out.println(su);
    31 }
    32
    33 }
    34
    35 class OtherName {
    36 private String firstName,lastName;
    37 public OtherName(String firstName,String lastName) {
    38 this.firstName = firstName;
    39 this.lastName = lastName;
    40 }
    41 public String getFirstName() {
    42 return firstName;
    43 }
    44 public void setFirstName(String firstName) {
    45 this.firstName = firstName;
    46 }
    47 public String getLastName() {
    48 return lastName;
    49 }
    50 public void setLastName(String lastName) {
    51 this.lastName = lastName;
    52 }
    53
    54 //小马说的,这是最简单的
    55 public int hashCode() {
    56 return firstName.hashCode();
    58 //这个是小马写的,以前没太懂,现在懂了
    59 public boolean equals(Object obj) {
    60 if(obj instanceof OtherName) {
    61 OtherName other = (OtherName)obj;
    62 return firstName.equals(other.firstName)
    63 && lastName.equals(other.lastName);
    64 }
    65 return super.equals(obj);
    66 }
    67 public String toString() {
    68 return firstName + " " + lastName;
    69 }
    70
    71 }
    18.内部类
    3 public abstract class Week {
    4 private Week(){
    5
    6 }
    8 //由于是abstract不可以直接new对象,但是可以经由子类,此处采用内部类
    9 public static final Week sun = new Week() {
    10
    11 @Override
    12 public Week nextDay() {
    13 // TODO Auto-generated method stub
    14 return mon;
    15 }
    16
    17
    18 };//必须加分号
    20 public static final Week mon = new Week() {
    21
    22 @Override
    23 public Week nextDay() {
    24 // TODO Auto-generated method stub
    25 return sun;
    26 }
    28 };
    29
    30 public abstract Week nextDay();//必须加上abstract,否则总提示需要返回值
    31
    32 //抽象类中可以有非抽象方法,子类实现该类的时候可以不重写该方法
    33 public String toString() {
    34 return this==sun?"Sunday":"Monday";
    36
    19.Map
    5 import java.util.TreeMap;
    7 /

    8 Map有hashmap和treemap(红黑树),
    9
    key不可重复(仍然是equals,一个一个比较又太麻烦,
    10 因此比较的是hashCode,需要重写hashCode方法),
    11
    使用put(key,value)返回了Object是原来的
    12 value,get(key),size(),containsKey
    13
    和containsValue,map里的key和value必须都是对象,
    14 至少要分配在堆,但是JDK1.5以后这样也是可以的map.put(“one”,1)而不必map.put(“one”,Integer(1))
    15
    里面会自动打包(将基本类型转换为包装类)。
    16 /
    17 public class TestMap {
    18 public static void main(String[] args) {
    19 Map m1 = new HashMap();
    20 Map m2 = new TreeMap();
    21 m1.put("one", 1);
    22 m1.put("one", new Integer(1));//这两种写法等价,内存里实际上都是第二种
    23 m1.put("one", 1);
    24 m1.put("two", new Integer(2));//仍然要加上new
    25 m1.put("A", 1);
    26 m1.put("B", new Integer(2));
    27 System.out.println(m1.size());
    28 System.out.println(m1.containsKey("one"));
    29 System.out.println(m1.containsValue(2));
    31 if(m1.containsKey("two")) {
    32 //这两种写法等价
    33 //int i = m1.get("two").intValue();
    34 int i = (Integer)m1.get("two");//必须加上强转才可自动解包,否则鬼知道能否转为int类型
    35 System.out.println("在m1中two的value为:" + i);
    36 }
    37
    38 Map m3 = new HashMap(m1);
    39 m3.putAll(m2);
    40 System.out.println(m3);
    41 System.out.println("----------ok----------");
    42 }
    43
    44 }
    20.Collections类
    6
    Collections是类,类方法有shuffle(容器)表示随机排序,
    7 reverse表示逆序(ArrayLIst还是用数组实现的,
    8
    需要拷贝,而LinkedList直接变换指针就好了),
    9 sort排序,binarySearch(容器,元素)是折半查找。
    10
    /
    11 public class TestList {
    12 public static void main(String[] args) {
    13 List a = new LinkedList();
    14 for(int i=0; i<9; i++) { 15 a.add("a"+i); 17 System.out.println(a); 18 Collections.shuffle(a); 19 System.out.println(a); 20 Collections.sort(a); 21 System.out.println(a); 22 Collections.reverse(a); 23 System.out.println(a); 24 Collections.sort(a);//折半查找的前提是有序,返回的是下标 25 System.out.println(Collections.binarySearch(a, "a5")); 26 System.out.println("\n"); 27 } 28 } 29 /* 30 * 上面的算法如何确定“大小”顺序呢,所有可以排序的类都实现了 31 * java.lang.Comparable接口,该接口中只有一个方法 32 * public int compareTo(Object obj),该方法返回0表示this == obj, 33 * 正数表示this>obj,里面是Object类型,现在是泛型,使用了泛型后
    34 比较的两者就肯定有意义,不会出来猫和超人比。
    35
    /
    21.Integer
    3 基本数据类型包装类(包装成对象分配在堆内存):在java.lang包,
    4
    里面都有MAX_VALUE,MIN_VALUE,和SIZE,
    5 用于各种数之间的转换,查看API。
    7 public class TestInteger {
    9 Integer i = new Integer("100");//分配在堆上
    10 Double d = new Double("123.456");
    11 int j = i.intValue() + d.intValue();
    12 float f = i.floatValue() + d.floatValue();
    13 System.out.println(j);
    14 System.out.println(f);
    15
    16 double pi = Double.parseDouble("3.1415926");
    17 double r = Double.valueOf("2.0").doubleValue();
    18 double s= pi
    rr;
    21 try {
    22 int k = Integer.parseInt("1.25");
    23 k += 1;
    24 }catch (NumberFormatException e) {
    25 System.out.println("数据格式不对");
    26 //e.printStackTrace();
    28
    29 System.out.println(Integer.toBinaryString(123)+"B");
    30 System.out.println(Integer.toHexString(123)+"H");
    31 System.out.println(Integer.toOctalString(123)+"O");//八进制
    32 System.out.println("---------ok------------");
    33 }
    35 }
    22.iterator
    6
    Collections是类,包含shuffle,sort,binarySearch
    8 public class TestIterator {
    10
    11 Collection c = new HashSet();
    12 c.add(new MyName("first","last"));
    13 c.add(new MyName("first1","last1"));
    14 c.add(new MyName("first2","last2"));
    15 //注意iterator在javax里也有,但此处需要用util包里的
    16 Iterator itr = c.iterator();
    17 ////打印出来的顺序不确定,因为set本身便是没有顺序
    18 while(itr.hasNext()) {
    19 MyName name = (MyName)itr.next();
    20 System.out.println(name.getFirstName());
    21 }
    22 /
    23
    Iterator中的remove方法是遍历过程中的唯一删除元素的安全方法,
    24 (因为iterator在遍历过程中执行了锁定(线程的东西)和数据库
    25
    事务与锁里的类似)
    26 具体的容器set和list由于实现了collection接口所以也有remove方法,
    27
    但是不安全。
    28 /
    29 for(Iterator i=c.iterator(); i.hasNext();) {
    30 MyName name = (MyName)i.next();
    31 if(name.getFirstName()=="first") {
    32 i.remove();//使用c.remove(name)会产生例外
    33 }
    34 }
    35 System.out.println("------ok-------");
    39
    40 class MyName {
    41 private String firstName,lastName;
    42 public MyName(String firstName,String lastName) {
    43 this.firstName = firstName;
    44 this.lastName = lastName;
    45 }
    46 public String getFirstName() {
    47 return firstName;
    48 }
    49 public void setFirstName(String firstName) {
    50 this.firstName = firstName;
    51 }
    52 public String getLastName() {
    53 return lastName;
    55 public void setLastName(String lastName) {
    56 this.lastName = lastName;
    59 //小马说的,这是最简单的
    60 public int hashCode() {
    61 return firstName.hashCode();
    63 //这个是小马写的,没看太懂
    64 public boolean equals(Object obj) {
    65 if(obj instanceof MyName) {
    66 MyName other = (MyName)obj;
    67 return firstName.equals(other.firstName)
    68 && lastName.equals(other.lastName);
    69 }
    70 return super.equals(obj);
    71 }
    72
    73 }
    23.HashSet
    2
    3 import java.util.
    ;
    4 /
    5
    相等的对象有相同的hash codes
    6 通过hash codes可以再内存里找对象,但不是具体的物理地址
    7
    比如查字典时目录就是索引,通过目录找到值就是键,因此hash codes
    8 常用来做索引,比如在map里。涉及索引时需要重写equals和hashcode
    9
    /
    10 public class TestHashSet {
    11
    12 public static void main(String[] args) {
    13 Collection c = new HashSet();
    14 c.add("hello");
    15 c.add(new Name("first","last"));
    16 c.add(new Integer(100));
    17 /
    18
    remove方法返回boolean值,既可以不
    19 赋值给一个boolean变量,也可以赋值给。比如下面的即可以直接调用
    20
    也可以调用后打印出来,有点小迷惑。
    21 /
    22 c.remove("hello");//可以删除掉
    23 c.remove(new Integer(100));//也可以删除掉,因为Integer重写了equals方法
    24 System.out.println(c.remove(new Name("first","last")));
    25 System.out.println(c);
    26 }
    27 }
    28 class Name {
    29
    30 private String firstName,lastName;
    31 public Name(String firstName,String lastName) {
    32 this.firstName = firstName;
    33 this.lastName = lastName;
    34 }
    35 public String getFirstName() {
    36 return firstName;
    37 }
    38 public void setFirstName(String firstName) {
    39 this.firstName = firstName;
    40 }
    41 public String getLastName() {
    42 return lastName;
    43 }
    44 public void setLastName(String lastName) {
    45 this.lastName = lastName;
    46 }
    47 /
    (non-Javadoc)
    48 @see java.lang.Object#hashCode()
    49
    /
    50 @Override
    51 /
    52 public int hashCode() {
    53 final int prime = 31;
    54 int result = 1;
    55 result = prime
    result
    56 + ((firstName == null) ? 0 : firstName.hashCode());
    57 result = prime result
    58 + ((lastName == null) ? 0 : lastName.hashCode());
    59 return result;
    60 }
    61
    /
    62 //小马说的,这是最简单的
    63 public int hashCode() {
    64 return firstName.hashCode();
    65 }
    66 / (non-Javadoc)
    67
    @see java.lang.Object#equals(java.lang.Object)
    68 /
    69 @Override
    70 /
    这是java自动生成的,比较繁琐
    71 public boolean equals(Object obj) {
    72 if (this == obj) {
    73 return true;
    74 }
    75 if (obj == null) {
    76 return false;
    77 }
    78 if (!(obj instanceof Name)) {
    79 return false;
    80 }
    81 Name other = (Name) obj;
    82 if (firstName == null) {
    83 if (other.firstName != null) {
    84 return false;
    85 }
    86 } else if (!firstName.equals(other.firstName)) {
    87 return false;
    88 }
    89 if (lastName == null) {
    90 if (other.lastName != null) {
    91 return false;
    92 }
    93 } else if (!lastName.equals(other.lastName)) {
    94 return false;
    95 }
    96 return true;
    97 }
    98 /
    99 public boolean equals(Object obj) {
    100 if(obj instanceof Name) {
    101 Name other = (Name)obj;
    102 return firstName.equals(other.firstName)
    103 && lastName.equals(other.lastName);
    104 }
    105 return super.equals(obj);
    106 }
    107 }
    3 import java.util.ArrayList;
    4 import java.util.Collection;
    5 import java.util.HashSet;
    7 public class Reflect {
    8
    10 /

    11 new ArrayList()的话不论是否重写hashCode和equals都输出5;
    12
    new HashSet()重写前是4,后是3
    13 /
    14 //Collection coll = new ArrayList();
    15 Collection coll = new HashSet();
    16 Pointer p1 = new Pointer(1, 1);
    17 Pointer p2 = new Pointer(1, 1);
    18 Pointer p3 = new Pointer(3, 3);
    19 Pointer p4 = new Pointer(4, 4);
    21 coll.add(p1);
    22 coll.add(p2);
    23 coll.add(p3);
    24 coll.add(p4);
    25 coll.add(p4);
    26 /

    27 参与hashCode运算的值,在加载后就不应该再改动,否则删除的话是删不掉的(不会报错),这就是内存泄露
    29 System.out.println(coll.size());
    31 }
    33 class Pointer {
    34 public int x = 0;
    35 public int y = 0;
    37 public Pointer(int x, int y) {
    38 super();
    39 this.x = x;
    40 this.y = y;
    41 }
    42
    43 @Override
    44 public int hashCode() {
    45 final int prime = 31;
    46 int result = 1;
    47 result = prime
    result + x;
    48 result = prime result + y;
    49 return result;
    50 }
    51
    52 @Override
    53 public boolean equals(Object obj) {
    54 if (this == obj)
    55 return true;
    56 if (obj == null)
    57 return false;
    58 if (getClass() != obj.getClass())
    59 return false;
    60 Pointer other = (Pointer) obj;
    61 if (x != other.x)
    62 return false;
    63 if (y != other.y)
    64 return false;
    65 return true;
    67 }
    24.创建File
    3 import java.io.File;
    4 import java.io.IOException;
    6
    若是class文件在包中,
    7 运行后其父路径(父路径是class文件的父路径)是包的父路径,
    8
    创建的目录(目录也是一种文件)和包路径的上一个平级不和包平级,试试eclips就看出来了
    9 /
    10 public class TestFile {
    11 public static void main(String[] args) {
    12 String separator = File.separator;//不管在wins还是linux下都可以用正斜杠(反斜杠是转义字符)
    13 String filename = "myfile.txt";
    14 String directory = "mydir1" + separator + "myfile2";
    15 //下面这两种写法也行
    16 //String directory = "mydir1/myfile2";
    17 //String directory = "mydir1\myfile2";//一个反斜杠是转义字符
    18 File f = new File(directory,filename);//现在只是内存里的一个对象
    19 if(f.exists()) {
    20 System.out.println("文件名:" + f.getAbsolutePath());
    21 System.out.println("文件大小:" + f.length());
    22 }else {
    23 //父路径是class文件的父路径
    24 f.getParentFile().mkdirs();//因为是两个"mydir1/myfile2",所以加s了
    25 try {
    26 f.createNewFile();
    27 }catch (IOException e) {
    28 e.printStackTrace();
    29 }
    30 }
    31
    32 }
    33
    34 }
    25.枚举+内部类实现交通灯
    3 import java.util.Date;
    5 class TestEnum {
    6 public enum TraficLamp {
    7 //Red,Green,Yellow;
    8 Red(30) {//new子类的对象并调用父类的有参构造方法
    9
    10 @Override
    11 public TraficLamp nextLamp() {
    12 // TODO Auto-generated method stub
    13 return Green;
    14 }
    15 },//必须加逗号
    17 Green(45) {
    18
    19 @Override
    20 public TraficLamp nextLamp() {
    21 // TODO Auto-generated method stub
    22 return Yellow;
    23 }
    24
    25 },//必须加逗号
    26
    27 Yellow(5) {
    29 @Override
    30 public TraficLamp nextLamp() {
    31 // TODO Auto-generated method stub
    32 return Red;
    34
    35 };//必须加分号
    36 /

    37 若是写下面的抽象方法,则必须让子类实现该方法,也就是上面的三个元素。
    38
    /
    39 public abstract TraficLamp nextLamp();
    40
    41 private int time;
    42
    43 private TraficLamp(int time) {
    44 this.time = time;
    45 }
    47
    48 public static void main(String[] args) {
    49 TraficLamp m = TraficLamp.Red;
    50 System.out.println(m);
    51 System.out.println(m.name());
    52 System.out.println(m.ordinal());
    53 System.out.println(TraficLamp.valueOf("Red").toString());//是red的话CE
    54 System.out.println(TraficLamp.values().length);
    55
    56 new Date(300) {//new子类的对象并调用父类的有参构造方法这样是可以的
    57 };
    58 }
    59 //如果枚举只有一个成员时就可以作为单例实现方式
    60 }
    26.编写一个方法,返回一个double型二维数组,数组中的元素通过解析字符串获得
    4 编写一个方法,返回一个double型二维数组,数组中的元素通过解析
    5
    字符串货的。如:参数列表"1,2;3,4,5;6,7,8"
    7 public class TestDouble {
    9 double[][] d;
    10 String s = "1,2;3,4,5;6,7,8";
    11 String[] sFirst = s.split(";");
    12 d = new double[sFirst.length][];
    13 for(int i=0; i<sFirst.length; i++) {
    14 //System.out.println(sFirst[i]);////验证分的对否
    15 String[] sSecond = sFirst[i].split(",");
    16 d[i] = new double[sSecond.length];
    17 for(int j=0; j<sSecond.length; j++) {
    18 d[i][j] = Double.parseDouble(sSecond[j]);
    20
    22 for(int i=0; i<d.length; i++) {
    23 for(int j=0; j<d[i].length; j++) {
    24 System.out.print(d[i][j]+" ");
    25 }
    26 System.out.println();
    28 System.out.println("-----ok-------");
    29 }
    30 }
    27.Enhanced
    4 /
    5
    Enhanced for循环是在jdk1.5后才有的,
    6 与数组相比不能方便地访问下标值,
    7
    与使用iterator的集合相比不能方便地删除集合中的内容。
    8 除了简单遍历并输出内容外比建议使用此法。
    10 public class TestEnhancedFor {
    12 int[] a = {1,3,5,6};
    13 for(int i : a) {
    14 System.out.println(i);
    17 Collection c = new ArrayList();
    18 c.add(new String("aaa"));
    19 c.add(new String("bbb"));
    20 c.add(new String("ccc"));
    21 for(Object o : c) {//Object的第一个字母大写
    22 System.out.println(o);//调用Object的toString方法,
    23 //而在String里又重写了toString方法,所以实际上调用的是String里的
    24 }
    25 }
    26 }
    28.Applet
    3 import java.applet.Applet;
    4 import java.awt.
    ;
    6 public class TestApplet extends Applet
    8 public void paint(Graphics gr)
    9 {
    10 setBackground ( Color.pink);
    11 gr.drawString (" 黄鹤楼 ", 25, 30);
    12 gr.drawString ("昔人已乘黄鹤去, 此地空余黄鹤楼。", 25, 50) ;
    13 gr.drawString ("黄鹤一去不复返, 白云千载空悠悠。", 25, 70) ;
    14 gr.drawString ("晴川历历汉阳树, 芳草萋萋鹦鹉洲。", 25, 90) ;
    15 gr.drawString ("日暮乡关何处是, 烟波江上使人愁。", 25, 110) ;
    16 gr.drawString ("---崔颢", 50, 150) ;
    17 }
    18 }

29.三种方法统计字母个数
3 统计字符串里大小写字母和非字母的个数
4
/
5 public class Statistics {
7 String str = "jkhshfs44__sjjkssfj jksn";
8 int lowNum = 0,upperNum = 0,notNum = 0;
9 System.out.println("第一种方法");
10 for(int i=0; i='a'&&ch<='z') {
13 lowNum++;
14 }else if(ch>='A'&&ch<='Z') {
15 upperNum++;
17 notNum++;//变量未初始化的话也会报错
20 System.out.println("lowNum:"+lowNum+"upperNum:"+upperNum+"notNum:" + notNum);
21 System.out.println("第二种方法");
22 lowNum = 0;upperNum = 0;notNum = 0;
23 for(int i=0; i ls = new ArrayList();
21 ls.add("aaa");
22 ls.add("bbb");
23 ls.add("ccc");
24 ls.add("ddd");
25 for(int i=0; i str = new HashSet();
31 str.add("aaa");
32 str.add("bbb");
33 str.add("ccc");
34 str.add("ddd");
35 for(Iterator ptr = str.iterator(); ptr.hasNext();) {
36 String s = ptr.next();
37 System.out.println(s);
38 }
39 }
40 }
41
42 class Another implements Comparable {
43 int age;
44
45 public int compareTo(Another other) {
46 if(this.age>other.age) {
48 }else if(this.age == other.age) {
49 return 0;
50 }else {
51 return -1;
52 }
53 }
54
55 }
32.Comparable接口
3 import java.util.Collections;
4 import java.util.LinkedList;
5 import java.util.List;
7 public class TestComparable {
9 List a = new LinkedList();
10 a.add(new AnotherName("a", "b"));
11 a.add(new AnotherName("a", "d"));
12 a.add(new AnotherName("c", "b"));
13 Collections.sort(a);//重写了compareTo方法
14 for(Object i : a) {//前面写成AnotherName就CE
15 AnotherName b = (AnotherName)i;
16 System.out.println(b);
18 System.out.println("----------ok----------");
22 //原来忘了实现这个Comparable接口,一直提示ClassCastEXception
23 class AnotherName implements Comparable {
24 private String firstName,lastName;
25 public AnotherName(String firstName,String lastName) {
26 this.firstName = firstName;
27 this.lastName = lastName;
28 }
29 public String getFirstName() {
30 return firstName;
32 public void setFirstName(String firstName) {
33 this.firstName = firstName;
35 public String getLastName() {
36 return lastName;
37 }
38 public void setLastName(String lastName) {
41 //代码效果参考:http://0791zd.com/bx/art_4173.html

42 //小马说的,这是最简单的
43 public int hashCode() {
44 return firstName.hashCode();
46 public boolean equals(Object obj) {
47 if(obj instanceof AnotherName) {
48 AnotherName other = (AnotherName)obj;
49 return firstName.equals(other.firstName)
50 && lastName.equals(other.lastName);
51 }
52 return super.equals(obj);
54 //也是小马写的,先比较姓氏也就是lastName
55 public int compareTo(Object o) {//最后一个o是小写,重写必copy
56 AnotherName other = (AnotherName)o;
57 int intCmp = lastName.compareTo(other.lastName);
58 if(intCmp==0) {
59 return firstName.compareTo(other.firstName);
60 }else {
61 return intCmp;
62 }
63 }
64 public String toString() {
65 return firstName + " " + lastName;
33.正则表达式做EmailSpider
3 import java.io.BufferedReader;
4 import java.io.FileNotFoundException;
5 import java.io.FileReader;
6 import java.io.IOException;
7 import java.util.regex.Matcher;
8 import java.util.regex.Pattern;
10 /*
//代码效果参考:http://0791zd.com/bx/art_6283.html

11 需要什么样的方法的话先些方法名
12
然后ctrl + 1列出推荐,系统创建该方法
13 */
14 public class EmailSpider {
15
16 public static void main(String[] args) {
17 try {
18 BufferedReader br = new BufferedReader(new FileReader("F:\regex.html"));
19 String line = "";
21 try {
22 while((line=br.readLine())!=null) {
23 solve(line);
24 }
25 } catch (IOException e) {
26 // TODO Auto-generated catch block
27 e.printStackTrace();
28 }
29 } catch (FileNotFoundException e) {
30 // TODO Auto-generated catch block
31 e.printStackTrace();

//代码效果参考:http://0791zd.com/zx/art_5248.html
35 private static void solve(String line) {
36 //正则表达式要是不满足相应功能的话不会出错,因为他是字符串
37 Pattern p = Pattern.compile("[\w[.-]]+@[\w[.-]]+\.[\w]+");
38 Matcher m = p.matcher(line);
39
40 while(m.find()) {
41 System.out.println(m.group());
42 }

相关文章
|
5天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
20天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
33 5
Java反射机制:解锁代码的无限可能
|
16天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
48 3
|
21天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
60 10
|
17天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
15天前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
23天前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
30 6
|
24天前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
25天前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
47 3
|
25天前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
26 1