Download presentation
Presentation is loading. Please wait.
Published by硬移 范 Modified 7年之前
1
主讲:朱红英 e-mail:hongyingzhy@gmail.com tel:13979115835
java程序设计 主讲:朱红英 tel:
2
7.1 定义和使用类方法 银行卡类的使用 package com.task07; //创建包com.task07 /**
* AccountCard.java * 银行卡的使用 */ public class AccountCard { //定义类AccountCard …… //类的属性描述,详细实现代码参见6.4.7 public void deposit(double cash){ //类的存款行为,详细实现代码参见6.4.7 …… } public void withdraw(double cash){ //类的取款行为,详细实现代码参见6.4.7 public void query(){ //类的查询行为,详细实现代码参见6.4.7
3
银行卡类的使用 package com.task07; //创建包com.task07 /** * AccountCardTest */
public class AccountCardTest { //定义测试类 public static void main(String[] args) { //程序的入口 AccountCard wang=new AccountCard(); //创建类的对象 wang.account=" "; wang.name="王朝"; wang.passportCode=" "; wang.address="持卡人地址"; wang.balance=1000.8; wang.deposit(1000.5); //存款 wang.query(); //查询 wang.withdraw(500); //取款 }
4
银行卡类的使用 方法deposit()、withdraw()和query()没有返回数值。现改为,正确存款、取款后,返回true,否则返回false。查询返回余额。 public boolean deposit(double cash){ //类的存款行为 …… return true; //返回true } public boolean withdraw(double cash){ //类的取款行为 boolean correct=true; if ((balance-cash)>0){ balance=balance-cash; System.out.println("最终存款余额:"+balance); }else{ System.out.println("取出数额太大!请重新输入。"); correct =false; return correct; //返回correct public double query(){ //类的查询行为 System.out.println("===================="); System.out.println("您的余额是:"+balance); return balance; //返回balance
5
7.1 定义和使用类方法 方法的声明 格式: [修饰符] 返回值类型 方法名(形式参数列表) [throws 异常名列表] {
//方法体的实现部分; 局部变量声明; 语句序列; }
6
7.1 定义和使用类方法 public class Student1{ …… public String getInfo(){
如下的类的方法定义有哪些不对的地方? public class Student1{ …… public String getInfo(){ String name = “Harui”; String address = “London ”; return name, address; } public class Student2{ public static void main(String[ ] args){ return "返回"; 提示:有2个错误。
7
7.1 定义和使用类方法 方法的修饰符 访问控制符(含义、作用和属性的访问控制符相同) 静态修饰符static
抽象方法修饰符abstract 最终方法修饰符final等
8
7.1 定义和使用类方法 方法的修饰符---静态修饰符static 静态方法:用static修饰符修饰的方法。 (又称类方法)
二者的区别: 调用方式的不同:实例方法只能在类的实例和子类的实例中调用(也即先要用new运算符创建类的实例,再用 对象名.方法 的方式调用);而由于静态方法属于类,因此只要声明了一个类,不需要实例化对象就可调用其静态方法。
9
7.1 定义和使用类方法 方法的修饰符---静态修饰符static 静态方法的编写与使用时应注意的问题:
static方法只能处理静态变量(也称static 域 即static 成员变量)或调用static方法。 static方法中不能访问实例变量或调用实例方法,也不能使用this或super(关于this,super将在后续章节介绍)。 调用static方法时,既可用某一个具体的对象名调用(对象名.方法),也可以使用类名直接调用(类名.方法)(如下页UseStatic.java所示)
10
说明:static 也可修饰类的成员变量 static修饰符 类变量/静态变量:
在类外访问静态变量时,若该静态变量非private,则可以直接用类名访问也可以通过对象访问(两种方式的结果是一样的),实例变量则只能通过实例对象才能访问。
11
7.1 定义和使用类方法 //UseStatic.java: Static void main(String args[]) {
class UseStatic { int i; static int j; void seti(int ii) i=ii; } static void setj(int jj) j=jj; Static void main(String args[]) { UseStatic aa=new UseStatic(); UseStatic.j=2; System.out.println(“j:“+ UseStatic.j+”,”+aa.j); aa.j=3; UseStatic.setj(3); aa.i=4; System.out.println(“i=“+ aa.i); aa.seti(4); }
12
7.1 定义和使用类方法 方法的参数传递 1.基本数据类型的参数传递 形参类型为基本数据类型(值传递)
基本类型的变量作为实参传递,并不能改变这个变量的值 方法中的形式参数相当于局部变量,方法调用结束后自行释放,不会影响到主程序中的同名变量 举例见下页
13
class PassValue{ public static void main(String args[]){ int x=5; chang(x); System.out.println(x); } public static void chang(int x){ x=3;
14
7.1 定义和使用类方法 方法的参数传递 2.形参类型为引用数据类型(地址传递) 引用数据类型的参数调用可以改变对象的内容
对象的引用变量并不是对象本身,而是对象的句柄(名称),一个对象可以有多个句柄 举例见下页:
15
public static void main(String [] args){
class PassRef{ int x; public static void main(String [] args){ PassRef obj=new passRef(); obj.x=5; chang(obj); System.out.println(obj.x); } public static void chang(PassRef obj){ obj.x=3;
16
7.1 定义和使用类方法 方法之间的调用 在一个类中调用另一个类的方法。
例如,定义AccountCard类后,在AccountCardTest测试类的main()方法中调用AccountCard类的方法。 public static void main(String[] args) { //程序入口方法 AccountCard wang=new AccountCard(); //创建AccountCard类的对象 …… wang.deposit(1000.5); //在一个类的方法中调用另一个类的deposit()存款 方法 wang.query(); //在main()方法中调用AccountCard类的query()查询方法 wang.withdraw(500); //在main()方法中调用AccountCard类withdraw() 取款方法 wang.query(); }
17
在同一个类中,方法也可以相互调用: public class Car { String brand = "奥迪"; public String getBrand (){//方法1:获得小轿车品牌属性 return brand; } public String showCar() {//方法2:描述小轿车特性 return “这是一辆” + getBrand() + “品牌的小轿车。”; //调用同一个类 中的另一个方法 同一个类中方法之间调用时,不用写“对象名.”,而是直接调用方法。
18
7.2 变量的作用域 变量的作用域与变量的声明位置有关。 变量的有效范围称为变量的作用域。
当变量在方法之外定义时,称为类的成员变量类的成员变量的作用域在整个类的范围之内。 注:别的类能否使用,与类、变量的修饰符有关。 当变量在类的方法中定义时,变量的作用域只局限于该方法内部,称局部变量。
19
例如: public class Car { String brand = "奥迪"; public String getBrand (){ String color = "黑色"; //方法内部的局部变量,作用域为本方法 System.out.println(color); //只能本方法调用 return brand; //类的成员变量,在方法中也可以使用 } public String showCar() { System.out.println(color); //使用了getBrand()方法内的局部变量,出错 return "这是一辆" + getBrand() + "品牌的小轿车。";
20
变量还有一种常见的用法。 在方法体中,用{}括号划分了一个区域,然后,在区域中进行变量的定义。 例如,在一个方法体中: …… for(int i = 1, sum = 0; i <= 100; i++){ sum=sum+i; System.out.println(i+" "+sum); //i,sum的作用域仅在for循环中 }
21
编写员工信息类 package com.task07; //创建包com.task07
import java.util.Scanner; //导入程序中用到的系统类 /** * Employee */ public class Employee { //自定义Employee类 String no; //类的属性描述 String name; double basicSalary; double unfixedSalary; double realSalary; public void inputEmployee(){ //类的从键盘输入数据行为(方法) Scanner input = new Scanner(System.in); System.out.print("请输入员工号:"); no = input.nextLine(); System.out.print("请输入姓名:"); name = input.nextLine(); System.out.print("请输入基本工资:"); basicSalary = input.nextDouble(); System.out.print("请输入岗位津贴:"); unfixedSalary = input.nextDouble(); } public void calcRealSalary(){ //类的计算实际工资的行为(方法) realSalary=basicSalary+unfixedSalary; public void showRealSalary(){ //类的显示实际工资的行为(方法) System.out.println("实际收入: "+realSalary); public void showEmployeeInfo(){ //类的员工信息的行为(方法) System.out.println("员工号:"+no+" 姓名:"+name);
22
package com.task07; public class EmployeeTest { //测试类 /** args */ public static void main(String[] args) { //程序入口方法 Employee employee1=new Employee(); //创建类的对象 employee1.inputEmployee(); employee1.calcRealSalary(); employee1.showEmployeeInfo(); employee1.showRealSalary(); }
23
eclipse3.2汉化包的安装 (外挂式,假设eclipse已安装在
eclipse3.2.2目录下,即在eclipse3.2.2目录下自动创建了一个eclipse目录) 1)建立一个D:\eclipse3.2.2\eclipse\myPlugins目录,这个目录是我们准备存放所有eclipse插件的地方 2)然后建立一个D:\eclipse3.2.2\eclipse\myPlugins\NLPack1-eclipse-SDK-3.2目录,这个目录是我们存放汉化包的地方 3)然后解压eclipse汉化包,NLPack1-eclipse-SDK-3.2.zip,在D:\eclipse3.2.2\eclipse\myPlugins\NLPack1-eclipse-SDK-3.2目录里面解压缩,解压缩后的内容会在一个名为eclipse目录中 4)建立一个D:\eclipse3.2.2\eclipse\links目录,新建一个文件language.link(文件名可随意),文件的内容只有一行,如下: path=D:\\eclipse3.2.2\\eclipse\\myPlugins\\NLPack1-eclipse-SDK-3.2 5)启动eclipse,汉化成功
24
7.3 定义包和导入包的关键字 包的概念: 包是组织java程序中类的一种手段。
包实际上是类和接口的集合,利用包可以把常用的类或功能相似的类放在一个程序包中,就像文件放在文件夹中一样,使类的管理更清晰,更有条理。 包是一种松散的类集合,一般不要求处于同一包中的类有明确的相互关系,但通常把需要一起工作的类放在一个包中。 使用包的一个主要原因还在于保证类名的惟一性。假设两个程序员都提供了一个employee类。只要他们把类放在不同的包中,那么就不会有冲突。 如: department1.employee department2.employee
25
包的创建 note: 格式:package 程序包名;
Package语句必须放在java源文件的第一行,该行前可以有空格及注释行。 创建包就是在当前文件夹下创建一个子文件夹,以便存放这个包中包含的所有类文件。“.”代表目录分隔符。
26
包的引用 将类组织成包的目的是为了更好地利用包中的类,为了使用java中已提供的类,需要用import语句来引入所需要的类 格式:
(在每个类名前加上完整的包名的方式也可访问该类,但显然重复而冗长)。 格式: import package1[.package2…].(classname或*) eg: import java.awt.*; import java.util.Date; Note: 编译器为所有程序自动引入包java.lang,因此不必用import语句引入它所包含的所有类,但若是需要使用其他包中的类,则必须用import语句引入。 使用*只能表示本层次的所有类,而不包括子层次下的类。import语句必须先于所有类的声明
27
eclipse中如何创建一个包? 方法1: 方法2 分别创建包和类。 创建项目→创建包→创建类 创建类的过程中创建类所在的包
创建项目→创建类(在此过程中声明所属包,如无声明,则显示“缺省包”)。
28
命令行方式下,编译和运行包中的类 命令行方式下,编译和运行包中的类 举例见: 编译 运行方式:
使用javac的 -d 参数来指定包的根目录 在classpath中添加包的根目录 运行方式: 进入启动运行类所在的目录(如果已经在classpath中添加了启动运行类所在的目录,则在任何位置下都可以) 使用 java 运行类的类名 的方式运行程序. 举例见: javacode\包的使用\Mypk2-rectangle文件夹
29
上机练习: 编译运行javacode\包的使用\mypk文件夹中的例子
D:\javawork\source---放Paker.java,PakerTest.java D:\javawork\classes---放前面两个文件中编译产生的类文件
30
7.4 Javadoc注释 Javadoc注释与单行注释和多行注释不同,它主要是为自动建立文档做准备,通常用来注释类、方法等。Javadoc注释使用“/**”开始和“*/”结束。例如,给AccountCard类加Javadoc注释: /** *AccountCard类 描述信息 *银行卡的使用 wang @author 描述作者信息 @version :描述版本信息 */ 给AccountCars类的deposit()方法添加Javadoc注释: * 存款 描述信息 true 存款是否成功 @return:描述方法的返回值 public boolean deposit(double cash){ …… System.out.println("最终存款余额:"+balance); return true; }
31
Javadoc注释用在类、方法的声明之前,Javadoc注释中以@开头的部分称为固定的Javadoc标记。
32
/** * Score类 wang */ public class Score { int score1; // 语文成绩 int score2; // 数学成绩 * 计算总成绩 total public int calcTotalScore() { int total = score1 + score2; return total; } * 显示总成绩 public void showTotalScore() { System.out.println("总成绩是: " + calcTotalScore()); /** * 计算平均成绩 avg */ public int calcAvg() { int avg = (score1 + score2) / 2; return avg; } *显示平均成绩 public void showAvg() { System.out.println("平均成绩是: " + calcAvg());
33
eclipse中生成javadoc文档 项目—生成javadoc
34
命令行方式下,生成注释文件: javadoc [-d 文档寄存目录][ -author][ -version]源文件名.java
Similar presentations