2015年度WEB开发实验室第四次Seminar.

主讲人:Hollins

课件下载:

PPT: Java的类和对象.pptx (下载544)

PDF: Java的类和对象.pdf (下载532)

作业讲解

如何计算斐波那契数列的第n项

  • 思路:

第n项的值 = 第n-1项的值+第n-2项的值(n>2)

  • 具体实现:

–递归

–数组

–迭代

–队列

零、软件准备

  • jdk

【2015年度Seminar】(四)Java的类和对象-数字人文技术实验室

  • Spring Tools Suit

【2015年度Seminar】(四)Java的类和对象-数字人文技术实验室

一、对象

0. 引用类型

回顾:基本数据类型有哪些?

byte,short,int,long,float,double,boolean,char

除了这些类型以外的类都是引用类型!

int  a = 1;
int  b = a;

【2015年度Seminar】(四)Java的类和对象-数字人文技术实验室

Dog d = new Dog();
Dog e = d;

【2015年度Seminar】(四)Java的类和对象-数字人文技术实验室

  • 判断是否相等

基本数据类型比较的是值

引用类型比较的是保存的引用是否相等

a==b
d==e
Dog u = new Dog();
d == e

1. 类的定义

类定义的内容主要包括成员变量定义和成员方法定义两部分。

  • 成员变量的定义体现了对这类对象属性的抽象
  • 成员方法的定义则体现了对这类对象行为的抽象

所有的成员变量和成员方法的定义都包括在一堆大括号内。类的定义的一般格式如下:

[<修饰符>] class <类名>{

[<成员变量定义>…]

[<初始化块>…]

[<构造方法>…]

[<成员方法定义>…]

}

修饰符

 public: 用该修饰符修饰的类可以被用于任何Java程序中,即任何包中的任何类都可以访问它。没有public修饰的类只能被同一个包中的类访问

public class Test{

}

abstract: 用该修饰符修饰的类为抽象类。抽象类往往包含一个或几个没有实现的方法,所以不能够创建实例

abstract class Test{
    abstract void print();
}

final: 用该修饰符修饰的类成为最终类。Final类不能被扩展,不会有子类。一个类不能同时被abstract和final修饰。

final class Test{

}

2. 对象的创建

一旦定义好一个类,就可以用实例创建表达式创建这个类的实例。实例创建表达式的一般格式如下:

new <类名> ([实参表]);

实例创建表达式的功能如下:

  • 为实例分配内存空间
  • 初始化实例变量
  • 返回对该实例的一个引用

3. 成员变量

  • 成员变量的定义格式如下:

[<修饰符>…] <类型名> <变量名> [=<初始化表达式>][,<变量名> [=<初始化表达式>]]…

int a;
int a = 1;
int a,b;
int a = 1, b =2;
  • 类变量属于,不管创建多少个实例,类变量在内存中只有一份。
  • 实例变量属于实例,每一个实例(对象)在内存中都会保持一份属于自己的实例变量
  • 修饰符

static:被static修饰的成员变量成为类变量(静态变量),而没有被static修饰的成为实例变量

final:被final修饰的成员变量成为有名常量。有名常量必须赋值,而且只能赋值一次。

transient: 定义一个暂时变量

volatile:定义一个共享变量

  • 成员变量的默认值
变量类型 默认初始值 变量类型 默认初始值
byte 0 short 0
int 0 long 0l
float 0.0f double 0.0
char ‘\u0000’ boolean false
引用 null

二、方法

0. 方法定义

方法定义的格式如下:

[<修饰符>…] <返回类型> <方法名> ([<形参表>])<方法体>

public static void main(String[] args){}

修饰符:

  • static: 被static修饰的方法称为静态方法,没有static修饰的称为实例方法
  • final: 被final修饰的方法为最终方法
  • abstract: 被abstract修饰的方法为抽象方法。抽象方法只提供方法名、形参表、返回类型等,但不提供方法的实现,其方法体只有一个分号;
  • abstract和static不能同时修饰方法
  • abstract和final也不能同时修饰

返回类型:

  • void: 方法没有返回值
  • 不是void: 方法有返回值,且方法中必须包含return语句
  • return语句的返回值要和返回类型要相容
  • 基本类型:实际返回类型要与指定返回类型相同,或者能够赋值转换成指定的类型。如:指定返回类型为double时,实际返回类型可以使int,long,float,double等
  • 引用类型: 实际返回类型要与指定返回类型相同,或者是指定返回类型的子类

形参表:

形参表可有可无。若包含形参,每个形参包含类型和名字,各个参数之间用逗号隔开。方法形参被视为局部变量,其作用域是整个方法体

方法体

除了抽象方法和本地方法,方法体为分号。在其他情况下,方法体是用大括号包含的块语句。

public void method(int n){
    System.out.println(n);
}

方法定义的格式如下:

[<修饰符>…] <返回类型> <方法名> ([<形参表>])<方法体>

public static void main(string[] args){}

1. 方法调用

  • 在类的内部,可直接用方法名调用:

<方法名> ([<实参表>]);

  • 在类的外部,则应该通过实例引用。如果是类方法,可以通过类名调用:

<对象引用>.<方法名>([<实参表>]);

<类名>.<方法名>([<实参表>]);

2. 构造方法

  • 构造方法的格式

[<访问修饰符>] <类名> ([<形参表>]) <构造方法体>

 

public class dog(){
  private int age;
  public dog(int age){
    this.age = age;
  }
}

 

  • 为什么有的类没有构造方法?
  • 没有构造方法的时候,系统会提供一个默认的构造方法。该默认构造方法没有形参

3. 方法重载

  • 方法签名: 方法名+形参表
  • 一个类内不能有两个方法签名一样的方法
  • 但是一个类中可以有若干方法名一样,但是形参不一致的方法,这种现象称为方法重载。
public double divide(int m, int n){
    return m*1.0/n;
}

public double divide(double m, double n){
    return m/n;
}

 

三、常用类

0. Math类

方法签名 用途
abs(int a) 绝对值
min(int a, int b) 最小值
max(int a, int b) 最大值
random() 随机数
ceil(double a) 返回大于或等于a的最小整数
exp(double a) 求e的a次方
sqrt(double a) 求a的开方

1. System类

System.out.println();
System.currentTimeMillis();
System.exit(); //退出当前运行的Java虚拟机

2. 格式化输出

描述符 输出
%b 布尔值
%c 字符
%d 十进制整数
%f 浮点数
%e 科学计数法法
%s 字符串

3. 从控制台获取输入

为了从控制台获取输入,我们可以借助java.util包中的Scanner类,如:

Scanner sc = new Scanner(System.in);

Scanner类中有许多获取数据的方法

next() //获得一个字符串
nextInt() //获得一个int型整数
nextDouble() //获得一个double型浮点数
nextBoolean() //获得一个boolean型数据

实例

打印乘法口诀表

  • for循环
  • 格式化输出

Code Assignment

  • 定义一个SavingAccount类。类中有一个静态变量annualInterestRate以存储年利率,一个实例变量savingsBalance以存储当前的储蓄额。该类提供一下方法:
  • void calculateinterest(int n); //计算n年的复利
  • static void modifyinterestrate(double rate); //设置存款利率

思考

全排练(以abc为例)

abc

acb

bac

aca

cab

cba

参考网站

http://docs.oracle.com/javase/8/docs/api/

http://www.baidu.com

公邮

  • Email:

weblab409@163.com