热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:徐思201771010132《面向对象程序设计(java)》课程学习总结

本文由编程笔记#小编为大家整理,主要介绍了徐思201771010132《面向对象程序设计(java)》课程学习总结相关的知识,希望对你有一定的参考价值。1
本文由编程笔记#小编为大家整理,主要介绍了徐思201771010132 《面向对象程序设计(java)》课程学习总结相关的知识,希望对你有一定的参考价值。


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)点击窗口关闭,程序退出。


技术分享图片技术分享图片

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
public class DemoJFrame {
public static void main(String[] args) {
EventQueue.invokeLater(()
-> {
JFrame frame
= new FrameTest();
frame.setTitle(
"Students Detail");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(
true);
});
}
}
class FrameTest extends JFrame {
private JPanel panel;
private JTextField fieldname;
private JTextField fieldadress;
private JRadioButton male, female;
private ButtonGroup bg;
private JLabel jPanel;
private JCheckBox reading, singsing, dancing;
private JComboBox JComboBox;
private JButton validate, reset;
public FrameTest() {
setSize(
700, 500);
panel
= new JPanel();
panel.setLayout(
null);
bg
= new ButtonGroup();
male
= new JRadioButton("Male", false);
male.setBounds(
150, 330, 80, 50);
female
= new JRadioButton("Female", false);
female.setBounds(
150, 300, 80, 50);
bg.add(male);
bg.add(female);
addJLabel(
"sex:", 100, 300);
addJLabel(
"name:", 100, 50);
addJLabel(
"address:", 100, 150);
addJLabel(
"Qualification:", 400, 50);
addJLabel(
"Hobby:", 400, 150);
fieldname
= new JTextField();
fieldname.setBounds(
150, 70, 120, 30);
fieldname.setVisible(
true);
fieldadress
= new JTextField();
fieldadress.setBounds(
150, 160, 130, 100);
fieldadress.setVisible(
true);
reading
= new JCheckBox("Reading");
reading.setBounds(
450, 160, 100, 30);
singsing
= new JCheckBox("dancing");
singsing.setBounds(
450, 180, 100, 30);
dancing
= new JCheckBox("singing");
dancing.setBounds(
450, 200, 100, 30);
JComboBox
= new JComboBox<>();
JComboBox.addItem(
"初中");
JComboBox.addItem(
"高中");
JComboBox.addItem(
"大学");
JComboBox.setBounds(
500, 65, 100, 20);
validate
= new JButton("提交");
validate.setBounds(
200, 400, 100, 35);
reset
= new JButton("重置");
reset.setBounds(
400, 400, 100, 35);
validate.addActionListener(
new Action1());
reset.addActionListener(
new Action2());
panel.add(reading);
panel.add(singsing);
panel.add(dancing);
panel.add(validate);
panel.add(reset);
panel.add(JComboBox);
panel.add(fieldname);
panel.add(fieldadress);
panel.add(male);
panel.add(female);
add(panel);
}
public void addJLabel(String n, int a, int b) {
jPanel
= new JLabel(n);
jPanel.setBounds(a, b,
100, 50);
panel.add(jPanel);
}
private class Action1 implements ActionListener {
public void actionPerformed(ActionEvent event) {
System.out.println(
"name:" + fieldname.getText() + "
" + "address:" + fieldadress.getText());
System.out.println(
"Qualification:" + JComboBox.getSelectedItem());
System.out.println(
"Hobby:");
if (reading.isSelected() == true)
System.out.print(reading.getText());
if (singsing.isSelected() == true)
System.out.print(singsing.getText());
if (dancing.isSelected() == true)
System.out.print(dancing.getText());
System.out.println(
"
" + "sex:");
if (male.isSelected() == true)
System.out.println(male.getText());
if (female.isSelected() == true)
System.out.println(female.getText());
}
}
private class Action2 implements ActionListener {
public void actionPerformed(ActionEvent event) {
fieldname.setText(
null);
fieldadress.setText(
null);
reading.setSelected(
false);
singsing.setSelected(
false);
dancing.setSelected(
false);
bg.clearSelection();
JComboBox.setSelectedIndex(
0);
}
}
}


DemoJFrame

技术分享图片

技术分享图片

练习2:采用GUI界面设计以下程序:

l  编制一个程序,将身份证号.txt 中的信息读入到内存中;

l  按姓名字典序输出人员信息;

l  查询最大年龄的人员信息;

l  查询最小年龄人员信息;

l  输入你的年龄,查询身份证号.txt中年龄与你最近人的姓名、身份证号、年龄、性别和出生地;

l  查询人员中是否有你的同乡。

l  输入身份证信息,查询所提供身份证号的人员信息,要求输入一个身份证数字时,查询界面就显示满足查询条件的查询结果,且随着输入的数字的增多,查询匹配的范围逐渐缩小。


技术分享图片技术分享图片

package ID;
import java.awt.*;
import javax.swing.*;
/**
*
@version 1.34 2015-06-12
*
@author Cay Horstmann
*/
public class button {
public static void main(String[] args) {
EventQueue.invokeLater(()
-> {
JFrame frame
= new Main();
frame.setTitle(
"身份证");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(
true);
});
}
}


button

技术分享图片技术分享图片

package ID;
public class Person implements Comparable {
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

技术分享图片技术分享图片

package ID;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Main extends JFrame {
private static ArrayList personlist;
private static ArrayList list;
private JPanel panel;
private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 600;
private static final int DEFAULT_HEIGHT = 300;
public Main() {
personlist
= new ArrayList<>();
Scanner scanner
= new Scanner(System.in);
File file
= new File("身份证号.txt");
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();
}
JPanel panel
= new JPanel();
panel.setLayout(
new BorderLayout());
JTextArea jt
= new JTextArea();
panel.add(jt);
add(panel, BorderLayout.CENTER);
JPanel buttonPanel
= new JPanel();
buttonPanel.setLayout(
new GridLayout(1, 7));
JButton jButton
= new JButton("字典排序");
JButton jButton1
= new JButton("年龄最大和年龄最小");
JLabel lab
= new JLabel("你的老乡");
JTextField jt1
= new JTextField();
JLabel lab1
= new JLabel("查找年龄相近的:");
JTextField jt2
= new JTextField();
JLabel lab2
= new JLabel("输入你的身份证号码:");
JTextField jt3
= new JTextField();
JButton jButton2
= new JButton("退出");
jButton.setBounds(
110, 90, 40, 50);
jButton1.setBounds(
110, 90, 40, 50);
jt1.setBounds(
110, 90, 40, 50);
jt2.setBounds(
110, 90, 40, 50);
jt3.setBounds(
110, 90, 40, 50);
jButton2.setBounds(
110, 90, 40, 50);
jButton.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Collections.sort(personlist);
jt.setText(personlist.toString());
}
});
jButton1.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
int max = 0, min = 100;
int j, k1 = 0, k2 = 0;
for (int i = 1; i ) {
j = personlist.get(i).getage();
if (j > max) {
max
= j;
k1
= i;
}
if (j < min) {
min
= j;
k2
= i;
}
}
jt.setText(
"年龄最大:" + personlist.get(k1) + "年龄最小:" + personlist.get(k2));
}
});
jButton2.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
System.exit(
0);
}
});
jt1.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
String find
= jt1.getText();
String text
= "";
String place
= find.substring(0, 3);
for (int i = 0; i ) {
if (personlist.get(i).getbirthplace().substring(1, 4).equals(place)) {
text
+= "
" + personlist.get(i);
jt.setText(
"老乡:" + text);
}
}
}
});
jt2.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
String yourage
= jt2.getText();
int a = Integer.parseInt(yourage);
int near = agenear(a);
int value = a - personlist.get(near).getage();
jt.setText(
"年龄相近:" + personlist.get(near));
}
});
jt3.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
list
= new ArrayList<>();
Collections.sort(personlist);
String key
= jt3.getText();
for (int i = 1; i ) {
if (personlist.get(i).getID().contains(key)) {
list.add(personlist.get(i));
jt.setText(
"你可能是:
" + list);
}
}
}
});
buttonPanel.add(jButton);
buttonPanel.add(jButton1);
buttonPanel.add(lab);
buttonPanel.add(jt1);
buttonPanel.add(lab1);
buttonPanel.add(jt2);
buttonPanel.add(lab2);
buttonPanel.add(jt3);
buttonPanel.add(jButton2);
add(buttonPanel, BorderLayout.SOUTH);
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
public static int agenear(int age) {
int min = 53, value = 0, k = 0;
for (int i = 0; i ) {
value = personlist.get(i).getage() - age;
if (value <0)
value
= -value;
if (value < min) {
min
= value;
k
= i;
}
}
return k;
}
}


Main

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

练习3:采用GUI界面设计以下程序

l  编写一个计算器类,可以完成加、减、乘、除的操作

l  利用计算机类,设计一个小学生100以内数的四则运算练习程序,由计算机随机产生10道加减乘除练习题,学生输入答案,由程序检查答案是否正确,每道题正确计10分,错误不计分,10道题测试结束后给出测试总分;

l  将程序中测试练习题及学生答题结果输出到文件,文件名为test.txt。


技术分享图片技术分享图片

package math;
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 main();
frame.setBounds(
0, 0, (int) s.getWidth() / 2, (int) s.getHeight() / 2);
frame.setTitle(
"算术测试");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(
true);
});
}
}


math

技术分享图片技术分享图片

package math;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.Scanner;
import javax.swing.*;
import java.math.*;
public class main 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 main() {
JPanel Panel
= new JPanel();
Panel.setLayout(
null);
JLabel JLabel1
= new JLabel("");
JLabel1.setBounds(
500, 800, 400, 30);
JLabel1.setFont(
new Font("Courier", Font.PLAIN, 20));
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, 30));
text1
= new JTextArea(30, 80);
text1.setBounds(
270, 50, 200, 50);
text1.setFont(
new Font("Courier", Font.PLAIN, 30));
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(
"");
if (i <= 10) {
int a = (int) Math.round(Math.random() * 100);
int b = (int) Math.round(Math.random() * 100);
int m = (int) Math.round(Math.random() * 3);
switch (m) {
case 0:
while (a % b != 0) {
a
= (int) Math.round(Math.random() * 100);
}
while (b == 0) {
b
= (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 z
= text1.getText().toString().trim();
int a = Integer.parseInt(z);
if (text1.getText() != "") {
if (list[i1] == a)
sum
+= 10;
}
c1[i1]
= z;
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();
}
}
}


main

技术分享图片

任务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有很大的帮助,也感谢助教在百忙之中抽时间为我们解疑。


推荐阅读
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • Java图形化计算器设计与实现
    本文介绍了使用Java编程语言设计和实现图形化计算器的方法。通过使用swing包和awt包中的组件,作者创建了一个具有按钮监听器和自定义界面尺寸和布局的计算器。文章还分享了在图形化界面设计中的一些心得体会。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
author-avatar
水瓶颜如_991
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有