第3-2章 类与 对象 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点:

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

第7章 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点: 静态成员
Java语言的特点 Java开发环境的搭建
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
第三讲 面向对象(上).
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
第二章 JAVA语言基础.
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
Ch07 介面與多重繼承 物件導向程式設計(II).
1 Department of Computing.
第三章 控制结构.
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
物件導向程式設計 (Object-Oriented rogramming)
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
第二章 C# 基础知识.
常用工具类.
Java基础 JavaSE异常.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第三章 C#面向对象初级编程 面向对象得程序设计越来越受到编程人员的喜爱。类和对象是面向对象程序设计中的重要概念。封装性、继承性和多态性是面向对象的特点,本章旨在全面说明C#编写面向对象程序设计的方法。
Ch10 類別與物件-方法 Java程式設計(2).
程式設計實作.
抽象类 File类 String类 StringBuffer类
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
Java程序设计 第9章 继承和多态.
類別的繼承 Vehicle Car.
第6章 继承和接口设计 6.1 继 承 6.2 多态性 6.3 抽象类 6.4 接口 6.5 接口在集合排序中的应用.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
第5讲 使用类和对象编程(三) 内部类 实例 程序控制结构 选择语句.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第三章 C# 基础知识.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
第三课 标识符、关键字、数据类型.
第二章 Java基本语法 讲师:复凡.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第10讲 构造函数和析构函数 构造函数 析构函数 This 指针.
C++复习2----类与对象.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第四章 类 4.1 基础知识 4.2 构造函数 4.3 方法 4.4 属性与索引 4.5 String类
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
第三章 数据抽象.
C语言程序设计 李祥 QQ:
第二章 Java基本语法 讲师:复凡.
第 9 章 建構函式與解構函式.
龍老師我不會Debug QQ.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
Class 2005/05/25.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Presentation transcript:

第3-2章 类与 对象 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点: Windows98 第3-2章 类与 对象 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点: 静态成员 学时:6 汕头大学计算机教学中心

D3-2.1类的私有成员与公共成员 1 私有成员 保护成员变量不会被任意改变。 仅供自己使用,黑盒子。 2 公共成员 Windows98 D3-2.1类的私有成员与公共成员 1 私有成员 保护成员变量不会被任意改变。 仅供自己使用,黑盒子。 2 公共成员 可以被所有类使用,透明。 3 default 默认访问控制符 ,可以省略。 同一包中可以访问。 汕头大学计算机教学中心

public String no,name,sex; public int age; void disp(){ Windows98 class Student { public String no,name,sex; public int age; void disp(){ System.out.print(no+“ ”+name+“ ”+sex+ “ ”+age); } public class app1{ public static void main(String args[]){ Student s1 = new Stuednt(); s1.no=“9801”; s1.name = “张三”; s1.sex=“男”; s1.age = -8; //值被更改,不能控制值的范围 s1.disp(); 汕头大学计算机教学中心

private String no,name,sex; private int age; class Student { //私有成员 private String no,name,sex; private int age; void set(String pno,String pname,String psex,int page){ no = pno; name=pname ; sex=psex; if (page>0 && page<=60) age=page; else age=0; } void disp(){ System.out.print(no+“ ”+name+“ ”+sex+ “ ”+age); } public class app1{ public static void main(String args[]){ Student s1 = new Stuednt(); s1.set(“9801”,“张三”,“男”,-8 ); s1.disp(); } Windows98 汕头大学计算机教学中心

private String no,name,sex; private int age; void setAge(int page){ class Student { //私有成员 private String no,name,sex; private int age; void setAge(int page){ if (page>0 && page<=60) age=page; else age=0; } int getAge () { … } } public class app1{ public static void main(String args[]){ Student s1 = new Stuednt(); s1.setAge(20); System.out.print( s1.getAge() ); } Windows98 汕头大学计算机教学中心

Windows98 3 默认 若在类成员的前面加上访问控制符 default,说明该成员是友元。 汕头大学计算机教学中心

D3-2.2 方法的重载 方法的重载中参数的类型是关键。 1 方法名相同 2 参数个数不同 或者 参数类型不同 或者 参数的顺序不同。 Windows98 D3-2.2 方法的重载 方法的重载中参数的类型是关键。 1 方法名相同 2 参数个数不同 或者 参数类型不同 或者 参数的顺序不同。 注意:与返回值无关。 汕头大学计算机教学中心

double add (double x,double y) { return (x+y); } Windows98 class overloadDemo { int add (int x,int y){ return (x+y) ; } double add (double x,double y) { return (x+y); } public static void main(String args[]){ int a1=10,b1=2; double a2=9.43,b2=2.34 ; System.out.println( add(a1,b1) ); System.out.println( add(a2,b2) ); } 汕头大学计算机教学中心

class A { int x,y; void set (int i , int j){ x=i; y = j; } Windows98 class A { int x,y; void set (int i , int j){ x=i; y = j; } void set( int i){ x=i; y=0; } void set(){ x=0;y=0;} } 汕头大学计算机教学中心

double add ( int i , int j){ double d; d = 3.14 * (i + j) ; } } Windows98 class A { //改错1 int x , y; void set (int i,int j){ x=i; y = j; } void set( int m , int n){ x=m; y=n } } class A { //改错2 int add (int i , int j){ return ( i + j ) ; } double add ( int i , int j){ double d; d = 3.14 * (i + j) ; } } class A { //改错3 int no ; String name; void set (int pno , String pname){ no=pno; name = pname; } int set(String pname, int pno ){ no=pno; name = pname; return (pno) ; } } 汕头大学计算机教学中心

class Cylinder { //app7_3.java 方法的重载 private double radius; Windows98   class Cylinder { //app7_3.java 方法的重载    private double radius;    private int height;    private double pi=3.14;    private String color;   public double SetCylinder(double r, int h) { radius=r; height=h; return r + h ; } public void SetCylinder(String str) { color=str; } public void show( ) {   System.out.println("圆柱的颜色为:"+color); }     double area() { return pi* radius* radius;  }    double volume()  { return area()*height;   }  } 汕头大学计算机教学中心

public static void main(String args[ ]) { double r_h; Windows98 public class app7_3  {   public static void main(String args[ ]) {    double r_h;    Cylinder volu = new Cylinder();    r_h = volu.SetCylinder(2.5 , 5 );    volu.SetCylinder(“红色”);    System.out.println("圆柱底和高之和="+r_h);    System.out.println("圆柱体体积="+volu.volume());    volu.show();    }  } 汕头大学计算机教学中心

当传入的参数为一个整数,则返回此数的阶乘。 当传入的参数为两个整数,则返回两数之和。 当传入的参数为两个float型,则返回两数的乘积。 Windows98 重载练习: 1 编写方法 proc , 当传入的参数为一个整数,则返回此数的阶乘。 当传入的参数为两个整数,则返回两数之和。 当传入的参数为两个float型,则返回两数的乘积。 写出主函数,测试。 汕头大学计算机教学中心

D3-2.3 构造方法 (构造函数) P74/3.4.3 int a ; a = 3; 或: int a = 3; class A{ Windows98 D3-2.3 构造方法 (构造函数) P74/3.4.3 int a ; a = 3; 或: int a = 3; class A{ int x; void set( int d } { x = d;} public static void main()(String args[]) { A a1 = new A(); a1.set( 9); } 能否: A a1 = new A(9) ; 汕头大学计算机教学中心

A a1; a1=new A(); a1.set(9); 地址:800 a1 800 x = A a2=new A(7); x = 9 a2 Windows98 A a1; a1=new A(); a1.set(9); A a2=new A(7); 地址:800 a1 800 x = x = 9 a2 栈内存 堆内存 汕头大学计算机教学中心

public class TDate { //如何建对象时 同时初始化? private int year =1900 Windows98 public class TDate { //如何建对象时 同时初始化? private int year =1900 private month , day ; public setDate(int yy, int mm, int dd){ year = yy;month=mm;day=dd; } public int getYear(){ return year; } public void print(){ System.out.print(year+”/”+month+”/”+day); } public static void main(String atgs[ ] ) { TDate d1 = new TDate( ) ; //对象数据成员值? d1.setDate ( 2010,4,10); 汕头大学计算机教学中心

class Cylinder { //app7_4.java 构造方法的使用 private double radius; Windows98 class Cylinder { //app7_4.java 构造方法的使用 private double radius; private int height; private double pi=3.14; public Cylinder(double r, int h) { //定义构造方法 radius=r; height=h; } double area() { return pi* radius* radius; } double volume( ) { return area()*height ; } } public class app7_4 { public static void main(String args[ ]) { Cylinder volu=new Cylinder(3.5, 8); //创建对象 并调用构造方法 System.out.println("圆柱底积="+ volu.area()); System.out.println("圆柱体体积="+volu.volume()); } } 汕头大学计算机教学中心

D3-2.3.1 构造方法的作用与定义 (1)构造方法的方法名与类名相同 (2)构造方法没有返回值,也不能写void Windows98 D3-2.3.1 构造方法的作用与定义 (1)构造方法的方法名与类名相同 (2)构造方法没有返回值,也不能写void (3)构造方法的作用是完成对类对象的初始化 (4)在创建一个类的对象的同时,系统会自动调用该类的构造方法为新对象初始化。 (5)构造方法一般不能由编程人员显式地直接调用,而是用new来调用; 汕头大学计算机教学中心

class A{ int x; void set( int d } { x = d;} public static void main()(String args[]) { A a1 = new A(); a1.set( 9); } } class A{ int x; A ( int d } { x = d;} public static void main()(String args[]) { A a1 = new A(9 ); }

public class TDate { //如何建对象时 同时初始化? private int year =1900 Windows98 public class TDate { //如何建对象时 同时初始化? private int year =1900 private month , day ; //public setDate(int yy, int mm, int dd){ TDate(int yy, int mm, int dd){ year = yy;month=mm;day=dd; } public int getYear(){ return year; } public void print(){ System.out.print(year+”/”+month+”/”+day); } public static void main(String atgs[ ] ) { TDate d1 = new TDate( 2010,4,10); d1.print(); 汕头大学计算机教学中心

D3-2.3.2 默认的构造方法 默认的构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。 class A{ Windows98 D3-2.3.2 默认的构造方法 默认的构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。 class A{ private int x; void show(){ Syetem.out.print(x); } 有构造函数吗? 有默认构造函数 A( ) { } 汕头大学计算机教学中心

结论:1 类没有写构造方法,则系统自动加一个默认构造方法。 2 类中有构造方法,则系统不再自动加默认构造方法。 3 类一定有一个构造方法。 Windows98 class A{ private int x; A( ) { } void show(){ Syetem.out.print(x); } 结论:1 类没有写构造方法,则系统自动加一个默认构造方法。 2 类中有构造方法,则系统不再自动加默认构造方法。 3 类一定有一个构造方法。 汕头大学计算机教学中心

练习 class A{ public int x,y; A(int i,int j ){x =i; y=j;} void show(){ Windows98 练习 class A{ public int x,y; A(int i,int j ){x =i; y=j;} void show(){ Syetem.out.print(x+” “+y); } class B{ public int x,y; void show(){ Syetem.out.print(x+” “+y); } } 问题1: 类B有构造函数吗? 2: 类A有 A(){ } 吗? 汕头大学计算机教学中心

D3-2.3.3 构造方法的重载 class A{ public int x,y; A( ) {x=0 ; y=0; } Windows98 class A{ public int x,y; A( ) {x=0 ; y=0; } A(int i ){x =i; y=0;} A(int i,int j ){x =i; y=j;} void show(){ System.out.print(x+” “+y); } public static void main(String args[]){ A t1 = new A(2); t1.show(); //new A; A t2 = new A(7,9); t2.show(); } } 汕头大学计算机教学中心

class Cylinder { // app7_5.java private double radius;   private int height;   private double pi=3.14;   String color;     public Cylinder() { radius=1; height=2; color=”绿色”; } public Cylinder(double r, int h, String str) { radius=r; height=h; color=str; } public void getColor() { System.out.println("该圆柱的颜色为:"+color); } double area() { return pi* radius* radius; } double volume() { return area()*height; } } Windows98 汕头大学计算机教学中心

public class app7_5 { //定义主类 public static void main(String args[ ]) { Cylinder volu1=new Cylinder(); //new Cylinder; System.out.println("圆柱1底面积="+ volu1.area()); System.out.println("圆柱1体积="+volu1.volume()); volu1.getColor(); Cylinder volu2=new Cylinder(2.5, 8,”红色”); System.out.println("圆柱2底面积="+ volu2.area()); System.out.println("圆柱2体积="+volu2.volume()); volu2.getColor(); } Windows98 汕头大学计算机教学中心

日期类,初始化对象时,如不给参数,则默认1900-1-1; Windows98 日期类,初始化对象时,如不给参数,则默认1900-1-1; 给一个年份,则月份,日期都为1,给年份、月份,则日期为1,给年、月、日,则根据给定的设置。 public class TDate { private int year ,month , day ; TDate( ){ year=1900 ; month=1;day=1; } TDate(int yy){ year = yy;month=1;day=1; } TDate(int yy, int mm){ year = yy;month=mm;day=1; } TDate(int yy, int mm, int dd){ year = yy;month=mm;day=dd; } public int getYear(){ return year; } public void print(){ System.out.print(year+”/”+month+”/”+day); } public static void main(String atgs[ ] ) { TDate d1 = new TDate(2010 ) ; TDate d2 = new TDate(2010,5); } } 汕头大学计算机教学中心

练习: 1 构造函数重载,有何好处? 2 建立一个时间类, 1)构造函数要求: 可以仅给一个参数,表示时,分、秒为0。 Windows98 练习: 1 构造函数重载,有何好处? 2 建立一个时间类, 1)构造函数要求: 可以仅给一个参数,表示时,分、秒为0。 可以仅给二个参数,表示时、分,秒为0。 可以仅给三个参数,表示时、分、秒。 可以不给参数,表示时、分,秒都为0。 2)打印如 23:11:30的时间 3) 建立测试: 建立时间 10:31:58 , 16:30:21 并打印。 汕头大学计算机教学中心

D3-2.3.4 从一个构造方法调用另一个构造方法 1 从某一构造方法内调用另一构造方法,是通过关键字this来调用的。 Windows98 D3-2.3.4 从一个构造方法调用另一个构造方法  1  从某一构造方法内调用另一构造方法,是通过关键字this来调用的。 2 this 调用语句必须写在该方法的第一行 class A{ private int x; A(int i){ x = i; System.out.print("调用"); } A() {this( -1) ;} void print(){ System.out.print(x);} } public class test1{ public static void main(String args[]) { A a1 = new A(3); a1.print(); A a2 = new A(); a2.print(); } 汕头大学计算机教学中心

class Cylinder { // //app7_6.java    private double radius; private int height;    private double pi=3.14; String color;    public Cylinder() { this(2.5, 5,”红色”); System.out.println(“无参构造方法”); } public Cylinder(double r, int h, String str) { System.out.println(“有参构造方法被调用了”); radius=r; height=h; color=str; } public void show() { System.out.println("圆柱底半径为:"+ radius); double area() { return pi* radius* radius; } double volume( ) { return area()*height; } } Windows98 汕头大学计算机教学中心

public static void main(String args[ ]) { Windows98 【例7.6】续 public class app7_6 //主类  {   public static void main(String args[ ])   {   Cylinder volu=new Cylinder();   System.out.println("圆柱底面积="+ volu.area());   System.out.println("圆柱体体积="+volu.volume());   volu.show();   }   } 汕头大学计算机教学中心

D3-2.3.5 公共构造方法与私有构造方法 1 构造方法一般都是公有(public)的! Windows98 D3-2.3.5 公共构造方法与私有构造方法 1 构造方法一般都是公有(public)的! 2 如构造方法被声明为private,则在类外无法被调用,只能在该类的内部被调用。 汕头大学计算机教学中心

System.out.print("调用"); } A() {this( -1) ;} void print(){ Windows98 class A{ private int x; private A(int i){ x = i; System.out.print("调用"); } A() {this( -1) ;} void print(){ System.out.print(x);} } public class test1{ public static void main(String args[]) { A a1 = new A(3); //???? a1.print(); A a2 = new A(); a2.print(); }} 汕头大学计算机教学中心

D3-2.3.6 递归 class Test { static long fact(int n){ if (n==1) return 1; return n*fact(n-1) ; } public static void main(String ar[]){ long a; a = fact(5); System.out.println( a );}

n=5 5*fact( 4) n=4 4*fact( 3) n=3 3*fact( 2) n=2 2*fact( 1) n=1 fact(1)=1

//Fibnacci static long fibnacci(int n){ if (n>2) return fibnacci(n-1)+fibnacci(n-2) ; else return 1; } public static void main(String ar[]){ System.out.println( fibnacci(7) );

//Fibnacci 间接递归 static long f2(int n){ if (n>2) return f1(n-1)+f1(n-2) ; else return 1; } static long f1(int n){ return f2(n) ; public static void main(String ar[]){ System.out.println( f1(7) );

3 打印如下数字塔 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 static void p(int i,int n){ //i 从i开始,到n结束 if (i<n){ System.out.print(i+" "); p(i+1,n); } public static void main(String ar[]){ int nRow =9; for(int i=1;i<nRow;i++){ p(1,i); System.out.println(); } }

p(1,4);//i,n p(2,4); p(3,4); p(4,4); 1 4 2 3 1 2 3 if (i<n){ 输出 i; } if (i<n){ 输出 i; p(i+1,n); } if (i<n){ 输出 i; p(i+1,n); } if (i<n){ 输出 i; p(i+1,n); } 1 4 2 3 1 2 3

递归练习 1二分查找(递归) 测试: int [] d={56,12,45,33,35,67,12,4,8,1,5,7,89,13,23} 找是否有 8 , 2 设计一个迷宫,使用递归找到出口

D3-2.4 静态成员 P87/3.6 static称为静态修饰符,它可以修饰类中的成员。 Windows98 D3-2.4 静态成员 P87/3.6 static称为静态修饰符,它可以修饰类中的成员。 被static修饰的成员被称为静态成员,也称为类成员, 不用static修饰的成员称为实例成员。 汕头大学计算机教学中心

D3-2.4.1 实例成员 在类定义中如果成员变量或成员方法没有用static来修饰,则该成员就是实例成员。 Windows98 汕头大学计算机教学中心

Windows98 D3-2.4.2 静态变量 用static修饰的成员变量称为“静态变量”,也称为类变量。静态变量是隶属于类的变量,而不是属于任何一个类的具体对象。 静态变量的使用格式: 类名.静态变量 对象名.静态变量名 汕头大学计算机教学中心

1 2 5 3 8 9 堆 栈 class A{ private int x , y ; static count=0; Windows98 class A{ private int x , y ; static count=0; A(int d1 , int d2) { x=d1; y =d2;} void print(){ System.out.print(x+”,”+y); } class Test { public static void main(String args[]){ A a1=new A(1,2); A a2=new A(5,3); A a3=new A(8,9); A.count =3; System.out.print(a1.count); x 1 y 2 x 5 a1 y 3 a2 a3 x 8 y 9 count 堆 栈 汕头大学计算机教学中心

特点: 1)所有该类的对象共享类变量。 2)通过类名被访问,可以不需创建类的实例(对象)。 3)类方法能直接访问类变量和类方法, Windows98 特点: 1)所有该类的对象共享类变量。 2)通过类名被访问,可以不需创建类的实例(对象)。 3)类方法能直接访问类变量和类方法, 但不能直接访问实例变量和实例方法(通过对象)。 类变量初始化 声明时初始化 (静态成员变量 没有初始值) 汕头大学计算机教学中心

A(int d1 , int d2) { x=d1; y =d2; count++;} void print(){ Windows98 class A{ //跟踪 A 被创建了几次 private int x , y ; static count=0; A(){ count ++ ;} A(int d1 , int d2) { x=d1; y =d2; count++;} void print(){ System.out.print(x+”,”+y); } class Test { public static void main(String args[]){ A a1=new A(1,2); A a2=new A(5,3); A a3=new A(); System.out.print(a1.count); System.out.print(a3.count); 汕头大学计算机教学中心

class Cylinder { // app7_8.java静态变量的使用 Windows98 class Cylinder { // app7_8.java静态变量的使用 private static int num=0; //声明num为静态变量 private static double pi=3.14; //声明pi为静态变量 private double radius; private int height; public Cylinder(double r, int h) { radius=r; height=h; num++; } public void count() { System.out.print(“创建了"+num+”个对象:”); } double area() { return pi* radius* radius;} double volume() { return area()*height; } } public class app7_8 { public static void main(String args[ ]) { Cylinder volu1=new Cylinder(2.5,5); volu1.count(); Cylinder volu2=new Cylinder(1.0,2); volu2.count(); } 汕头大学计算机教学中心

private static int year,month,day ; Windows98 1 使用静态变量有何好处? 静态变量练习 2 class TDate { private static int year,month,day ; TDate( ){ year=1900 ; month=1;day=1; } TDate(int yy, int mm, int dd){ year = yy;month=mm;day=dd; } public void print(){ System.out.print(year+"/"+month+"/"+day); } } public class test1 { public static void main(String atgs[ ] ) { TDate d1 = new TDate(2010,4,7 ) ; TDate d2 = new TDate(2010,6,5 ) ; TDate d3 = new TDate(2012,12,12 ) ; d1.print();d2.print();d3.print(); } } 写出程序运行结果,并解释原因。 汕头大学计算机教学中心

D3-2.4.3 静态方法 static 修饰符修饰的方法是属于类的静态方法,又称为类方法。 Windows98 D3-2.4.3 静态方法 static 修饰符修饰的方法是属于类的静态方法,又称为类方法。 静态方法实质是属于整个类的方法,而不加static修饰符的方法,是属于某个具体对象的方法。 1 通过类名被访问,不需创建类的实例(对象) 2 静态方法能直接访问类变量和类方法,但不能直接访问实例变量和实例方法。 3 静态方法中不能使用 this , super 4 调用方法: 类名.静态方法(参数 ) 对象名.静态方法(参数 ) 汕头大学计算机教学中心

public static void main(String args[]) { A a1(3); a1.f1(); a1.f2(); Windows98 class A{ //改错 类方法 int x; static int y=9; A( int i){ x = i;} static void f1(){ x++; y ++; f2(); } void f2 () { x++; y++; f1() ; } } class B{ public static void main(String args[]) { A a1(3); a1.f1(); a1.f2(); A.f1(); A.f2(); System.out.println( A.x); } } class A{ //类方法例题 int x; static int y=9; A( int i){ x = i;} static void f1(){ y ++;} void f2 () { x++;} } class B{ public static void main(String args[]) { A.f1(); System.out.println( A.y); 汕头大学计算机教学中心

编写一个类 myMath,类中提供如下方法: 1 计算阶乘的方法 int fact(int n) 。 Windows98 练习:类方法 编写一个类 myMath,类中提供如下方法: 1 计算阶乘的方法 int fact(int n) 。 2 计算 1+2+3+4 。。。n 的方法 int sum( int n) ; 3为整数排序的方法 sort,该方法接受一个待排序的一维数组,可以指定降序或升序。 sort ( int d[ ] , int direct) //direct=1 升序 , =2 降序 完成该类,并编写测试代码验证。要求使用这些方法时,不需要生成对象实例。 编写一个测试类 myApp, 计算8和12 的阶乘。 计算1+2+3。。+108; 生成10个50以内的随机数,分别以降序、升序排序输出。 汕头大学计算机教学中心

class Cylinder { // app7_9.java 静态方法的使用 private static int num=0;    private static double pi=3.14;     private double radius;     private int height;     public Cylinder(double r, int h) {   radius=r; height=h; num++;   }    public static void count() {      System.out.println(“创建了"+num+”个对象”);  }     double area() { return pi* radius* radius;  }     double volume() { return area()*height;   }   }    public class app7_9 {      public static void main(String args[ ]) {      Cylinder.count();      Cylinder volu1=new Cylinder(2.5,3);        volu1.count();        System.out.println volu1.volume());        Cylinder volu2=new Cylinder(1.0,2);         Cylinder.count();         System.out.println(volu2.volume());       }    } Windows98 汕头大学计算机教学中心

Math 类: 静态方法 PI ABS Sin Cos max(int ,int) , min random sqrt

D3-2.4.4 静态初始化器 对类的静态成员进行初始化。 静态初始化器与构造方法的不同: 1)构造方法是对每个新创建的对象初始化, Windows98 D3-2.4.4 静态初始化器 对类的静态成员进行初始化。 静态初始化器与构造方法的不同: 1)构造方法是对每个新创建的对象初始化, 静态初始化器是对类自身进行初始化。 2)构造方法是在用new运算符创建新对象时由系统自动执行, 静态初始化器一般不能由程序来调用,它是在所属的类被加载入内存时由系统调用执行。 3)用new运算符创建多少个新对象,构造方法被调用多少次, 静态初始化器则在类被加载入内存时只执行一次,与创建多少个对象无关。 4)不同于构造方法,静态初始化器不是方法,因而没有方法名、返回值和参数。 汕头大学计算机教学中心

静态初始化器: class 类名 { static{ 程序块; } static int y=9; public class test1{ Windows98 静态初始化器: class 类名 { static{ 程序块; } public class test1{ int x; public static int y; static { y=9; } void print(){ System.out.print(x+","+y); } public static void main(String args[]) { test1 t1 = new test1(); t1.print(); static int y=9; 汕头大学计算机教学中心

1 类A 有静态成员:数组 buffer ,要求在类加载时就产生20个100以内的随机数存储到数组 buffer中。 Windows98 1 类A 有静态成员:数组 buffer ,要求在类加载时就产生20个100以内的随机数存储到数组 buffer中。 这段代码运行多少次? class A { int no; static String sex="男"; static double buffer[]=new double[20]; static { for (int i=0;i<20;i++) buffer[i] = Math.random() * 100; } public static void main(String args[]) { System.out.println( A.sex); for(int i=0;i<20;i++) System.out.println( A.buffer[i]); } 汕头大学计算机教学中心

System.out.print(x+","+y); } public static void main(String args[]) { Windows98 2 类初始化器能否用构造方法代替? 3 改错 public class test1{ int x; public static int y; static { x=2; y=9; } void print() { System.out.print(x+","+y); } public static void main(String args[]) { test1.print(); } 汕头大学计算机教学中心

System.out.println("B"); } Windows98 4 写出运行结果 public class Test{ private int x; static double y; static { y= Math.random() * 1000; System.out.println("B"); } Test( int i) { x = i ; System.out.println(“构造方法”); } static void printY(){ System.out.println( y ) ; } void printX(){ System.out.println( x ) ; } public static void main(String args[]) { System.out.println( "A"); Test.printY(); Test t1 = new Test(88 ); t1.printX(); } 汕头大学计算机教学中心

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

Windows98 总结 1方法的重载。 2 掌握构造方法的定义和使用 3.类变量、类方法。 汕头大学计算机教学中心

Windows98 你会了吗? 汕头大学计算机教学中心