zoukankan      html  css  js  c++  java
  • 实验十八 总复习

    实验十八  总复习

    实验时间 2018-12-30

    1、实验目的与要求

    (1) 综合掌握java基本程序结构;

    (2) 综合掌握java面向对象程序设计特点;

    (3) 综合掌握java GUI 程序设计结构;

    (4) 综合掌握java多线程编程模型;

    (5) 综合编程练习。

    2、实验内容和步骤

    任务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)+"
    "+"最小年龄:  "+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+"	"+sex+"	"+age+"	"+ID+"	"+birthplace+"
    ";
    
    }
    }
    
    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有很大的帮助,也感谢助教在百忙之中抽时间为我们解疑。

  • 相关阅读:
    进程的实践与练习2
    士兵队列训练问题
    大数相加
    Ignatius and the Princess II
    Parentheses Balance (括号平衡)---栈
    简单计算器
    C++全排列函数next_permutation()和prev_permutation()
    黑白图像
    9*9乘法表
    输入5 个数按从小到大的顺序输出
  • 原文地址:https://www.cnblogs.com/zyan---/p/10199247.html
Copyright © 2011-2022 走看看