實驗十八 總複習

實驗十八  總複習java

實驗時間 2018-12-30程序員

1、實驗目的與要求編程

(1) 綜合掌握java基本程序結構;安全

(2) 綜合掌握java面向對象程序設計特色;多線程

(3) 綜合掌握java GUI 程序設計結構;app

(4) 綜合掌握java多線程編程模型;dom

(5) 綜合編程練習。分佈式

2、實驗內容和步驟ide

任務1:填寫課程課後調查問卷,網址:https://www.wjx.cn/jq/33108969.aspx。佈局

任務2:綜合編程練習

練習1:設計一個用戶信息採集程序,要求以下:

(1)  用戶信息輸入界面以下圖所示:

               

 

       

(1)用戶點擊提交按鈕時,用戶輸入信息顯示控制檯界面;

(2)用戶點擊重置按鈕後,清空用戶已輸入信息;

(3)點擊窗口關閉,程序退出。

package o;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class DemoJFrame extends JFrame {
    private JPanel jPanel1;
    private JPanel jPanel2;
    private JPanel jPanel3;
    private JPanel jPanel4;
    private JTextField fieldname;
    private JComboBox comboBox;
    private JTextField fieldadress;
    private ButtonGroup bg;
    private JRadioButton Male;
    private JRadioButton Female;
    private JCheckBox read;
    private JCheckBox sing;
    private JCheckBox dance;

    public DemoJFrame() {
        // 設置窗口大小
        this.setSize(800, 400);
        // 設置可見性
        this.setVisible(true);
        // 設置標題
        this.setTitle("編程練習一");
        // 設置關閉操做
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        // 設置窗口居中
        WinCenter.center(this);
        // 建立四個面板對象
        jPanel1 = new JPanel();
        setJPanel1(jPanel1);                
        jPanel2 = new JPanel();
        setJPanel2(jPanel2);
        jPanel3 = new JPanel();
        setJPanel3(jPanel3);
        jPanel4 = new JPanel();
        setJPanel4(jPanel4);
        // 設置容器的爲流佈局
        FlowLayout flowLayout = new FlowLayout();
        this.setLayout(flowLayout);
        // 將四個面板添加到容器中
        this.add(jPanel1);
        this.add(jPanel2);
        this.add(jPanel3);
        this.add(jPanel4);

    }

    /*
     * 設置面一
     */
    private void setJPanel1(JPanel jPanel) {
        // TODO 自動生成的方法存根
        jPanel.setPreferredSize(new Dimension(700, 45));
        // 給面板的佈局設置爲網格佈局 一行4列
        jPanel.setLayout(new GridLayout(1, 4));
        
        JLabel name = new JLabel("name:");
        name.setSize(100, 50);
        fieldname = new JTextField("");
        fieldname.setSize(80, 20);
        
        JLabel study = new JLabel("qualification:");
        comboBox = new JComboBox();
        comboBox.addItem("初中");
        comboBox.addItem("高中");
        comboBox.addItem("本科");
        jPanel.add(name);
        jPanel.add(fieldname);
        jPanel.add(study);
        jPanel.add(comboBox);

    }

    /*
     * 設置面板二
     */
    private void setJPanel2(JPanel jPanel) {
        // TODO 自動生成的方法存根
        jPanel.setPreferredSize(new Dimension(700, 50));
        // 給面板的佈局設置爲網格佈局 一行4列
        jPanel.setLayout(new GridLayout(1, 4));
        
        JLabel name = new JLabel("address:");
        fieldadress = new JTextField();
        fieldadress.setPreferredSize(new Dimension(150, 50));
        
        JLabel study = new JLabel("hobby:");
        JPanel selectBox = new JPanel();
        selectBox.setBorder(BorderFactory.createTitledBorder(""));
        selectBox.setLayout(new GridLayout(3, 1));
        read = new JCheckBox("reading");
        sing = new JCheckBox("singing");
        dance = new JCheckBox("danceing");
        selectBox.add(read);
        selectBox.add(sing);
        selectBox.add(dance);
        jPanel.add(name);
        jPanel.add(fieldadress);
        jPanel.add(study);
        jPanel.add(selectBox);
    }

    /*
     * 設置面板三
     */
    private void setJPanel3(JPanel jPanel) {
        // TODO 自動生成的方法存根
        jPanel.setPreferredSize(new Dimension(700, 150));
        FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT);
        jPanel.setLayout(flowLayout);
        JLabel sex = new JLabel("性別:");
        JPanel selectBox = new JPanel();
        selectBox.setBorder(BorderFactory.createTitledBorder(""));
        selectBox.setLayout(new GridLayout(2, 1));
        bg = new ButtonGroup();
        Male = new JRadioButton("male");
        Female = new JRadioButton("female");
        bg.add(Male );
        bg.add(Female);
        selectBox.add(Male);
        selectBox.add(Female);
        jPanel.add(sex);
        jPanel.add(selectBox);

    }

    /*
     * 設置面板四
     */
    private void setJPanel4(JPanel jPanel) {
        // TODO 自動生成的方法存根
        jPanel.setPreferredSize(new Dimension(700, 150));
        FlowLayout flowLayout = new FlowLayout(FlowLayout.CENTER, 50, 10);
        jPanel.setLayout(flowLayout);
        jPanel.setLayout(flowLayout);
        JButton sublite = new JButton("提交");
        JButton reset = new JButton("重置");
        sublite.addActionListener((e) -> valiData());
        reset.addActionListener((e) -> Reset());
        jPanel.add(sublite);
        jPanel.add(reset);
    }

    /*
     * 提交數據
     */
    private void valiData() {
        // TODO 自動生成的方法存根
        // 拿到數據
        String name = fieldname.getText().toString().trim();
        String xueli = comboBox.getSelectedItem().toString().trim();
        String address = fieldadress.getText().toString().trim();
        System.out.println(name);
        System.out.println(xueli);
        String hobbystring="";
        if (read.isSelected()) {
            hobbystring+="reading   ";
        }
        if (sing.isSelected()) {
            hobbystring+="singing   ";
        }
        if (dance.isSelected()) {
            hobbystring+="dancing  ";
        }
        System.out.println(address);
        if (Male.isSelected()) {
            System.out.println("male");
        }
        if (Female.isSelected()) {
            System.out.println("female");
        }
        System.out.println(hobbystring);
    }

    /*
     * 重置
     */
    private void Reset() {
        // TODO 自動生成的方法存根
        fieldadress.setText(null);
        fieldname.setText(null);
        comboBox.setSelectedIndex(0);
        read.setSelected(false);
        sing.setSelected(false);
        dance.setSelected(false);
        bg.clearSelection();
    }
}

 DemoJFrame
DemoJFrame
package o;



import java.awt.EventQueue;

import javax.swing.JFrame;

public class Main {
    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            DemoJFrame page = new DemoJFrame();
        });
    }
}

Main
Main
package o;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.Window;

public class WinCenter {
    public static void center(Window win){
        Toolkit tkit = Toolkit.getDefaultToolkit();
        Dimension sSize = tkit.getScreenSize();
        Dimension wSize = win.getSize();
        if(wSize.height > sSize.height){
            wSize.height = sSize.height;
        }
        if(wSize.width > sSize.width){
            wSize.width = sSize.width;
        }
        win.setLocation((sSize.width - wSize.width)/ 2, (sSize.height - wSize.height)/ 2);
    }
}

 WinCenter
WinCenter

 

練習2:採用GUI界面設計如下程序:

l  編制一個程序,將身份證號.txt 中的信息讀入到內存中;

l  按姓名字典序輸出人員信息;

l  查詢最大年齡的人員信息;

l  查詢最小年齡人員信息;

l  輸入你的年齡,查詢身份證號.txt中年齡與你最近人的姓名、身份證號、年齡、性別和出生地;

l  查詢人員中是否有你的同鄉。

l  輸入身份證信息,查詢所提供身份證號的人員信息,要求輸入一個身份證數字時,查詢界面就顯示知足查詢條件的查詢結果,且隨着輸入的數字的增多,查詢匹配的範圍逐漸縮小。

 

package xinxi;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.Timer;
import javax.swing.*;

public class Main extends JFrame
{
    private static ArrayList<Person> Personlist;
    
    
    Scanner scanner = new Scanner(System.in);
    File file = new File("F:\\身份證號.txt");
    
    private JPanel Panel;
    private JLabel JLabel;
    private JButton Button1,Button2,Button3;
    private JTextArea text,text1,text2,text3;
    boolean tru=true;
    
    
    
    public  Main() {

        Panel = new JPanel();
        Panel.setLayout(null);
        Button1 = new JButton("1:按姓名字典序輸出人員信息");
        Button2 = new JButton("2:查詢最大年齡與最小年齡人員信息");
        Button3 = new JButton("查詢相近年齡");
        JLabel = new JLabel("輸入身份證號或者地址查詢");
        JLabel.setBounds(750, 50, 400, 30);
        
        text=new JTextArea(30,80);
        text.setBounds(50, 180, 650, 700);
        text1=new JTextArea(1,30);
        text1.setBounds(750, 100, 300, 40);
        text2=new JTextArea(30,80);
        text2.setBounds(750,180,700, 800);
        text3=new JTextArea(30,80);
        text3.setBounds(400,100,300,40);
       
        Button1.addActionListener(new Action());
        Button1.setBounds(50,50,300,40);
        Button2.addActionListener(new Action1());
        Button2.setBounds(400,50,300,40);
        Button3.addActionListener(new Action2());
        Button3.setBounds(50,100,300,40);
        Panel.add(JLabel);
        Panel.add(Button1);
        Panel.add(Button2);
        Panel.add(Button3);
        Panel.add(text);
        Panel.add(text1);
        Panel.add(text2);
        Panel.add(text3);
        add(Panel);
        
        
        Timer timer = new Timer();      
        TimerTask timeTask=new TimerTask() {
            
             @Override
            public void run()
             {             
                     // TODO Auto-generated method stub
                     text2.setText(null);
                     String place=text1.getText().toString().trim();
                     //查詢同鄉
                     for (int i = 0; i <Personlist.size(); i++) 
                     {
                         
                         String Str=(String)Personlist.get(i).getbirthplace();
                         if(Str.contains(place)&&!place.equals("")) 
                             {
                             text2.append(Personlist.get(i).toString());
                             }  
                    }  
                    //查詢身份證號碼 
                     for (int i = 0; i <Personlist.size(); i++) 
                     {
                         
                         String Str=(String)Personlist.get(i).getID();
                         if(Str.contains(place)&&!place.equals("")) 
                             {
                             text2.append(Personlist.get(i).toString());
                             }  
                    }  
                     
            }
             
        };timer.schedule(timeTask, 0,100);
     
        Personlist = new ArrayList<>();       
        try {
            FileInputStream fis = new FileInputStream(file);
            BufferedReader in = new BufferedReader(new InputStreamReader(fis));
            String temp = null;
            while ((temp = in.readLine()) != null) {            
                Scanner linescanner = new Scanner(temp);               
                linescanner.useDelimiter(" ");    
                String name = linescanner.next();
                String ID = linescanner.next();
                String sex = linescanner.next();
                String age = linescanner.next();
                String place =linescanner.nextLine();
                Person Person = new Person();
                Person.setname(name);
                Person.setID(ID);
                Person.setsex(sex);
                int a = Integer.parseInt(age);
                Person.setage(a);
                Person.setbirthplace(place);
                Personlist.add(Person);

            }
        } catch (FileNotFoundException e) {
            System.out.println("查找不到信息");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("信息讀取有誤");
            e.printStackTrace();
        }
 
        
    }
    
    

    //排序
    private class Action implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
        {        
         text.setText(null);
         Collections.sort(Personlist);
         text.append(Personlist.toString());
        }

    }         
     //查詢最大年齡和最小年齡
    private class Action1 implements ActionListener
        {
        public void actionPerformed(ActionEvent event)
            {        
            text.setText(null);
            int max=0,min=100;int j,k1 = 0,k2=0;
            for(int i=1;i<Personlist.size();i++)
            {
                j=Personlist.get(i).getage();
               if(j>max)
               {
                   max=j; 
                   k1=i;
               }
               if(j<min)
               {
                   min=j; 
                   k2=i;
               }
            }  
            text.append("最大年齡:   "+Personlist.get(k1)+"\n"+"最小年齡:  "+Personlist.get(k2));     
            }
   
        }          
    //查找相近年齡
    private class Action2 implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
        {        
         text.setText(null);
         int a = Integer.parseInt(text3.getText().toString().trim());         
         int d_value=a-Personlist.get(agenear(a)).getage();
         
         for (int i = 0; i < Personlist.size(); i++)
         {
             int p=Personlist.get(i).getage()-a;
            
             if(p==d_value||-p==d_value) text.append(Personlist.get(i).toString());
         } 
        }

    } 
    
  
    public static int agenear(int age) {
        
        int j=0,min=53,d_value=0,k=0;
         for (int i = 0; i < Personlist.size(); i++)
         {
             d_value=Personlist.get(i).getage()-age;
             if(d_value<0) d_value=-d_value; 
             if (d_value<min) 
             {
                min=d_value;
                k=i;
             }

          }    return k;
         
      }

}

Main
Main
package xinxi;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;

import javax.swing.JFrame;

public class out {

     public static void main (String args[])
        {
             Toolkit t=Toolkit.getDefaultToolkit();
            Dimension s=t.getScreenSize(); 
            EventQueue.invokeLater(() -> {
                JFrame frame = new Main();
                frame.setBounds(0, 0,(int)s.getWidth(),(int)s.getHeight());
                frame.setTitle("xinxi");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
             });        
        }
 
}

out
out
package xinxi;

public class Person implements Comparable<Person> {
private String name;
private String ID;
private int age;
private String sex;
private String birthplace;

public String getname() 
{
    return name;
}
public void setname(String name) 
{
    this.name = name;
}
public String getID() 
{
    return ID;
}
public void setID(String ID) 
{
    this.ID= ID;
}
public int getage()
{
    return age;
}
public void setage(int age) 
{
    this.age= age;
}
public String getsex()
{
    return sex;
}
public void setsex(String sex)
{
    this.sex= sex;
}
public String getbirthplace() 
{
    return birthplace;
}
public void setbirthplace(String birthplace)
{
    this.birthplace= birthplace;
}

public int compareTo(Person o) 
{
   return this.name.compareTo(o.getname());
}

public String toString() 
{
    return  name+"\t"+sex+"\t"+age+"\t"+ID+"\t"+birthplace+"\n";

}
}

Person
person

 

練習3:採用GUI界面設計如下程序

l  編寫一個計算器類,能夠完成加、減、乘、除的操做

l  利用計算機類,設計一個小學生100之內數的四則運算練習程序,由計算機隨機產生10道加減乘除練習題,學生輸入答案,由程序檢查答案是否正確,每道題正確計10分,錯誤不計分,10道題測試結束後給出測試總分;

l  將程序中測試練習題及學生答題結果輸出到文件,文件名爲test.txt。

package jisuan;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class Jisuan extends JFrame {
    
    private String[] c=new String[10];
    private String[] c1=new String[10];
    private int[] list=new int[10];
    int i=0,i1=0,sum = 0;
    private PrintWriter out = null;
    private JTextArea text,text1;
    private int counter;
    
    public Jisuan()  {
        JPanel Panel = new JPanel();Panel.setLayout(null);
        JLabel JLabel1=new JLabel("");JLabel1.setBounds(500, 800, 400, 30);JLabel1.setFont(new Font("Courier",Font.PLAIN,35));
        JButton Button = new JButton("生成題目");Button.setBounds(50,150,150,50);Button.setFont(new Font("Courier",Font.PLAIN,20)); Button.addActionListener(new Action());
        JButton Button2 = new JButton("肯定答案");Button2.setBounds(300,150,150,50);Button2.setFont(new Font("Courier",Font.PLAIN,20));Button2.addActionListener(new Action1());
        JButton Button3 = new JButton("讀出文件");Button3.setBounds(500,150,150,50);Button3.setFont(new Font("Courier",Font.PLAIN,20));Button3.addActionListener(new Action2());
         text=new JTextArea(30,80);text.setBounds(30, 50, 200, 50);text.setFont(new Font("Courier",Font.PLAIN,35));
         text1=new JTextArea(30,80);text1.setBounds(270, 50, 200, 50);text1.setFont(new Font("Courier",Font.PLAIN,35));

         Panel.add(text);
         Panel.add(text1);

         Panel.add(Button);
         Panel.add(Button2);
         Panel.add(Button3);
         Panel.add(JLabel1);
         add(Panel);
         
         
         


           
                  
    }
    
    private class Action implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
        {        
        text1.setText("0");
        if(i<10) {
        
        int a = 1+(int)(Math.random() * 99);
        int b = 1+(int)(Math.random() * 99);
        int m= (int) Math.round(Math.random() * 3);
      switch(m)
      {
      case 0:
          while(a<b){  b = (int) Math.round(Math.random() * 100);a = (int) Math.round(Math.random() * 100); }  
          c[i]=(i+":"+a+"/"+b+"=");
            list[i]=Math.floorDiv(a, b);
            text.setText(i+":"+a+"/"+b+"=");
            i++;
            
          break; 
      case 1:
          c[i]=(i+":"+a+"*"+b+"=");
          list[i]=Math.multiplyExact(a, b);
          text.setText(i+":"+a+"*"+b+"=");        
         i++;
          break;
      case 2:
          c[i]=(i+":"+a+"+"+b+"=");
          list[i]=Math.addExact(a, b);
         text.setText(i+":"+a+"+"+b+"=");
         i++;
          break ;
      case 3:
          while(a<=b){  b = (int) Math.round(Math.random() * 100);a = (int) Math.round(Math.random() * 100); }    
          c[i]=(i+":"+a+"-"+b+"=");
          text.setText(i+":"+a+"-"+b+"=");
          list[i]=Math.subtractExact(a, b);i++;

          break ;
          }
        }
      }
    }      
    private class Action1 implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
        {    
        if(i<10) {
        text.setText(null);        
        String daan=text1.getText().toString().trim();
        int a = Integer.parseInt(daan);
        if(text1.getText()!="") {
         if(list[i1]==a) sum+=10;
         }
        
         c1[i1]=daan;
         
         i1++;
         
        }
        }

    }      
    

    private class Action2 implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
        {
         
        try {
            out = new PrintWriter("text.txt");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        for(int counter=0;counter<10;counter++)
        {
            out.println(c[counter]+c1[counter]);
        }
        out.println("成績"+sum);
        out.close();

        }

    }   
}

Jisuan
Jisuan
package jisuan;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;

import javax.swing.JFrame;

public class math {

     public static void main (String args[])
        {
             Toolkit t=Toolkit.getDefaultToolkit();
            Dimension s=t.getScreenSize(); 
            EventQueue.invokeLater(() -> {
                JFrame frame = new Jisuan();
                frame.setBounds(0, 0,(int)s.getWidth()/2,(int)s.getHeight()/2);
                frame.setTitle("produce by 楊野");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
             });        
        }
 
}

math
math

任務3:本學期課程已結束,請彙總《面向對象程序設計課程學習進度條》的數據,統計我的專業能力提高的數據。並從學習內容、學習方法、學習心得幾個方面進行課程學習總結,也但願你對課程的不足提出建議和意見。

 

總結:JAVA特色:簡單的、面向對象的、分佈式的、強壯的、安全的、體系結構中立的、可移植的、解釋型的、高性能的、多線程的、動態的語言。

源文件的命名規則:若是源文件中有多個類,那麼只能有一個類是 public類。若是有一個類是public類,那麼源文件的名字必須與這個類的名字徹底相同,擴展名是.java。若是源文件沒有public類,那麼源文件的名字只要和某個類的名字相同,而且擴展名是.java就能夠了。

Java流程控制語句:控制語句: if語句, switch語句.循環語句 :while , do…while ,for break和continue語句 :break——跳出switch結構;終止並跳出循環體。continue——結束本次循環。

類體內容由兩部分構成:類成員變量:用來刻畫類屬性;類成員方法:用來刻畫類內操做。

局部變量:在方法體中定義的變量和方法的參數被稱爲局部變量。類成員變量和局部變量的區別:類成員變量在整個類內都有效,局部變量只在定義它的方法內有效。若是局部變量的名字與成員變量的名字相同,則成員變量被隱藏。

類成員方法:方法的定義包括兩部分:方法聲明和方法體。構造方法:名字必須與類名徹底相同,沒有返回值類型;構造方法能夠重載;每一個類至少有一個構造方法,若程序員沒有定義構造方法,系統會自動產生一個默認構造方法,這個默認構造方 法無參數,方法體爲空;程序員爲類定義了構造方法,系統就再也不提供默認構造方法;用途:初始化類對象。

方法重載:一個類中能夠有多個具備相同的名字的方法。但這些方法或者是參數的個數不一樣,或者是參數的類型不一樣。

建立對象需兩個步驟:對象聲明和爲對象分配內存。

Static關鍵字:用static修飾的成員變量稱爲類(靜態)變量,用static修飾的方法稱爲類(靜態)方法。實例變量和類變量的區別:若是類的成員變量有類變量,那麼該類全部對象的類變量內存是相同的。具備訪問權限的類變量能夠經過某個對象訪問,也能夠經過類名訪問。具備訪問權限的實例變量僅能夠經過對象訪問,不能使用類名訪問。實例方法和類方法的區別:實例方法能夠被類建立的任何對象調用執行。類方法不只能夠被類建立的任何對象調用執行,也能夠直接經過類名調用

this關鍵字:this表示類的當前對象。this能夠出如今實例方法和構造方法中,但不能夠出如今類方法中。this關鍵字出如今構造方法中時,表明使用該構造方法所建立的對象。this出如今類的實例方法中時,表明正在調用該方法 的當前對象。

實現類繼承的方式:在類的聲明中,經過使用關鍵字extends來建立一個類的子類。Java只支持單繼承,不容許多繼承 。Java容許有多層繼承。

方法重寫是指:子類中定義一個方法,這個方法的名字、返回類型、參數個數和類型與從父類繼承的方法徹底相同。子類重寫父類,被重寫的方法不能比父類擁有更嚴格的訪問權限

super關鍵字:子類中訪問父類中被隱藏的成員變量,super.成員變量,子類調用父類中的方法。調用父類中的特定構造方法 super() ,調用父類中被重寫的方法 super.方法()

多態性有兩種表現形式:①方法的多態性(方法重載)②對象的多態性。對象多態性是在繼承應用上的一種擴展

final關鍵字:final關鍵子可修飾類、方法成員、成員變量和方法中的參數。final類不能被繼承,即不能有子類。方法被修飾爲final方法,則這個方法不能被重寫。一個成員變量被修飾爲final的,就是常量,常量必須 賦給初值,並且不能再發生變化。方法的參數被修飾爲final的,該參數的值不能被改變。

抽象類:用關鍵字abstract修飾的類稱爲abstract類(抽象類)。 abstract類不能被實例化; abstract類能夠有abstract方法;對於abstract方法,只容許聲明,不容許實現,且要用 abstract關鍵字進行修飾;抽象類的子類必須重寫全部的抽象方法。

接口的聲明與使用:關鍵字interface來定義一個接口。接口的定義與類的定義類似,包括接口的聲明和接口體。接口體中包含常量定義和抽象方法定義兩部分。接口使用規則:一個類能夠實現多個接口;若是一個類使用了某個接口,那麼這個類必須實現該接口的全部方法,即爲這些方法提供方法體。

方法的權限訪問修飾符: public,protected ,default(不加訪問說明符時), private。方法的其它修飾符 static ,final ,abstract ,synchronized。

類和類之間關係:is a: 繼承,實現關係。has a: 組合,聚合,關聯關係。use a: 依賴關係

拋出異常:throws語句是在方法的聲明中使用來拋出異常,用來指定方法可能拋出異常,但不想在當前方法中處理這個異常。throw語句是在方法體內使用拋出異常類的對象,程序在執行到throw語句時當即終止,它後面的語句都不執行。要捕捉throw拋出的異常,則必須使用try-catch語句。

Java中的每一個事件類都有一個相應的監視器接口,接口中聲明瞭一個或多個抽象的事件處理 方法。若是一個類實現事件監視器接口,其對象就能夠做爲對應事件的監視器,具有監視和處理事件的能力。

多線程機制是Java語言的重要特徵之一,使用多線程技術可使系統同時運行多個執行體,加快程序的響應時間,提升計算機資源的利用率。使用多線程技術能夠提升整個應用系統的性能。

程序、進程與線程的區別:程序是一段靜態的代碼,它是應用軟件執行的藍本。進程是程序的一次動態執行過程,它對應了從代碼加載、執行至執行完畢的一個完整過程,這個過程也是進程自己從產生、發展至消亡的過程。線程是比進程更小的執行單位,一個進程在其執行過程當中,能夠產生多個線程,造成多條執行線索,每條線索,即每一個線程也有它自身的產生、存在和消亡的過 程,也是一個動態的概念。

多線程和多任務:多線程和多任務是兩個既有聯繫又有區別的概念。多任務是針對操做系統而言的,表明着操做系統能夠同時執行的程序個數;多線程是針對一個程序而言的,表明着一個程序內部能夠同時執行的線程個數,而每一個線程能夠完成不一樣的任務。

線程的狀態與生命週期:新建:當一個Thread類或其子類的對象被聲明並建立時,新生的線程對象處於新建狀態。此時它已經有了佔用內存空間和其餘資源的資格。運行:線程建立以後就具有了運行的條件,一旦輪到它來享用CPU資源時,即JVM將CPU使用權切換給該線程時,此線程的就能夠脫離建立它的主線程獨立開始本身的生命週期了(即run方法執行的過程)。阻塞:有3種緣由的阻塞:等待阻塞:執行了wait() 方法;同步阻塞:獲取synchronized同步鎖失敗;其餘阻塞:執行了sleep()、join()方法;終止:run方法結束。

建立線程的方式有兩種:經過建立Thread類的子類來實現;經過實現Runnable接口的類來實現。

Thread的子類建立線程的關鍵操做:設計Thread的子類,重寫父類的run方法,用Thread類或子類建立線程對象,使用start方法啓動線程,JVM將CPU使用權切換給線程時,自動執行 run方法。

經過Runnable接口實現多線程的關鍵操做:設計一個實現Runnable接口的類,重寫run方法;以該類的對象爲參數創建Thread類的對象;調用Thread類對象的start方法啓動線程,將執行權轉交到run方法。

通過一學期Java課的學習,對Java這門語言有了進一步的認識,但學習Java之路還很漫長。老師的教學方式對咱們學習Java有很大的幫助,也感謝助教在百忙之中抽時間爲咱們解疑。

相關文章
相關標籤/搜索