Java学习笔记九

来源:互联网 发布:软件项目风险控制 编辑:程序博客网 时间:2024/05/19 00:35


45.

第一个会叫的程序虽然不知道为什么,以后看看

package com.jianjian5;

 

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Date;

 

import javax.swing.JOptionPane;

import javax.swing.Timer;

 

public class TimerTest

{

   public static void main(String[] args)

   {

      ActionListener listener = new TimePrinter();

      Timer t = new Timer(1000,listener);

      t.start();

      JOptionPane.showMessageDialog(null,"Quit program");

      System.exit(0);

     

     

   }

}

class TimePrinterimplements ActionListener

{

   public void actionPerformed(ActionEvent event)

   {

      Date now = new Date();

      System.out.println("At the tone , the time is "+ now);

      Toolkit.getDefaultToolkit().beep();

   }

}

 

46.

作为接口的代表 interface Comparable 接口:

Arrays类中的sort方法承诺可以对对象数组进行排序,但要求对象所属的类必须实现了Comparable接口

 

47.

if 语句中的陷阱:

public int compareTo(People other)

   {

      if(salary < other.salary)

        return -1;

      if(salary > other.salary)

        return 1;

      if(salary == other.salary)

     

        return 0;

  

   }

编译器会提示错误,原因是什么呢,我比较两个数据的大小,情况也就是这三种啊,但是我们知道,编译器却不知道,它认为,当全部符合三个数据的时候,我该返回什么?

所以最后一句最好写成

return 0 ;

而不要加if 语句;

 

48.

看下面的程序

目的是通过比较三个人的薪水来排列打印出它们的薪水

其中有几行代码是比较重要的;

package com.jianjian5;

 

//import java.util.ArrayList;

import java.util.Arrays;

 

public class SortTest

{

   public static void main(String[] args)

   {

//    ArrayList <People> list = new ArrayList<People>();

      People[] staff = new People[3];

      staff[0] = new People(3456);

      staff[1] = new People(2343);

      staff[2] = new People(2324);

      Arrays.sort(staff);//就是按照自己的方式去比较;

      for(int i = 0; i < staff.length; i++)

      {

        System.out.println(staff[i].getSalary());

      }

   }

}

class People implements Comparable<People>

{

   private int salary;

   public int getSalary()

   {

      return salary;

   }

   public void setSalary(int salary)

   {

      this.salary = salary;

   }

   public People (int salary)

   {

      this.salary = salary;

   }

   public int compareTo(People other)

   {

      if(salary < other.salary)

        return -1;

      if(salary > other.salary)

        return 1;

     

        return 0;

  

   }

}

 

49.

子类是不能继承父类的私有域的;只能继承其中的方法。

 

50.

增强的for each 循环!

package com.jianjian5;

 

import java.util.Arrays;

 

public class ForTest6

{

   public static void main(String[] args)

   {

      int [] i = {3,1,6,7,24};

      Arrays.sort(i);

      for(int e : i)

      {

        System.out.println(e);

      }

   }

1.

八种原生数据类型不能添加到泛型,即使有了自动拆装箱,也是要使用它们的包装类型作为泛型的说明。

 

2.

5.0新特性可以很大程度的提高程序的编写效率,从工作平台传入数据字符串类型,统计每个字符串出现的次数,还是利用Map;来做

 

 

package com.jianjian;

 

import java.util.HashMap;

 

public class FrequencyTest

{

   public static void main(String[] args)

   {

      HashMap<String, Integer> map = new HashMap<String,Integer> ();//泛型

      for(String s : args)//增强的for循环

      {

        map.put(s,(null == map.get(s))? 1: map.get(s) + 1);

       

      }

      System.out.println(map);

     

   }

}

看起来是很简单的,但是要真正的理解才可以。

 

3.

枚举应用,个人认为枚举是为我们提供了可选的基础常量,是我们经常会用到的,突出的是可选的,枚举与switch语句结合的效果很好

随着计算机的不断普及,程序不仅只用于数值计算,还更广泛地用于处理非数值的数据。例如:性别、月份、星期几、颜色、单位名、学历、职业等,都不是数值数据。在其它程序设计语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差。如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型

 

package com.jianjian5;

 

public enum ActionTest

{

   GO, RUN,JUMP;

}

 

package com.jianjian5;

 

public class Action

{

   public void method(ActionTest test)

   {

      switch (test)

      {

        case GO :

           System.out.println("go");

           break;

        case RUN :

           System.out.println("run");

           break;

        case JUMP :

           System.out.println("jump");

           break;

       

      }

  

   }

   public static void main(String[] args)

   {

      ActionTest test = ActionTest.GO;

      Action action = new Action();

      action.method(test);

     

   }

 

}

 

4.

每个枚举类型都有一个values(),其作用是返回自身的数组,这样就可以用增强的for循环进行遍历:

for(Color color :Color.values())

{

      System.out.println(color);

}

总之就是values()方法返回一个数组!!!

 

5.

对于switch语句只能接受五种类型的数据,其中的四种是 int ,char ,bity, sort,最后一种是 枚举类型;

 

6.

同一类中的主方法,是可以调用向同类下的静态方法的!记住。必须是静态的

package com.jianjian7;

 

public class ThinkTest

{

   public static void method()

   {

      System.out.println("helloworld");

     

   }

   public static void main(String[] args)

   {

      method();

   }

  

}

 

7.

枚举与类的最大区别就是,枚举在编译时就已经定义好的了实例,固定的实例,将枚举中的成员都看作是枚举的一个实例,枚举和类一样,也是有构造方法的,在成员后面加上小括号其实就是在生成构造方法,

 

 

package com.jianjian7;

 

public enum EnumTest

{

   one("卡内奇"),two("西多"),three("洛基");

   private Stringname;

   EnumTest(String name)

   {

      this.name = name;//this关键字只存在非静态方法中,表示调用当前对象的形参,在静态方法中不会使用this关键字,因为不需要形参!

     

   }

   public String getName()

   {

      return name;

   }

   public static void main(String[] args)

   {

      EnumTest test = EnumTest.one;//用类名来获取对象显然的一说枚举成员都是public static final 的!

      System.out.println(test.name);

   }

  

}

 

 

枚举类型的valuesOf(String obj)接受一个String类型的对象转换成枚举类型

而且的一说,这个方法是静态的方法,所以使用的时候最好用类名来调用,而且的而且,传入的字符串必须是枚举成员变量中的一个,这个方法的意义不大,听张龙老师说好像是为了后面的方法利用,还有比较成员变量位置;

package com.jianjian7;

 

public enum Direction

{

   UP,DOWN,LEFT,RIGHT;

   public static void main(String[] args)

   {

       

      System.out.println(Direction.valueOf("DOWN"));

   }

}

 

8.

静态导入,个人觉得意义不大,在静态方法,静态成员变量的基础上省略掉类的名字,要求导入包的时候要精确到域或者方法

 

 

9.

要开始反射(reflection)的学习,听说难度非同一般,嗯,总之做好心理准备,坚持下去,做好笔记:

 

10.

Java中无论一个类生成了多少个对象,这些类都对应一个相同的class类。

 


原创粉丝点击