Java实训笔记(二)

1、静态成员

在前面我们学习java中类和对象的关系也了解类的编写,现在我们要实现统计员工人数?要解决这个问题我们就要明白:当我们创建了一个对象时,这个对象就具有自己的字段,也就是说字段是属于对象的,现在要实现统计人数,需要一个公共的字段,那在这里就需要用到静态字段。

静态字段声明:

private static int count=0;

在构造方法中实现coun+1。

public Employee{

count++;

}

public Employee(String name, doublesalary, int year, int month, int day) {

this.name = name;

this.salary =salary;

GregorianCalendar calendar = new GregorianCalendar(year,month – 1, day);

this.hireDay = calendar.getTime();

count++;

}

当需要显示count值需要添加静态方法.

public static void getCount(){

return count;

}

静态方法是一种不能向对象实施操作的方法。由于静态方法不能操作对象,所以静态方法不能访问字段,同时静态方法不能使用this参数。调用静态是由类名来调用。

//调用形式:类名.静态方法名

System.out.println(Employee.getCount());

静态常量:静态变量使用较少,但静态常量使用较多,比如Math中PI和System中out都是静态常量。

//静态常量

public class Math{

public static final double PI = 3.1415926;

}

2、包

包是组织类的方式,为了避免类名的重复。标准java类库分布在不同的包中,包括:java.lang、java.util、java.io、java.sql和java.net。java程序默认导入的包是lang包,具体的包在后面的实训笔记中讲解。自定义包是用package,放在源文件的开发,定义类之前。

package com.java.ch2;

public class Employee{

}

在使用包时通过import方式导入。

3、继承

在前面有一个雇员类,我们都知道一个公司的雇员一般要分为经理和普通员工,这两种都是雇员,那我们要实现这种结构,就需要用到继承,继承就是“是”的关系,不是是的关系不能写成继承。在java通过extends关键字表示继承。

//在这里Employee就称为超类、父类,Manager称为子类,派生类

public class Manager extends Employee{

}

在设计类时,把通用的方法放在基类中,特殊用途的方法放在子类。

由于Manager继承Employee的特性,在创建对象要指定父类中的字段值,父类中的字段值是private,不能直接访问和继承,在这里就通过super来调用父类的构造方法来实现向父类的构造方法传值。如果子类的构造方法没有显示的调用父类构造方法,则将自动的调用父类默认的构造方法,如果父类没有不带参数的构造方法,并且在子类的构造方法中有没有显示的调用父类的构造方法,编译器则报错。

//在这里Employee就称为超类、父类,Manager称为子类,派生类

public class Manager extends Employee{

private double bonus;

public Manager(String n,double s,int y,int m,int d,double bonus){

super(n,s,y,m,d);

this.bonus = bonus;

}

}

现在如果要得到经理类的薪水,在经理的薪水就是基本工资加上奖金。那这个时候我们就需要对父类getSalary方法进行重新实现,这种就叫覆盖。在实现的过程,就需要调用父类的getSalary方法,这个时候就弄不清楚到底是调用哪个类的getSalary,解决这个问题就要使用super关键字,可以调用父类的方法。

public class Manager extends Employee{

double baseSalary = super.getSalary();

return baseSalary+bonus;

}

一个对象变量可以引用多种实际类型的现象被称为多态,意思就是一个父类的变量可以应用一个父类的对象,也可以引用一个子类的对象,然而不能将一个超类的引用赋给子类变量。在运行时能够自动地选择调用哪个方法的现象被称为动态绑定。这个的意思就是说调用的方法取决创建是哪个类的对象,如果创建父类的对象就调用父类的对象,如果创建子类的对象就调用子类的对象。

Employee e = new Employee("张飞", 10000, 182, 3, 7);

Employee boss = new Manager("张飞", 10000, 182, 3, 7,200);

如果类中使用final作为修饰,那表示类不能继承, final修饰方法,那表示方法不能被覆盖,final修饰字段表示常量。

4、抽象类

在我们在设计类往往存在很通用的类,比如学生是一个人,员工也是一个人,在这个里面都有一个描述的方法,在人里面是用来表述一个人,但是没有办法给出具体的实现,那这个时候就要把这个方法写成抽象方法,抽象方法所在类必是抽象类,抽象类中可以有其他方法和字段。类中如果不含抽象方法,也可以写成抽象类。

abstract class Person{

public Person(String n){

this.name = n;

}

Public abstract String getDesc();

Public String getName(){

Return this.name;

}

}

public class Student extendsPerson{

Public Student(String n,String m){

Super(n);

this.major = m;

}

Public String getDesc(){

Return “major”+major;

}

Private String major;

}

在这里我们来实现一个果园的例子,来详细讲解抽象类和接口的使用。

实现:模拟一个生长着橘子和苹果的果园,在水果熟了以后通过工人采摘得到相应的水果。

通过题目分析得知,需要橘子类、苹果类、水果类、工人类。

//Fruit.java

//父类水果类,在这里定义了一个抽象方法作为示例,表示生长

public abstract class Fruit{

public abstract void growth();

}

//Apple.java

//子类苹果类,实现了生长方法

public class Apple extends Fruit

public void growth(){

System.out.println(“苹果在生长”);

}

}

//Orange.java

//子类橘子类,实现了生长方法

public class Orange extends Fruit{

public void growth(){

System.out.println(“橘子在生长”);

}

}

//Worker.java

//工人类,实现采摘,通过名称作为参数来得到水果

public class Worker {

public static Fruit harvest(String name){

if(“apple”.equals(name)){

return new Apple();

}else if(“arange”.equals(name)){

return new Orange();

}else{

return null;

}

}

}

//FruitTest.java

public class FruitTest {

public static void main(String []args){

Fruit fruit = Worker.harvest(“apple”);

If(fruit!=null)fruit.growth();

}

}

这个例子把我们刚刚前面学的东西都系统的结合集合,好好琢磨这个例子,有很多的东西在这里。

5、接口

接口是用来描述类具有什么功能,而并不是给出每个功能的具体实现。一个类可以实现一个或多个接口。接口中的所有方法自动是public,在声明方法时可以不用提供public关键字。

public interface Comparable{

int compareTo(Object other);

}

实现接口是通过implements

public Employee implements Comparable{

public int compareTo(Object other){

Employee other= (Employee)other;

if(salary <other.salary){

return -1;

}

if(salary >other.salary){

return 1;

}

Return 0;

}

}

接口不能new来实例化,但是可以创建接口变量,可以引用实现接口的类的对象。接口不能含有字段和静态方法,但可以包含常量。

使用接口改写我们前面的果园的例子,请大家自行改写,我就不列出详细代码。

在这里也就明确了接口与抽象类的区别,请大家认真看我笔记,自行总结。

6、Swing界面

在前面所写的例子都是基于控制台的程序,现在我们就开始进入到基于图像界面的程序,在学习java图像界面的时候,我们会把输入/输出、集合、JDBC的操作都融入到swing。那我们为什么要学习swing啦,学习swing,我们主要学习的是思想,解决问题的方法。

在使用swing时,我们需要使用的包:javax.swing包,明确了我们所要导入的包,那下面就要学习创建界面的步骤:

1、 创建窗体:创建窗体使用的是JFrame类,创建窗体有两种方法:

//方法一:直接对JFrame实例化

JFrame myframe = new JFrame();

//方法二:自定义一个类让他继承JFrame

public class MyFrame extends JFrame{

}

2、 设置布局:布局决定着控件放在窗体中的位置,如果不设定布局就直接添加控件,采用窗体的默认布局,就是边界布局,边界布局的特点:控件排在东西南北中,默认在中间。如果要改变布局就要使用setLayout方法。

//设置流式布局,流式布局从左到右,从上到下

public class MyFrame extends JFrame{

public MyFrame(){

this.setLayout(newFlowLayout());

}

}

//设置空布局,自己设定位置,在这里创建了一个上面有ok的按钮,放在窗体的地方:距离左边0像素,//上边0像素,按钮的宽度50px,高度30像素

public class MyFrame extends JFrame{

public MyFrame(){

this.setLayout(null);

JButton btnOk =new JButton(“Ok”);

btnOk.setBounds(0,0,50,30);

}

}

3、 添加控件:在jdk1.5之前要通过内容窗格来添加,之后直接添加。

Container c = this.getContentPane();

c.add(btnOk);

this.add(btnOk);

4、 显示窗体:只要通过setVisible方法即可。

也有善意的提醒:何不去远方!昆明呀——赶一个花海;

Java实训笔记(二)

相关文章:

你感兴趣的文章:

标签云: