PDC-Program Design and Construction

1.Collections

1.1

在这里插入图片描述
set:无序,元素唯一

HashSet<Integer> numbers = new HashSet();
numbers.add(num);
for(Integer i: numbers){
            System.out.println(i);
        }
1.2

在这里插入图片描述
list:有序,有index,元素可以重复

       ArrayList  myList   =  new  ArrayList();
       myList.add(1);
       myList.add("1");
       int t;
       t = (int) myList.get(0);
       t = Integer.valueOf((String)myList.get(1));
	//Integer.valueOf(): String->int  
	
       myList.add(0);
       myList.add(1);
       myList.add(0);//1,"1",0,1,0
       myList.remove(0);	 //删除0号
       myList.remove((Integer)0);//删除list中按序第一个数字0
       System.out.println(myList.toString());
run:
[1, 1, 0]

remove(): 元素的Index 或者 按顺序删除第一个出现的元素

1.3

在这里插入图片描述
map:key唯一,元素可以重复

       HashMap  myMap   =  new HashMap();
       myMap.put("nico", "666");
       myMap.put(33, "你看不见这条");
       myMap.put(33, 44);
       
       Set keySet=myMap.keySet();//set,唯一
       Collection valueCollection=myMap.values();
       
       System.out.println(keySet.toString());
       System.out.println(valueCollection.toString());
    //use Iterator
    Set  eSet  =  myMap.entrySet();
    Iterator it = eSet.iterator();
    while (it.hasNext()) {
    System.out.println(it.next());
     }
run:
[33, nico]
[44, 666]
33=44
nico=666

有重复的key时会覆盖
Example:直接使用for each循环处理key和value

HashMap hm=new HashMap();      
        ArrayList keyList=new ArrayList();
        ArrayList valueList=new ArrayList(); 
       
        hm.put("trademe","www.trademe.co.nz");                
        hm.put("aut","www.aut.ac.nz");   

        for(Object s: hm.keySet()){
            System.out.println((String)s);
            keyList.add((String)s);
            
        }
        for(Object v: hm.values()){
            System.out.println((String)v);
            valueList.add((String)v);
        }
        System.out.println(keyList.toString());
run:
aut
trademe
www.aut.ac.nz
www.trademe.co.nz
[aut, trademe]

2.File I/O

2.1 写:PrintWriter(FileOutputStream(txt))
//        重写
try
{
	PrintWriter outputStream = new PrintWriter(new FileOutputStream("out.txt"));
	outputStream.println(1);
	System.out.println("... written to out.txt.");
	outputStream.close();
}   
catch(FileNotFoundException e)
{
	System.out.println("Error opening the file out.txt."+ e.getMessage());
}

//     不replace 修改text
PrintWriter outStream = new PrintWriter(new FileOutputStream("out.txt",true));
outStream.println("tet");
outStream.close();
2.2 读:BufferedReader(FileReader(txt))
     try
      {
          FileReader fr=new FileReader("out.txt");
          BufferedReader inputStream = new BufferedReader(fr);        
          String line = null;
          while((line=inputStream.readLine())!=null)
	  System.out.println(line);
          inputStream.close();         
      }
      catch(IOException e)
      {
	System.out.println(e.getMessage());
      }
2.3 StringTokenizer
//      将文件中每行的数据根据选择的分隔符分割
        String str = "abc,. def,hij,klm";
        StringTokenizer st= new StringTokenizer(str, "., ",false); //""中代表要分割的符号,true连分隔符一起显示,false不显示
        while(st.hasMoreTokens())
        {
           System.out.println(st.nextToken());
        }
2.4 downward casting
//      不区分大小写x键退出控制台输入
        boolean quit=false;
        Scanner scan=new Scanner(System.in);
        while(!quit){
                String str=scan.next();
                if(str.toLowerCase().equals("x")){  //向下造型=X,x都允许,即忽略大小写
                    quit=true;
                }
                System.out.println("Please input again");
    }
2.5 Path,File

在这里插入图片描述

3.GUI

3.1 Frame
        JFrame f = new Frame("Frame Test");
	f.setTitle("A Simple Frame");
	f.setSize(300, 200);
	f.setLocation(100,100);
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	f.setVisible(true);
public class ButtonTest extends JFrame 
{
   private static ButtonTest bt;
   
   public static void main(String[] args)
   {
       bt= new ButtonTest();
       bt.setTitle("testtt");
       bt.setSize(300, 300);
       bt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       bt.setVisible(true);
   }
3.2 设置size
	Toolkit kit=Toolkit.getDefaultToolkit();
        Dimension screenSize=kit.getScreenSize();
        int frameWidth=screenSize.width/2;
        int frameHeight=screenSize.height/2;
        f.setSize(frameWidth, frameHeight);
3.3 Button and Event handling
3.3.1 重写ActionListener
public  class ColorAction implements ActionListener {
        private Color thiscolor;
        public ColorAction(Color c) {
            thiscolor = c;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
        buttonPanel.setBackground(thiscolor);
        }
    }
public Test(){
	...
	JButton blue = new JButton("blue");
        JButton red = new JButton("red");
        ActionListener  blueact = new ColorAction(Color.blue);
        ActionListener  redact = new ColorAction(Color.red);
        blue.addActionListener(blueact);
        red.addActionListener(redact);
	...
}
3.3.2 加入ActionListener接口
public class Test implements ActionListener{
	private static JPanel buttonPanel;
	private static  JButton blue ;
	private static  JButton red ;
public Test() {
	...
	blue.addActionListener(this);
	red.addActionListener(this);
	...
}
@Override
public void actionPerformed(ActionEvent e) {
	Object source = e.getSource();
	if(source==blue){
	    buttonPanel.setBackground(Color.blue);
	}
	else{
	    buttonPanel.setBackground(Color.red);
	}
}
}
3.4 Panel and Layout Management

在这里插入图片描述

frame.add(buttonPanel, BorderLayout.SOUTH); 

GridLayout

Panel.setLayout(new GridLayout(3,4)); 
//三行四列
3.5 Other GUI Components

TextField / TextArea

	JTextField field = new JTextField("field",10);
	buttonPanel.add(field);
	//用户可以输入
	JTextArea text = new JTextArea("tttttext");
	buttonPanel.add(text);
	String t= text.getText();
	//用户可输入换行文字
        JScrollPane scroll = new JScrollPane(text);
        buttonPanel.add(scroll);
        //为TextArea加入滚动条

Label

        JLabel label = new JLabel("Name:",JLabel.LEFT);
        buttonPanel.add(label);
        //display only
        //JLabel.LEFT:文字显示在左边
        label.setText("ggg");

CheckBox

        check = new JCheckBox("yoyo?");
        check.addActionListener(this);
        buttonPanel.add(check);
        //选框
        
public void actionPerformed(ActionEvent e) {
    if(check.isSelected()){
        label.setText("yoyo!");
    }
    else if(!check.isSelected()){
        label.setText("no yoyo");
    }
}
//重写actionPerformed函数

RadioButton 单选框

public class Test implements ActionListener{
    private static JPanel sPanel;
    private static ButtonGroup group
    private static JLabel label;
    ...
    public void addRadioButton(String name,final int size)
   {
      JRadioButton button = new JRadioButton(name, true);
      group.add(button);
      sPanel.add(button);
      ActionListener listener = new ActionListener(){
        public void actionPerformed(ActionEvent event){
            label.setHorizontalAlignment(size);}
         };
      button.addActionListener(listener);
   }
public Test() {
	...
        sPanel = new JPanel();
        group = new ButtonGroup();
        addRadioButton("left", label.LEFT);
        addRadioButton("right", label.RIGHT);
        addRadioButton("center", label.CENTER);
        ...
        }
}

ComboBox 下拉选框

public class Test {
    private static JLabel label;
    private  JComboBox<String> box;
    ...
    public Test() {
        ...
	box = new JComboBox<>();
        box.addItem("right");
        box.addItem("left");
        box.addItem("center");
        box.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
            String s = box.getItemAt(box.getSelectedIndex());
            System.out.println(s);
            if(s.equals("right")){
            label.setHorizontalAlignment(label.RIGHT);
            }
            else if(s.equals("left")){
            label.setHorizontalAlignment(label.LEFT);
            }
            else if(s.equals("center")){
            label.setHorizontalAlignment(label.CENTER);
            }
            }
        });
        buttonPanel.add(box);
        ....
        }
}

4 JThread

4.1 implements Runnable
public class Test implements Runnable{
    String st;
    public Test(String s) {
        st = s;
    }      
    public static void main(String[] args) throws FileNotFoundException, IOException {
        
        Test test1 = new Test("task1");
        Test test2 = new Test("task2");
        Thread t1 = new Thread(test1);
        Thread t2 = new Thread(test2);
        
        t1.start();
        t2.start();
        }
    @Override
    public void run() {
        for(int i=0 ; i<5 ; i++){
        System.out.println(st);
        }
    }
}
4.2 extends Thread
public class Test extends Thread{
    String st;
    public Test(String s) {
        st = s;
    }      

    @Override
    public void run() {
        for(int i=0 ; i<5 ; i++){
        System.out.println(st);
        }
    }
  
    public static void main(String[] args) throws FileNotFoundException, IOException {
        Test t1 = new Test("task1");
        Test t2 = new Test("task2");
        
        t1.start();
        t2.start();
        }
 }
4.3 yield & sleep
    @Override
    public void run() {
        for(int i=0 ; i<5 ; i++){
        System.out.println(st);
        this.yield();  
//            try {
//                this.sleep(100);
//            } catch (InterruptedException ex) {
//                Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
//            }
        }
    }
4.4 join and synchronized
        t1.join();//No thread can start until t1 finishes  

在这里插入图片描述

5.JDBC

5.1 连接数据库
public class BookStore {
    public static String url = "jdbc:derby://localhost:1527/PDC";
    public static Connection conn;
    public static String username = "root";
    public static String password = "toor";
    
    public void connectBookStoreDB()  {
        try{
        conn = (Connection) DriverManager.getConnection(url, username, password);
        System.out.println("Connect successed");
        }
        catch(SQLException ex){
            System.out.println("SQLException: "+ex.getMessage());
        }
    }

}

在这里插入图片描述

5.2 Statement
    public void createPromotionTable(){
        try{
        Statement s = conn.createStatement();
        String creatTable = "CREATE  TABLE Promotion  (CATEGORY   VARCHAR(20),   Discount   INT)";
        s.execute(creatTable);
        String insertData = "INSERT INTO Promotion VALUES ('Fiction', 0),('Non-fiction', 10),('Textbook', 30)";
        s.execute(insertData);
        System.out.println("successed");
        }
        catch(SQLException ex){
            System.out.println("SQLException: "+ex.getMessage());
        }
        
    }
5.3 从数据库中读取数据 :ResultSet
    public ResultSet getWeekSpecial(){
        ResultSet rs = null;//	1
        try {
            Statement s = conn.createStatement();
            String select = "SELECT TITLE,Discount,PRICE FROM BOOK,Promotion where BOOK.CATEGORY=Promotion.CATEGORY";
            rs = s.executeQuery(select);//	2
            System.out.println("TITLE   price   Discount");
            System.out.println("================");
            while(rs.next()){//	3
                String title = rs.getString("TITLE");
                float PRICE = rs.getFloat("PRICE");
                int Discount = rs.getInt("Discount");
                System.out.println(title+"   "+PRICE+"   "+Discount);
            }
        
        } catch ( SQLException ex) {
             System.out.println("SQLException: "+ex.getMessage());
        }
        return rs;//	4
    }
5.4 metadata
    public void metaData() {
        try {
            DatabaseMetaData dbmd = conn.getMetaData();
             System.out.println("数据库已知的用户: "+ dbmd.getUserName());    
             System.out.println("数据库的系统函数的逗号分隔列表: "+ dbmd.getSystemFunctions());    
             System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ dbmd.getTimeDateFunctions());    
             System.out.println("数据库的字符串函数的逗号分隔列表: "+ dbmd.getStringFunctions());    
             System.out.println("数据库供应商用于 'schema' 的首选术语: "+ dbmd.getSchemaTerm());    
             System.out.println("数据库URL: " + dbmd.getURL());    
             System.out.println("是否允许只读:" + dbmd.isReadOnly());    
             System.out.println("数据库的产品名称:" + dbmd.getDatabaseProductName());    
             System.out.println("数据库的版本:" + dbmd.getDatabaseProductVersion());    
             System.out.println("驱动程序的名称:" + dbmd.getDriverName());    
             System.out.println("驱动程序的版本:" + dbmd.getDriverVersion());  
             
             System.out.println("数据库中使用的表类型");    
             ResultSet rs = dbmd.getTableTypes();    
             while (rs.next()) {    
                 System.out.println(rs.getString("TABLE_TYPE"));    
             }    
        } catch (SQLException ex) {
            Logger.getLogger(BookStore.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
5.5 删除表(需要通过DatabaseMetaData 获取表名)
    public void deleteIfExists(String name){
        String tableName = name;
        try {
            Statement s = conn.createStatement();//用于删除表
            DatabaseMetaData dbmd = conn.getMetaData();
            
            String[] types = { "TABLE" };  
            ResultSet rs = dbmd.getTables(null, null, "%", types);
            
            while (rs.next()) {  
                String table = rs.getString("TABLE_NAME");  //表名  
//                String tableType = rs.getString("TABLE_TYPE");  //表类型  
                if(table.equals(tableName)){
                    s.execute("DROP TABLE "+tableName);
                    System.out.println("成功删除");
                }
                System.out.println(table);  
            } 
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

//tableName.compareToIgnoreCase(newTableName) == 0
//比较表名是否相同
//需要关闭:
	    if (rs != null) {
                rs.close();
            }
            if (s != null) {
                s.close();
            }

6. pattern:MVC (Model View Controller)

在这里插入图片描述

7. JUnit

7.1 Flow graph

在这里插入图片描述

7.2 添加jar包

http://www.java2s.com/Code/Jar/h/Downloadhamcrestcore13rc2jar.htm

7.3 创建测试类

在这里插入图片描述

7.4 修改默认函数 测试

在这里插入图片描述
测试通过

8. Reflection

测试类

public class Test extends Thread implements Runnable{
    public  String st;
    final int i=1;
    ...
    }
public class Modi extends Test{
    private String brand = "";
    public int k;
    final double f=0;
    public void print(String s){
        System.out.println(s);
    }
    ...
}
8.1 class name
        Class cls = Test.class;
        System.out.println(cls.getName());
        System.out.println(cls.getSuperclass());

pdc.Test
class java.lang.Thread

8.2 modifiers(e.g., public, final, abstract etc.)

在这里插入图片描述

        System.out.println(cls.getModifiers());
        System.out.println(Modifier.PUBLIC);
        //import java.lang.reflect.Modifier;

1
1

8.3 interfaces
        Class[] inter = cls.getInterfaces();
        for(Class c :inter){
            System.out.println(c.getName());
        }

java.lang.Runnable

8.4 Fields(public and private) (not static)
        Class cls2 = Modi.class;
        Field f1[] = cls2.getFields();//public,super class
        Field f2[] = cls2.getDeclaredFields();//public,private,final
        //cls2.getDeclaredField("name");
        
        for(Field f:f1){
            System.out.println(f);
//            System.out.println(f.getName());
//            System.out.println(f.getType());
//            System.out.println(Modifier.toString(f.getModifiers()));
        }
        System.out.println("----------");
        for(Field f:f2){
            System.out.println(f);
        }
       

在这里插入图片描述

8.5 Constructor
        Class cls2 = Modi.class;
        Constructor c[] = cls2.getConstructors();
        System.out.println(cls2.getConstructor(String.class));//根据参数表的数据类型
        for(Constructor co:c){
            System.out.println(co);
        }

public pdc.Modi(java.lang.String)
public pdc.Modi(java.lang.String)

        Class cls2 = Modi.class;
        Constructor c[] = cls2.getConstructors();
        for(Constructor co:c){
            System.out.println(co);
            System.out.println(co.getName());
            System.out.println(co.getModifiers());//public 
            for(Class type:co.getParameterTypes()){
            System.out.println(type);
        }
        }

在这里插入图片描述
在这里插入图片描述

        Class aCls = Rectangle.class;
        Constructor[] cons = aCls.getConstructors();
        Object ob=null;
        
        System.out.println(cons.length);
        for(Constructor co:cons){
            System.out.println(co.getName());
            Class []ts = co.getParameterTypes();
            for(Class type:ts){
                System.out.println(type);
            }
            if(ts.length==2){
                ob=co.newInstance(2.5,3.2);
            }
        }
8.6 Methods
        Class cls2 = Modi.class;
        Method[] ms = cls2.getDeclaredMethods();
//        Method[] ms = cls2.getMethods();
        
        for(Method m:ms){
            System.out.println("Method: "+m);
            System.out.println("DeclaringClass: "+m.getDeclaringClass());
            System.out.println("Name: "+m.getName());
            System.out.print("ParameterTypes: ");
            for(Class c:m.getParameterTypes()){
                System.out.println(c);
            }
            System.out.println("ReturnType: "+m.getReturnType());
        }

在这里插入图片描述

8.7 setAccessible:操作private的变量
        Class aCls = Circle.class;
        Field f=aCls.getDeclaredField("priDouble");

        f.setAccessible(true);

        System.out.println(f.getName());
        Object cir=aCls.newInstance();
        double fv=f.getDouble(cir);//得到instance中的double值
        System.out.println("priDouble = "+fv);
        f.setDouble(cir, 8.8);
        System.out.println("new value: "+f.getDouble(cir));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值