




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4.1 类的定义和使用1、最简单的类 class Mankind2、类的数据 class Mankind int sex; int salary;3、类的方法 class Mankind void name () System.out.println( “My name is abc” ); void income ( int wage ) System.out.println ( “My income this year is ” + wage ); 方法的组成部分: 方法名 方法的返回值 方法的参数例如:编写一个功能模块,他能够将两个整数按照用户的意愿进行四则运算 第一步:定义出一个方法,他能够完成这样的功能void Function( int x , int y , char c ) long result = 0 ; if ( c = + ) result = x + y; else if ( c = - ) result = x - y; else if ( c = * ) result = x * y; else if ( c = / ) result = x / y; System.out.println( x + String.valueOf(c) + y + = + result );第二步:调用他,来实现用户想要的功能Function( 1 , 2 , + ); / 结果输出:1+2=3注意:除了main方法外,其他方法都可以互相调用,main方法只有系统可以调用。4、完整的类定义示例 public class Mankind int sex; int salary;void name () System.out.println( “My name is abc” ); void income ( int wage ) System.out.println ( “My income this year is ” + wage ); 5、创建类的对象和运行程序1) 创建类的对象: Mankind somePerson = new Mankind();2) 给对象赋值:somePerson . sex = 1;somePerson . salary = 1000;3) 调用对象的方法:somePerson . income ( 12000 );例子:public class Mankind int sex; int salary;void name () System.out.println( “My name is abc” ); void income ( int wage ) System.out.println ( “My income this year is ” + wage ); public static void main( String args ) Mankind somePerson = new Mankind();somePerson . sex = 1;somePerson . salary = 1000;somePerson . name();somePerson . income ( 12000 ); System.out.println( “My salary this month is ” + somePerson . salary ); 运行结果:My name is abc My income this year is 12000 My salary this month is 10006、对象之间的关系 对象之间是相互独立的关系。 运行结果为: 注意下面这段程序:public class MankindObjectpublic static void main(String args) MankindObject person1=new MankindObject();MankindObject person2=new MankindObject(); System.out.println( person1= + person1 );System.out.println( person2= + person2 ); 运行结果为:4.2 有返回值的方法1、编写一个功能模块,他能够将两个整数按照用户的意愿进行四则运算 第一步:定义出一个方法,他能够完成这样的功能long Function( int x , int y , char c ) long result = 0 ; if ( c = + ) result = x + y; else if ( c = - ) result = x - y; else if ( c = * ) result = x * y; else if ( c = / ) result = x / y; return result;第二步:调用他,来实现用户想要的功能long z = Function( 1 , 2 , + ); System.out.println( “result = ” + z );/ 结果输出:result=32、一个完整的Java程序3、在编写有返回值的方法时,需要注意几点(参见P89下)1) 方法的声明的返回类型和其实际返回的数据类型要匹配2)return 语句不仅可以返回一个值,他实际上也退出了他所在的方法,因此在他之后不能有其他语句,那些语句不会被执行4.3 改变类的结构1、比较下面两个程序public class For0 public static void main(String args)int num=9;for(num=1;num6;num+)System.out.println(num); public class For1 void m()int num=9;for(num=1;num6;num+)System.out.println(num);public static void main(String args)For1 for1 = new For1();for1.m (); 2、将For1这个程序修改一下变为For2 public class For2 int m ()int num=9;for(num=1;num6;num+)System.out.println(num);return num;public static void main(String args)For2 for2 = new For2();int number =for2.m();System.out.println(number:+number); 3、折半查找算法的实现在一组排序好的的数中寻找一个给定的数。4.4 类中成员间的访问机制1、在一个类中的访问机制 类中某个方法若能够直接访问其他成员,该方法不能是静态的:1)public class AccessInClass1int sex;void m1() sex=1;int m2()sex=2;return sex;/sex=3;/errorvoid m3()m1();m2();2)public class AccessInClass2int sex;static int salary;void m1() sex=1;salary=1;int m2()sex=2;salary=2;return sex;void m3()m1();m2();m4();m5();static void m4()static void m5()AccessInClass2 aic1=new AccessInClass2();aic1.m1();aic1.m2();aic1.m3();/m1(); /error/m2(); /error/m3(); /erroraic1.m4();m4();aic1.sex=3;/sex=3; /erroraic1.salary=3;salary=3;结论:非静态方法可以直接访问非静态或者静态成员,而无须创建对象;静态方法可以直接访问静态成员,也可以通过创建的对象来访问;静态方法不能直接访问非静态成员,必须通过创建的对象来访问。一个完整的程序参见教材第96页例程AccessInClass3.java2、一个类访问另一个类 一个源程序文件AccessOtherClass1.java包含两个类 public class AccessOtherClass1void m1()OtherClass1 oc1=new OtherClass1();oc1.sex=1;System.out.println(sex= +oc1.sex);public static void main(String args) OtherClass1 oc2=new OtherClass1();oc2.sex=2;System.out.println(sex= +oc2.sex);oc2.m2(); class OtherClass1int sex;void m2()System.out.println(m2(); 文件名称要和加有pulbic关键字的类名称一致; 若每个类前面都不加public关键字,那麽文件可以以任何名称命名; 无论文件中包含多少个类,此文件编译后会生成各个类自己的class文件; 只有含有main方法的类可以运行。 4.5 类中变量和方法中的变量1、全局变量和局部变量的访问规则 public class VariableType1int x=1;void m()int y=2;System.out.println(x= +x);System.out.println(y= +y);/System.out.println(z= +z);/errorpublic static void main(String args) int z=3;System.out.println(z= +z);VariableType1 vt = new VariableType1();System.out.println(x= +vt.x);/System.out.println(y= +y);/error/System.out.println(y= +vt.y);/errorx 为全局变量,y、z为局部变量。2、全局变量和局部变量的初始化 如果变量在类中定义,那麽就是全局变量,可以不初始化,系统可以给他一个默认值, 而局部变量必须在使用它之前给他赋值。 public class DefaultValue1boolean t;char c;byte b;short s;int i;long l;float f;double d;public static void main(String args)int localVar = 1; /若不赋值,编译出错System.out.println(localVar= + localVar);DefaultValue1 d = new DefaultValue1();System.out.println(Primitive Data type Initial value);System.out.println(boolean= + d.t );System.out.println( null=+ );System.out.println( char= + d.c + );System.out.println( byte= + d.b);System.out.println(short= + d.s);System.out.println( int= +d.i);System.out.println( long= + d.l);System.out.println(float= + d.f);System.out.println(double= + d.d);运行结果:3、变量的作用域 1)在Java中,变量的作用域在声明他的大括号内: int x = 2; int y = 3; x = 4;x = 5;y = 6; / error x = 9;/error x定义在最外层的一对花括号内,所以他在这对花括号内起作用,即作用域的范围; y定义在里层的一对花括号内,所以他在这对花括号内起作用,出了内层的花括号,他就失效,相当于没有定义。 2)一个局部变量在其作用域中会把同名的全局变量屏蔽 public class Scope1int x=1;public static void main(String args) int x=2;System.out.println(x in main= +x);Scope1 vt = new Scope1();System.out.println(x in class= +vt.x);结果: x in main = 2 x in class = 1若通过对象访问一个变量,这个变量一定是全局变量(类成员变量),不是局部变量,但是全局变量也不必通过创建对象来访问,如:public class Scope2int x=1;void m()int y=2;System.out.println(x= +x);System.out.println(y= +y);public static void main(String args) Scope2 vt = new Scope2();vt.m();m方法是个非静态方法,他可以直接访问全局变量x。运行结果:x = 1 y = 2若将y改成x,结果会是什么呢?public class Scope3int x=1;void m()int x=2;System.out.println(x= +x); / x = 2,即局部变量System.out.println(x in class= +this.x); /x = 1 ,即全局变量public static void main(String args) Scope3 vt = new Scope3();vt.m();4.6 类的构造方法和重载1、类得构造方法 构造方法的格式:方法名称与类名称一致,且没有任何返回类型(包括void) 构造方法的作用:一般起初始化的作用 调用构造方法:构造方法是系统调用的,而非程序员调用 何时调用:当创建一个该类的对象的时候,系统就会调用一次此类的构造方法 2、重载方法与默认构造方法 同一个类中的方法名称一样的多个方法互成为重载。 将abs_float 和abs_int方法合并:构造方法的重载:public class Mankind2int sex;int salary; public Mankind2()System.out.println(output of constructor with no param); /-public Mankind2(int num)System.out.println(output of constructor with param=+num);salary=num;void employed (int salaryValue)if (salaryValue=0)System.out.println(no job );else System.out.println(job);public static void main(String args) Mankind2 somePerson1=new Mankind2();/隐含调用无参的构造方法System.out.println(somePerson1 created );somePerson1.salary=0;somePerson1.employed(somePerson1.salary);System.out.println(somePerson1.salary= +somePerson1.salary);Mankind2 somePerson2=new Mankind2(100); /隐含调用有参数的构造方法System.out.println(somePerson2 created );somePerson2.employed(somePerson2.salary);System.out.println(somePerson2.salary= +somePerson2.salary); 总结:重载方法之间的区别是参数的不同,包括参数的个数,类型,参数的排列顺序,但是不能用方法的返回值区分。如:int m() float m()(把教材饭到109页,阅读程序)4.7 类的继承与方法重置1、类的继承和重置方法 使用关键字extends表示继承(扩展) 类Mankind0public class Mankind0int sex;int salary;void manOrWoman( int sexValue) .void employed (int salaryValue)if (salaryValue=0)System.out.println(I am jobless );else System.out.println(I have a job);double income(int wage)public static void main(String args) . Mankind0是kids的父类(超类),kids是Mankind0的子类; 子类继承父类所有的成员(除了父类的构造方法)。 重置:父类和子类各有一个方法,他们的名称相同,返回类型相同,参数完全相同,这两个方法成为重置。(重置的好处)2、在一个文件中继承类 上面的Kids类和Mankind0类分属两个文件,可以把他们合并到一个文件中: class Mankindint sex;int salary;void manOrWoman( int sexValue) switch(sexValue)case 0:System.out.println(a man);break;case 1:System.out.println(a woman);break;default:System.out.println(not a man or a women);void employed (int salaryValue)if (salaryValue=0)System.out.println(no job );else System.out.println(job);public class Kids1 extends Mankindint yearsOld;void printAge() System.out.println(age= +yearsOld);void employed(int salaryValue)System.out.println(kids should study and no work );public static void main(String args)System.out.println(Mankind start-);Mankind somePerson=new Mankind();/创建对象somePerson.sex=1;/给对象中的数据赋值somePerson.manOrWoman( somePerson.sex);/执行对象中的方法somePerson.salary=5; /给对象中的数据赋值somePerson.employed(somePerson.salary); /执行对象中的方法System.out.println(Kids1 start- );Kids1 someKid=new Kids1();/创建对象someKid.sex=0;/给对象中的数据赋值someKid.manOrWoman( someKid.sex);/执行对象中的方法someKid.salary=5; /给对象中的数据赋值someKid.employed(100); /执行对象中的方法3、为每个类添加main方法 一般程序只有一个main方法,但Java允许为每个类添加main方法: class Mankindint sex;int salary;void manOrWoman( int sexValue) switch(sexValue)case 0:System.out.println(a man);break;case 1:System.out.println(a woman);break;default:System.out.println(not a man or a women);void employed (int salaryValue)if (salaryValue=0)System.out.println(no job );else System.out.println(job);public static void main(String args) System.out.println(Mankind start-);Mankind somePerson=new Mankind();/创建对象somePerson.sex=1;/给对象中的数据赋值somePerson.manOrWoman( somePerson.sex);/执行对象中的方法somePerson.salary=5; /给对象中的数据赋值somePerson.employed(somePerson.salary); /执行对象中的方法/-public class Kids2 extends Mankindint yearsOld;void printAge() System.out.println(age= +yearsOld);void employed(int salaryValue)System.out.println(kids should study and no work );public static void main(String args)System.out.println(Kids2 start- );Kids2 someKid=new Kids2();/创建对象someKid.sex=0;/给对象中的数据赋值someKid.manOrWoman( someKid.sex);/执行对象中的方法someKid.salary=5; /给对象中的数据赋值someKid.employed(100); /执行对象中的方法4、类与其超类的构造方法的调用 下面的程序Kids.java有3个类,每个类都由一个不带参数的构造方法和一个带参数的构造方法: class AnimalAnimal()System.out.println(Animals constructor );Animal(int num)System.out.println(Animals constructor=+num);class Mankind extends Animal Mankind()System.out.println(Mankinds constructor );Mankind(int num)System.out.println(Mankinds constructor=+num);public class Kids extends MankindKids3()System.out.println(Kids3constructor);Kids3(int num)System.out.println(Kids3constructor=+num);public static void main(String args)System.out.println(start Mankinds constructor);Mankind somePerson1=new Mankind();Mankind somePerson2=new Mankind(100);System.out.println(end Mankinds constructor);System.out.println(start kidsconstructor );Kids3 someKid1=new Kids3();Kids3 someKid2=new Kids3(999);System.out.println(end kidsconstructor);运行结果:结论:子类创建对象时,不管有无参数,都会自动调用超类不带参数的构造方法。把父类的不带参数的构造方法删除,程序在编译时会报错,解决方案:1) 把超类所有的构造方法全部删除2) 在子类的构造方法中加入super( ) 调用超类的构造方法即可。 class AnimalAnimal(int num)System.out.println(Animals constructor);class Mankind extends Animal Mankind(int num)super(3);System.out.println(Mankinds constructor);public class Kids31 extends MankindKids31()super(1);System.out.println(Kids3constructor 1);Kids31(int num)super(2);System.out.println(Kids3constructor 2);public static void main(String args)System.out.println(start kidsconstructor );Kids31 someKid1=new Kids31();Kids31 someKid2=new Kids31(999);System.out.println(end kidsconstructor);5、不用继承使用另外一个类的功能 因为没有使用继承,所以必须要创建Mankind对象,并且要用Kids对象的数据调用Mankind对象的方法,把结果返回给Kids数据,若使用继承,则:6、滥用重置 class Class0void func()int i=0;System.out.println(Class+i);class Class1 extends Class0void func()int i=1;System.out.println(Class+i);class Class2 extends Class1void func()int i=2;System.out.println(Class+i);class Class3 extends Class2class Class4 extends Class3/*void func()int i=4;System.out.println(Class+i);*/public static void main(String args)Class4 c4=new Class4();c4.func();程序中,func方法被多次重置,Class4类的func方法被注释掉了,Class4继承Class3类,而Class3是个空类。c4.func( ) 会执行哪个func方法呢?答案是Class2类的func方法。7、重置和重载 下面这个程序即有重置又有重载: class Class0void func()int i=0;System.out.println(Class+i);class Class1 extends Class0void func()int i=1;System.out.println(Class+i);void func(int i)System.out.println(arg of Class1=+i);class Class2 extends Class1void func()int i=2;System.out.println(Class+i);class Class3 extends Class2void func( boolean b)System.out.println(arg of Class3=+b);class Class41 extends Class3/*void func()int i=4;System.out.println(Class+i);*/public static void main(String args)Class41 c4=new Class41();c4.func();c4.func(8);c4.func(true);运行结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025火电电力职业鉴定每日一练试卷【必刷】附答案详解
- 电工层压材料生产项目初步设计
- 2024年安全员考试检测卷含答案详解(A卷)
- 2025焊工考试真题及参考答案详解【达标题】
- 2024-2025学年全国统考教师资格考试《教育教学知识与能力(小学)》模拟题库及答案详解【典优】
- 施工员试题附答案详解(A卷)
- 2025年执业药师继续教育考试题(有答案)
- 2025专升本综合提升测试卷附完整答案详解【历年真题】
- 2023年度中级软考高分题库含答案详解【考试直接用】
- 2025年职业卫生健康培训考试试题及解析答案
- 分家山林权协议书
- 餐饮业价格合理性监管
- 2023年CSP-J组(入门组)初赛真题(文末附答案)
- 基层工会经费收支管理政策解读
- 特殊使用级抗菌药物申请表
- 道路运输企业安全生产标准化考评
- 眩晕的中医辨证治疗
- 危大工程专项方案验收记录表(基坑、模版、脚手架)
- 2023年公共科考试:社区治理真题模拟汇编(共142题)
- (完整word版)HND商务文化与策略
- 大学生创新创业(微课版第3版)课件 第1、2章 了解创业规划你的职业生涯、创新与创新思维
评论
0/150
提交评论