java的上课习题
前言
作为一个课上训练以及相关参考,一点点摸索ing。
第一篇
第一题:使用Java求一个数组最大值
代码如下:
int[] a;
int max,min;
a = new int[10];
for (int n=0;n<a.length;n++) {
a[n] = (int) (Math.random() * 100);
System.out.print(a[n]+" ");
}
max=a[0];min=a[0];
for (int n=1;n<a.length;n++)
{
if (a[n]>max) max=a[n];
if (a[n]<min) min=a[n];
}
System.out.println("The MAX value is "+max);
System.out.println("The MIN value is "+min);
在java中,数组的声明有以下三种方式
int a[];
int[] a;
int a[9];
在上述三种方式中,前两种数组的声明方式仅仅只是声明了一个数组,但是并没有给其开辟空间,因此为空,最后一种方式是直接对数组进行声明以及开辟相应空间。
注意:
1.如果数组在开辟空间之后发现空间不够使用的话再后期再次扩容时会将之前存储的内容全部清空,并会重新分配空间,因此如果对于项目需要的数组大小不确定的情况可以采用链表的形式来进行定义
2.在java中,如果创建数组之后未对其进行赋初值,则java会默认将未赋初值的数组项赋值为0
在java中,产生随机数
随机数是一个很有用的一个输出形式,它属于Math类。
Math.random()
由于random函数生成的是一个在0-1之间的double型的伪随机数,因此在一般使用的情况下,我们将其转换成int型
(int)(Math.random()*10)
在Java中,输出一般采用以下两种方式
System.out.println("你想要输出的内容");
System.out.print("你想要输出的内容");
第一种输入方式是在输出结束之后将自动输出回车符,进行换行,而第二种输入方式则类似c中的printf的输出形式。
第二题:编辑一个不等长的二维数组,将其随机赋值之后输出到控制台
代码如下:
int[][] a;
a = new int[3][];
a[0] = new int[4];
a[1] = new int[3];
a[2] = new int[2];
for (int i=0;i<a.length;i++)
{
for (int j=0;j<a[i].length;j++)
{
a[i][j]=(int)(Math.random()*100);
System.out.print(a[i][j]+" ");
}
System.out.println();
}
在Java中创建二维数组
在Java中创建二维数组的话和创建一维数组差不多
int[][] a;
注意:
1.在开辟二维数组空间的时候,应先从第一项开始,若开辟空间代码为a = new int [][3];
则该代码非法
其他
Java的主函数定义
主函数代码为
public static void main(String[] args)
{
}
第二篇
第三章
主要重点:类、对象、构造方法、重载、继承、重置
- 类:一种复杂的数据类型
- 对象:对象是类的实例,作为类的变量
类是对象的抽象,而对象则是类的具体化
- 抽象:提高程序的重用性
上课代码1
pblic class Student {
public String name;
public int age;
public float scorce;
public void print()
{
System.out.println(name+'.'+age+'.'+score);
}
public void exam(float sc){
score=sc;
}
public static void main(String[] args)
{
Student a = new Student();
a.age = 19;
a.name = 'wang';
a.score = 90.0f;
//a.score = (float)90.0;
a.print();
}
静态方法里面只能使用静态的东西
原因:
静态的方法在程序启动的时候已经存在了,这时候动态变量还没有赋值,调用一个为空的值,会报错。
上课代码2:
class Student{
public String name;
public int age;
public float scorce;
public void print()
{
System.out.println(name+'.'+age+'.'+score);
}
public void exam(float sc){
score=sc;
}
}
public class TestST
{
public static void main(String[] args)
{
Student a = new Student();
a.age = 19;
a.name = 'wang';
a.score = 90.0f;
//a.score = (float)90.0;
a.print();
}
}
- 公用类型必须在自己的文件中定义
- 封装:控制用户对类的修改已经访问数据的程度,这就是封装
私有类的数据无法被其他类访问,但是可以通过方法去进行访问(适用于重要函数或者重要类,用于数据安全以及版权)
2021-3-17
Q: 为什么父类对象可以保存子类对象
A:猫和花猫的概念
作业:
搞明白ppt44页为啥有的有影响,有的无影响
用java实现一个链表(创建并且要打印出来)
链表题会考
课上题:
class Person6{
String name; int age;
public Person6(String name,int age){
this.name = name; this.age = age;
}
public void print(){
System.out.println(this.getClass().getName()+": Name: "+this.name + " Age:" + this.age);
} }
class Student6 extends Person6{
String dept;
public Student6(String name,int age, String dept){
super(name,age); this.dept = dept;
}
public void print(){
System.out.println(this.getClass().getName()+": Name: "+ this.name + " Age:" + this.age + " Dept: " + this.dept );
} }
class Teacher extends Student6{
int salary;
public Teacher(String name, int age, String dept, int salary){
super(name,age,dept); this.salary = salary;
}
public void print(){
System.out.println(this.getClass().getName()+": Name: "+ this.name + " Age:" + this.age + " Dept: " + this.dept + " Salary: " + this.salary);
} }
class Polymorphism {
public static void main(String[] args) {
Object[] personList = new Object[3];
personList[0] = new Person6("wang",50);
personList[1] = new Student6("zhangjt",22,"No.2");
personList[2] = new Teacher("makai",30,"No.2",2000);
int i;
for(i=0;i<personList.length ;i++)
((Person6)personList[i]).print() ; //对象转换与多态的应用
}
}
-
最终类
用final修饰的类,特点:最终类不能被继承。
-
抽象类
用abstract修饰的类,特点:抽象类中含有抽象方法(用abstract修饰的方法);抽象类不能直接实例化,须被继承,并在子类中实现超类中定义的抽象方法。
-
接口
[修饰符] interface接口名[extends 父接口名列表] { 常量数据成员声明 抽象方法声明 }
修饰符有两种:public和默认
接口中的数据都是final定义的常量
接口的实现:
[<修饰符>] class <类名> [extends<超类名>] implement <接口名1>,<接口名2>…
2021-3-29
第四章:接口、内部类、包
接口
接口的实现
内部类
外部类与内部类可拥有各自的成员,且不同类的成员可以同名(注意引用方法);而且在非静态的内部类中不能声明静态变量
包
包是一组相关的类和接口的集合如何导入包
第五章:异常处理
异常的分类(考试会考)
错误
错误只能在编程阶段解决,在运行程序本身并不会解决
异常
可以加入异常处理代码,进行引导程序进行修复,引导程序结束
2021-4-7
第六章:图形GUI界面
创建窗口监视器方法
第一种:七种方法全部需要补全
import java.awt.event.*;
class QuitWindow implements WindowListener{
public void windowClosing(WindowEvent e){
System.exit(0);
}
void windowOpened(WindowEvent e) {}
void windowClosed(WindowEvent e) {}
void windowIconified(WindowEvent e) {}
void windowDeiconified(WindowEvent e) {}
void windowActivated(WindowEvent e) {}
void windowDeactivated(WindowEvent e) {}
}
第二种:使用windowsadapter进行覆盖创建
Java.awt.event包中的另外一个类WindowAdapter实现了WindowListener接口的7个空方法。我们可使用WindowAdapter对象来监视窗口事件,只需覆盖相应的方法即可(不用实现7个方法的每一个方法)。
import java.awt.event.*;
public class ExitWindow extends WindowAdapter {
public void windowClosing(WindowEvent e){
System.exit(0);
}
…
}
在创建完可以监视窗口的对象后,可通过调用Jframe的addWindowListener()方法来建立它和那个窗口的关系(安装监视器)。
Eg:
例:Jframe main = new JFrame(“Main Frame”);
ExitWindow exit = new ExitWindow();
main.addWindowListener(exit);
对SimpleFrame.java的改进:
import javax.swing.JFrame;
public class SimpleFrame1 extends JFrame {
public SimpleFrame1(){
super("Frame Title");
setSize(300,200);
ExitWindow exit = new ExitWindow() ;
this.addWindowListener(exit);
this.setVisible(true);
}
public static void main(String[] args) {
SimpleFrame1 simpleframe = new SimpleFrame1();
}
}
绘制图像
为了在面板中进行绘制,需要重载JComponent类的paintComponent方法
- 如果不进行这操作在显示的时候会出现错误
paintComponent方法是自动执行的,当窗口需要被重新绘制时,如用户缩放窗口,或还原已最小化的窗口时,系统就会自动调用该方法。
在面板上显示文本信息的方法:
g.drawString(text, x, y)
设置字体
通过Font类对象设置字体。
Font StringFont = new Font (“宋体”, Font.ITALIC, 20 );