版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java 编程基础Java的语言格式: 修饰符 class 类名程序代码java的程序语句必须要以英文的分号(;)来结束,但大括号除外。分号,总是放在语句的结尾处。Java程序的注释注释的作用:仅仅是为了说明程序代码的意思,为了给未来的自己或别人看的。注释的内容只是为了阅读程序方便,根本不执行。两种;单行注释 /注释内容多行注释/* 注释内容 */注释放在语句的结束部分后面。Java中的标识符类的名称可以由任意顺序的大小写字母,数字,下划线(_)和美元符号($)组成。不能以数字开头标识符的其中一个问题,关键字关键字指的是在JAVA语言中有特殊意义的词,不能做为名称来使用。Java中的常量程序里
2、面持续不变的值,或者说是产生后不能改变的数据。包括:整数类型常量,浮点类型常量,布尔类型常量12,2658,true(真)/false(假)布尔类型用来进行逻辑运算的,例如:我是中国人,运算的结果是true。整数类型常量中有一个类型叫长整型:即很长的整数类型,表示方法特别。即数字后面加上字母L。例L,指的就是一个长整数类型。300L浮点类型说白了就是小数,小数点后面的位数是有讲究的。浮点类型分为两种,一是单精度浮点类型,二是双精度浮点类型单精度类型在值的后面必须要加上F。例如:2.68f (F指的是英文FLOAT。单精度的意思)双精度类型在值的后面必须要加上D。例如:2.68D(D指的是英文D
3、OUBLE。双精度意思)如果一个小数,后面什么也没加。如。2.68,那么,这个小数默认为双精度类型。字符串常量和字符常量字符串常量是以一组双引号(“”)包含的值,例如:“hello”字符常量是以一组单引号()包含的值 例如:b变量及变量的作用域在程序运行时,系统会为程序分配内存空间,用来存储各种类型的数据,分配的内存空间要用一个标记符来标识,内存中的数据是可以改变的,所以叫变量。定义变量的标记符就叫变量名,而在内存中所加载的数据就是变量值。用一个变量定义一块内存空间以后,我们就可以用变量名来代表这块内存中的数据了,又因为内存中所存储的数据类型不同,所以又产生了各种不同类型的变量。int m=8
4、,n;变量类型 变量名=变量值;n=m*2;两个内存空间(几个变量名就是分配了几个内存空间),用来存储整数,格式见上面。定义变量的简单形式:变量类型 变量名;例如:int x; 整数类型(byte,short,int,long) 数值型 浮点类型(float,double) 基本数据类型 字符型(char) 布尔型(boolean) 整数类型的取值范围:byte 8位一个字节short 16位二个字节int 32位四个字节long 64位八个字节浮点类型取值范围:float 32位四个字节double 64位八个字节*只有数值型才有取值范围。类型的自动转换二个条件,一,两种类型兼容,都是数字类
5、型才可以,布尔和字符类型都不可以 二,原来的类型一定要小于换转后的类型。如:byte向int转换,反之,如:long向short类型的转换就不是自动转换了,而是强制类型转换。强制类型转换指的是将大的数据类型向小的数据类型的转换。公式:目标类型 变量=(目标类型)值 即: 小类型 变量名=(小类型)大类型的值byte a;int c;a=(byte)c;表达式数据类型的自动提升所谓的表达式就是加减乘除等运算式。一 所有byte型,short型,的值将被提升到int型二 如果运算式中其中一个操作数是long型,计算结果就是long型三 如果运算式中其中一个操作数是float型,计算结果就是floa
6、t型四 如果运算式中其中一个操作数是double型,计算结果就是double型变量的作用域一对大括号中间的部分就是一个代码块,代码块就决定了其中定义的变量的作用域。作用域决定了变量的“是否可见”及“生存范围”。局部变量在一个代码块内定义的变量称之为局部变量,局部变量在代码块被执行时创建,代码块结束时被销毁,*局部变量在进行取值操作前必须被初始化或进行过赋值操作,否则编译错误。例:int x; x=x+1; System.out.println(x);Java 中的运算符算术运算符运算符运算意思例如产生的结果+正号+33-负号b=4;-b-4+加9+918-减9-45*乘5*840/除12/34
7、%取余(取模)5%50+自增(前)a先自动加一,然后再把值赋给ba=2;b=+a;a=3;b=3;+自增(后)a=2;b=a+a=3;b=2;-自减(前)a=5;b=-a;A=4;b=4;-自减(后)a=5;b=a-;a=4;b=5;+字符串相连接“he”+”llo”“hello”赋值运算符赋值运算符是将一个值赋给一个变量,最常见的赋值运算符是“=”赋值运算符运算符运算符的意思例如运算的结果=赋值A=3;b=2A=3;b=2+=加等于A=3;b=2;a+=b(a=a+b)A=5;b=2;-=减等于A=3;b=2;a-=bA=1;b=2;*=乘等于A=3;b=2;a*=bA=6;b=2;/=除等
8、于A=3;b=2;a/=bA=1;b=2;%=余等于(模等于)A=3;b=2;a%=bA=1;b=2;逻辑运算符逻辑运算符用于对boolean 型结果的表达式进行运算,运算结果都是boolean类型,即只有两个结果,true 和 false.逻辑运算符运算符运算的意思例如运算的结果&And(与)False&truefalse|Or(或者)False|truetrueXor(异或)Truefalsetrue异或,只有当连接的两个布尔表达式的值不相同时,才返回true值如果两个都是true或都是false,结果将返回false值!Not(非,不是)!truefalse&And(短路和)False&
9、truefalse|Or(短路或)False|truetrue=比较是否等于X=3;x=3true程序的流程控制流程控制有三种结构:1顺序结构2选择结构3循环结构If语句小括号里面的内容必须是布尔表达式,只有当小括号里面的内容为true的时候,才会执行后面大括号里的语句块,小括号后面的大括号就是一个作用域。if条件语句第一种格式:if(条件语句)执行语句块第二种格式:if(条件语句)Else后面一定不能有条件语句。只能是前面有if字样,才可能有条件语句执行语句块1else执行语句块2对于ifelse格式,还有一种写法。变量=布尔表达式?语句1:语句2;y=3;x=5;第三种格式:if(条件语句
10、1)执行语句块1else if(条件语句2)执行语句块2.else if(条件语句n)执行语句块nelse执行语句块n+1if语句的嵌套,就是if语句里面还有if语句。表达式中的值一般为数字或变量,switch语句只有一组大括号Switch选择语句Switch(表达式)Case 取值1:语句块1Break表示终止程序运行。break;.Case 取值n: 语句块n break;default:语句块n+1break;while循环语句小括号内的条件表达式语句一定是布尔类型,即,只有两个值,true或falsewhile(条件表达式语句)执行语句循环是走到大括号结束后又回到大括号开始,并每次循环
11、都判断小括号内容是否为真,如果为真,就会再进入大括号内执行语句,只有小括号内的条件不满足时,才退出循环。所谓的“死循环”,就是在while后面的小括号内的条件永远满足,将会永远循环下去。While表达式的括号后一定不要加“;”错误如下:Int x=3;这个分号导致程序进入无限循环,不会报错While(x=3);System.out.println(“x=3”);Do while语句和while语句功能上差不多,它在执行完第一次循环后才判断条件表达式的值是否为真,如果为真,那么继续循环,否则,就退出循环。 do执行语句while(条件表达式语句);for循环基本格式:for(初始化表达式;循环条
12、件表达式;循环后的操作表达式)执行语句一进入循环便执行这条语句,通常为循环计数器设置初始值,同时,还定义循环计数器这个变量必须是布尔表达式,其值为true或false,循环每次都要检测这个表达式,只要其值为true,便重复执行循环。此语句在结束每次循环时执行,它通常为循环计数器I值递增1。For(int I=1;I=limit;I+)这是循环语句,也可以是多个语句所组成的语句块。Sum=sum+I;当I+不符合条件时,就退出循环,下次再进入时,计数器I又从头开始计数。Continue语句Continue语句只能出现在循环语句(while,do,for)的子语句块中,continue语句的作用是
13、跳过当前循环的剩余语句块,接着执行下一次循环。Break语句在使用循环语句的时候,只有循环条件表达式的值为假的时候才能结束循环,有的时候,如果想提前中断循环,就得向循环语句块内添加break语句。Break outside switch or loopBreak 语句只能放在SWITCH或循环里面,不能放在外面,否则不执行。数组为什么要学数组?由一个问题所引起的:假如要定义100个整型的变量,应该怎么做呢?Int x1;Int x2;-int x100;如果一下子定义很多个同样类型的变量,大到一定程度就会到无法完成的情况下,有一个办法。即数组。数组的一个重要的条件:必须是同样类型的变量。以下是
14、定义数组的内容:如果一次定义100个int型的变量。要定义的数组个数int x = new int100;固定关键字变量类型x指的是数组的名称变量的名称分别是x0,x1,.x99.重点:第一个变量名称是x0,最后一个变量名称是x99。这种定义变量的方式就是数组。其中x3 中括号内的数字3就是数组的下标,下标永远都是从0开始的。如果想从一个数组中求出所有的元素,可以用for循环来做。在java中,还可以用下面方式定义数组: int x;x=new int100;这两种定义数组的方式是完全一样的,只是习惯不同而已。数组的静态初始化在定义数组的同时就为数组中每个元素分配内存空间并赋值,就是数组的静态
15、初始化。int a=1,2,3,4;等号右边就是产生一个数组,这个数组有4个元素,这4个变量的取值分别是1,2,3,4,数组的长度等于右边中的元素个数。注意:声明数组时,不管怎么定义数组,都不能指定其长度,比如错误如下 :int a5;正确如下:int a a= new int5;数组的长度可以用一种特殊的写法来求出来。数组名不能加中括号。数组名.length使用数组的常见问题1 必须对数组引用变量赋于一个有效的数组对象(通过new产生的或用静态初始化产生的)后,才可以引用数组中的每个元素。Public class TestArrayPublic static void main(String
16、 args)Int a=nulla0=1;/此时,a0不可以赋值,因为数组a没有初始化。2 数组越界异常(ArrayIndexOutOfBoundsException).超过了数组的长度。二维数组定义的格式如下:int x=new int23;内层大括号代表行的所有值例:int xx=3,2,7,1,5,6;723561列行int xx注意:与一维数组一样,在声明多维数组时不能指定其长度,比如错误如下:声明数组的时候不能指定长度。int xx32=3,2,3,5,6,7/编译出错,函数通过距形,程序中每一段打印距形的代码,除了高和宽不一样外,其它地方都一样,这时,就可以把打印出矩形的代码作为子
17、程序单独从程序中提出来,并用一个“名称”来标记这段代码,以后再碰到要打印矩形时,直接调用这个“名称”就可以了,我们对打印矩形的程序代码只写一遍,而不用重复写很多次。函数的定义必须有三部分组成,格式如下:返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.)程序代码 return 返回值;在小括号内的定义的内容叫参数列表,有的函数不需要接收任何参数,即使这样,在定义函数时,也不能省略函数名后面的那对小括号,当函数不接收参数时,保留小括号中的内容为空,函数中的程序代码必须位于一对大括号之间,如果主程序要求函数返回一个结果值,比如,要将两个数相加的结果返回到调用程序中,就必须使用ret
18、urn语句后面跟上这个要返回的结果,return语句后可以跟上一个表达式,返回值将是表达式的运算结果,如果一个函数不需要返回值,可以省略最后的return语句,如果函数里没有return语句,则编译时系统会自动在函数的最后添加一个return;比如,打印矩形的问题,不用返回任何结果,那么,返回值类型一项应该如何填写呢?这种情况下,我们就用void作为返回值类型,意思是“不知道是什么类型,但是定义函数的时候又必须填写一个返回值类型,那就用void来顶吧。”方法名称:必须是由英文,数字,下划线_,或美元符$组成,开头不能是数字。严格区分大小写,如果有多个单词组成方法名称,第一个单词全小写,以后每个
19、单词的首字母要大写。函数的参数传递过程进入主程序 方法:getArea(int x,int y) 为x,y分配内存并传递值。返回结果Return x*y;x,y在内存中被释放掉。 X=3 int area=getArea(3,5);Y=5 程序继续执行参数的类型和个数必须与定义方法中的参数个数,类型一样。Java程序运行时会先找到这个程序的main方法,接着从main方法里面取出一条代码来执行,当执行到int area=getArea(3,5)这个语句时,程序会跳到getArea(int x,int y)这个方法的内部去执行,先把参数(3,5)分别赋值给(int x,int y)然后返回x*y
20、的结果,(retrun x*y)接着回到main方法里面,把结果赋值给整型变量area,这就是方法的参数传值的过程。在调用方法时,必须写上:方法名(实际参数1,实际参数2,);调用方法:(1)如果方法没有返回值或调用程序不关心方法的返回值,格式如下:方法名(实参1,实参2,.);例如:getArea(6,8);(2),如果调用程序需要方法的返回结果,则格式如下:变量=方法名(实参1,实参2,.);例如:int area=getArea(6,8);(3)对于有返回值的方法调用,也可以在程序中直接使用返回的结果。例如:System.out.println(“area is ”+ getArea(3
21、,4);在开发过程中调用方法只有以上三种情况。再没有其它调用的写法了。在编写方法时的格式:返回类型 方法名(形式参数1,形式参数2,)程序代码return 返回值;所谓实际参数:指的是在调用方法是要赋值的参数。所谓形式参数:指的是在定义方法时要赋值的变量。方法的重载方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或类型不同即可,在这种情况下,这个方法就叫被重载了(overloaded)。面向对象面向对象的编程思想是为了使在计算机语言中对事物的描述与现实世界中该事物的真实面目尽可能一致,类(Class)和对象(Object)就是面向对象方法在核心概念。类是对某一类事物
22、的描述,是抽象的,概念上的定义,对象是实际存在的该类事物的个体,因此,对象也称实例(Instance).比如家具和家具图纸。其中,家具图纸就是“类”,由这个图纸设计出来的每个家具就是对象,类是对象的属性和对象的行为,类是对象的模板,图纸。对象是类的一个实例(Instance)是一个实实在在的个体,一个类可以对应多个对象,把对象比作衣柜,就么类就是衣柜图纸,所以,面向对象程序设计的重点是对类的设计,不是对象的设计。同一个类产生出来的多个对象,刚开始的状态都应该是一样的,比如按某个衣柜图纸生产出的衣柜刚开始都是一样的,其中,某一个衣柜后来加一面镜子,不会影响到其它的衣柜,但如果,修改了衣柜的图纸,
23、就会影响到以后所生产的所有衣柜了。类的定义:类可以将数据和方法封装在一起,其中数据表示类的属性,方法表示类的行为,定义类就是要定义类的属性与行为(方法)例如:class Person/类名,如果由单词组成,那么,首字每必须大写,其它字母,小写。int age;* age=33/成员变量必须在定义的时候同时赋值,不能单独赋值,否则编译出错void shout()/大括号里面的内容就是函数要实现的功能,也叫代码块。System.out.println(“my age is ”+age);其中,定义了一个person类,这个类有一个属性age,一个方法shout,类的属性也叫类成员变量,类的方法也叫
24、类的成员方法(函数),一个类中的方法可以直接访问同类中任何成员(包括成员变量和成员方法)比如:shout方法可以直接访问同一个类中的age变量。如果一个方法中有与成员变量同名的局部变量,该方法中对这个变量的访问是局部变量,而不再是成员变量。例:class Personint age;/这是一个成员变量void shout()int age=60;/这是方法内部又重新定义的一个局部变量。System.out.println(“my age is ”+age);对象的产生与使用仅仅有设计图纸是不够的,只有产生了具体的衣柜才行,同样,要想实现类的属性和行为,必须创建具体的对象。要创建新的对象,需要使
25、用new关键字和想要创建对象的类名 如:Person p1 = new Person();等号左边以类名Person作为变量类型定义了一个变量p1.来指向等号右边通过new关键字创建的一个Person类的实例对象,变量p1就是对象的引用句柄,创建新的对象之后,就可以使用“对象名.对象成员”的格式,来访问对象的成员(包括属性和方法)。注意:一个方法内部的变量必须进行初始化赋值,否则编译无法通过。Class TestPersonPublic static void main(Sstring args)Person p1=new Person();Person p2=new Person();p1.
26、age = 26;p1.shout();p2.shout();类中定义的成员变量,在每个对象都被单独实例化,不会被所有的对象共享,改变了P1的属性,不会影响到P2的AGE属性,调用某个对象的方法时,该方法内部所访问的成员变量,是这个对象自身的成员变量。对象的比较有两种方式可用于对象间的比较,它们是“=”和“equals()”方法,“=”操作符用于比较两个变量的值是否相等,equals()方法用于比较两个对象的内容是否相等,“=”用于基本数据类型的变量比较的情况。例:重点:基本数据类型的比较要用“=”,对象间的比较要用“equals()”方法,class Comparepublic static
27、 void main(String args) String str1=new String(“abc”);String str2 = new String(“abc”);String str3=str1;If(str1=str2)System.out.println(“str1=str2”);ElseSystem.out.println(“str1!=str2”);If(str1=str3)System.out.println(“Str1=str3”);ElseSystem.out.println(“str1!=str3”);equals()方法是String类的一个成员方法,用于比较两个引
28、用变量所指向的对象内容是否相等,用法:对象1.equals(对象2)得到的结果是布尔类型,即不是true,就是false;匿名对象创建完对象,在调用该对象的方法时,也可以不定义对象的引用句柄,而直接调用这个对象的方法,这样的对象叫做匿名对象。代码如下:Person p1=new Person(); p1.shout();改成: new Person().shout();匿名对象有两种使用情况:1, 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。2, 将匿名对象作为实参传递给一个方法调用,比如:有一个get SomeOne 方法,要接收一个Person类对象作为参数,方法定义如下
29、:public static void getSomeOne(Person p)形式参数需要传递类型及一个变量名称。类类型也是一种类型。和int类型是一个道理构造函数1 构造方法的定义与作用例如:class Personpublic Person()System.out.println(“构造被调用了”);Private int age =10;Public void shout()System.out.println(“age is ”+age);class TestPersonpublic static void main(String args)Person p1=new Person(
30、);P1.shout();Person p2=new Person();P2.shout();Person p3=new Person();P3.shout();以上的Person()方法,被自动调用了,而且每创建一个Person对象,都会被自动调用一次,这就是构造方法。符合以下特征的方法就是构造方法:(以下三条必须同时满足)1 具有与类相同的名称2 不含有返回值(换句话讲,方法名前面不能有返回类型,void也不能有)3 不能在方法中用return语句返回一个值(方法里面不能写return语句,)构造方法非常有用,作用是为类的成员变量进行初始化工作,当一个类的对象刚产生时,这个类的构造方法就自
31、动被调用了,我们可以在这个方法中加入要完成初始化工作的代码,比如一个人出生就必须洗澡,可以在人的构造方法中加入洗澡的程序代码,这样,每个人一出生就自动完成洗澡,程序就不用在人出生时一个一个告诉他们要洗澡了。在构造方法里不含返回值的概念不同于void的,如:public void Person()这样的写法就不再是构造方法,而变成了普通方法,这是常犯的错误,在定义构造方法时加了“void”,结果是这个方法就不再被自动调用了。(构造方法是在对象一产生的时候就被自动调用了)构造方法的重载class Personprivate String name=”unknown”;private int age
32、=-1;public Person()System.out.println(“constructorl”);public Person(String n)name=n;System.out.println(“constructorl2”);System.out.println(“name is ”+name);public Person(String n,int a)name=n;age=a;System.out.println(constructorl3);System.out.println(“name and age is ”+name+”;”+age);public void shou
33、t()System.out.println(“me”);class TestPersonpublic static void main(String args)Person p1=new Person(); P1.shout();Person p2=new Person(“jack”);P2.shout();Person p3=new Person(“Tom”,18);P3.shout();上面定义了多个Person构造方法,这就是构造方法的重载,和一般的方法重载一样,它们具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用new关键字产生对象时,该调用哪个方法了。产生对象的格式是:n
34、ew 类名(参数列表)JAVA会根据在括号中传递的参数,自动选择相应的构造方法。重载构造方法可以完成不同的初始化操作。例如:p3=new Person(“tom”,18);此句话做这样几件事:创建指定类的新对象,在堆内存中为对象分配内存空间,并调用指定类的构造方法,最后将对象的首地址赋值给引用变量P3。构造方法重点需要注意的地方:1 在每个类里面,都至少有一个构造方法,如果没有在一个类里面去人为的定义构造方法,系统会自动为这个类产生一个默认的构造方法,这个默认的构造方法没有参数,在这个方法内部也没有任何代码。即什么也不做。例如:以下有两个类。第一个类class Person第二个类class
35、Personpublic Person()以上这两个类一模一样,没有区别。由于系统提供的默认构造方法往往不能满足需求,我们可以自己定义类的构造方法来满足需求,一旦编程人员为该类定义了构造方法,系统就不再提供默认的构造方法了。例如:class Personint age;public Person(int x)age=x;以上的类内就是自己定义了构造,默认构造就会消失。以下类是运行类。Class Test1Public static void main(String args)Person p=new Person();需要注意:只要定义有参数的构造方法,都需要再定义一个无参数的构造方法,否则,
36、就会经常碰到创建对象时的错误了。构造方法如果是私有的,就不可以被类的外面访问,可见,构造方法一般都是PUBLIC的。因为它们在对象产生时,会被系统自动调用。类的封装性为了实现良好的封装性,通过将类的成员变量声明为private,再通过public的方法对这个变量进行访问,对一个变量的操作,一般都有读取和赋值两个部分,分别定义两个方法来实现这两种操作,一个是getXxx()方法,(Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个变量赋值。外部调用者只能访问两个方法,不能直接访问成员变量age,我们通过将类的成员变量声明为私有的(private),
37、再提供一个或多个公有的(public)方法,来实现对这个私有的成员变量的访问和修改,这种方式就叫封装。为什么要封装呢?封装有什么用处?1, 隐藏类的实现细节2, 让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;3, 便于修改,增强代码的可维护性4, 可进行数据检查一个类通过就是一个小的功能模块,应该让模块仅仅公开必须要让外界知道的内容,而隐藏其他一切内容,在进行程序详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求高内聚(许多功能尽量在类的内部独立完成,不让外面干预),低耦合(提供给外部尽量少的方法调用)。This 引用句柄一
38、个对象中的一个成员方法,可以引用另外一个对象的成员。Class A String name;Public a(String x)Name =x;public void func1()System.out.println(“func1 是 ”+name);public void func2()A a2=new A(“a2”);A2.func1();class TestApublic static void main(String args)A a1=new A(“a1”);A1.func2();想问题1, 如果func2方法被调用,是不是一定要以“对象.func2”的方式进行呢?是的。换句话讲,
39、一定是事先有了一个存在的对象,func2被作为那个对象的方法使用。2, 在func2内部能引用别的对象,能不能在func2内部引用那个“事先存在并对func2进行调用”的对象呢?能,“事先存在并对func2进行调用的对象就叫func2所属的对象”在方法内部,是对象就可以调用,不区分是不是自己所属的那个对象。在func2中,怎么引用自己所属的那个对象?换句话讲,自己所属的那个对象的引用名称是什么,是a1吗?都不是,this 关键字在java中的作用是:在方法内部就是这个方法所属的对象的引用变量。例如:上例中,在func2中使用this关键字调用就等于用func2所属的那个对象来调用。This相当
40、于“我所属于的那个对象”。每个方法内部,都有一个this引用变量,指向调用这个方法的对象。一个类中的成员方法可以直接调用同类中的其它成员,例如上面:将this.func1()写成func1()效果是一样的,成员变量前也可以加this.意思与用法与成员方法一样。This看起来可有可无,但以下三种情况必须用到this关键字。1 想通过构造方法将外部传入的参数赋值给类的成员变量。但是呢。构造方法的形参与类的成员变量名相同;例: class PersonString name; Public Person(String name)name=name/分不清左右哪个是哪个,混了。/改成:this.nam
41、e=name2假如有一个容器类(只是类的名称),和一个组件类,在容器类的某个方法中要创建组件类的实例对象,而组件类的构造方法要接收一个代表其所在容器的参数。Class CT/容器类CM cm;/有一个组件类的对象cmPublic void addCM()/容器类的一个方法。cm=new CM(this);/创建了一个组件类对象,参数恰恰就是容器类对象。 class CM/组件类CT myc/类内也有一个容器类对象,myc public CM(CT c)/这是组件构造,用此构造产生对象时,要传入容器类对象。myc=c;3构造方法是在产生对象时被JAVA系统自动调用的,不能在程序中像调用其它方法一
42、样去调用构造方法,但可以在一个构造方法中调用其它重载的构造方法,不用构造方法名,而是用this(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。例:class Person String name;int age;public Person(String name)=name;public Person(String name,int age)this(name);this.age=age;static关键字静态变量我们在编写一个类时,本质上是在描述其对象的属性和行为。而没有产生实质上的对象时,程序是不会分配内存空间的。只有通过NEW关键字才会产生出对象,这时,系统
43、才会分配内存空间,方法也可以供给外部调用。有时候,希望无论是否产生对象或无论产生多少个对象的情况下。某些特定的数据在内存中只有一份。比如:王雷是个对象,有一个属性,年纪,一个方法,写字方法,满洁是另一个对象,有一个属性,年纪,一个方法,讲话方法,但是,无论是王雷还是满洁,都有一个共同的属性,即国别是中国人。那么,此二人共享国别这一属性。不必分别给此二人都单独分配一个国别属性的内存空间了。我们称这种共享变量为静态成员变量。在变量类型前面加上static 关键字即可。静态变量在内存空间中只有一份,所有对象都共享这一份变量。可以直接使用类名来访问静态变量,还可以在类的非静态方法中像访问其它非静态变量
44、一样去访问静态变量,甚至不需要产生类的实例对象,只需要类名就可以引用了。*:不能把任何方法体内的变量声明为静态;例如下面是错误的:fun()/方法 static int I=0;/错误,不能方法里面的变量声明成静态的。静态方法有时候也希望不必创建对象就可以调用某个方法,换句话讲:使方法不必和对象绑在一起,要想实现这种效果,只需要在类中定义的方法前面加上satic关键字即可。我们称这种方法为静态成员方法。可以直接用类名来调用静态成员方法,当然也可以用类的对象来访问静态成员方法。还可以在普通方法中调用静态方法。技术名词:类的静态成员又叫做“类成员”,对于静态成员变量,叫“类属性”,对于静态成员方法
45、,叫“类方法”。采用static关键字说明类的属性和方法不属于类的某个实例对象。比如前面反复用到的System.out.print()语句,其中,System是一个类名,out是System类的一个静态成员变量,print()方法则是out所引用的对象的方法。(回头看类库来证明)在使用类的静态方法时,要注意的问题:(重要)1, 在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),不能直接访问类中的非静态成员。这是因为,对于非静态的变量和方法,需要先创建类的对象后才可使用,而静态方法在使用前不用创建任何对象。2, 静态方法不能以任何方式引用this和super(super在后面讲)关
46、键字,道理与上面一样,静态方法在使用前不用创建任何对象,当静态方法被调用时,this所引用的对象根本没产生。静态代码块一个类中可以使用不包含在任何方法体中的静态代码块(static block),当类被载入时,静态代码块就被执行,且只被执行一次,静态代码块经常用来进行类属性的初始化;在类中写法: staticcode 注意,不能将静态代码块写在方法里,要写在类里面。静态代码块优先于构造方法,在构造方法前执行。内部类在一个类内部定义类,就是嵌套类(nested classes)也称为内部类,内置类,内部类可以访问嵌套它的类的成员。包括private成员。但是,外部类的成员却不能访问内部类成员。换
47、句话;内可访外,外部不可以访问内部。类中定义的内部类A类里定义了一个B类,那么B为A所知,却不被A的外面所知。与普通类不同的是权限问题;即,普通类的权限只有两个,public和friendly(什么也不写),而内部类可以声明成private和protected;为什么要搞出内部类内部类使得程序代码更为紧凑,程序更具有模块化,当一个类中的程序代码要用到另外一个类的实例对象时,而另外一个类中的程序代码又要访问第一个类中的成员,将另外一个类做成第一个类的内部类,程序代码就更容易编写,这种情况在实际应用中非常多。思考:如何将例子中的Inner类改写成Outer类的外部去实现。如果方法的局部变量(方法的
48、形参也是局部变量),内部类的成员变量,外部类的成员变量重名,应该按如下方式来明确指定各变量。例:public class Outerprivate int size;public class Innerprivate int size;public void doStuff(int size)size+;/引用的是形参this.size+;/引用的是Inner类中的成员变量Outer.this.size+/引用的Outer类中的成员变量内部类如何被外部类引用内部类也可以通过创建对象从外部类之外被调用,只要将内部类声明成public就可以了。class Outer private int siz
49、e=10;public class Innerpublic void doStuff()System.out.println(+size);public class TestInnerpublic static void main(String args)Outer outer = new Outer();/创建一个外部类的对象,Outer.Inner inner=outer.new Inner();/通过上一个外部类来创建它里面的内部类对象的作法/外部类.内部类 引用名称=外部类对象.new 内部类构造方法();inner.doStuff();内部类Inner被声明为public,在外部就可
50、以创建其外部类Outer的实例对象,再通过outer类的实例对象创建Inner类的实例对象,就可以使用Inner类的实例对象来调用内部类Inner中的方法了。方法中定义的内部类内部类并非只能在类里面定义,也可以在几个程序块的范围内定义,指的是在方法中或在for循环体内,都可以定义内部类,例如:class Outer int outer_i=100;void test()for(int i=0;i5;i+)class Innervoid display()System.out.println(display:outer_i=+outer_i);/end classInner inner=new
51、Inner();inner.display();/end for/end test();class InnerClassDemopublic static void main(String args)Outer outer=new Outer();outer.test();类的继承面向对象三大特征,继承,封装,多态。继承是能够使用以前创造的类的方法和属性,通过简单的代码来构造功能强大的类,节省开发时间,可以减少代码出错机会。继承的特点代码如下:public class Person public String name;public int age;public String getInfo()class Studentpublic String name;public int age;public Strin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年东南亚海盗活动新趋势下的船舶安防措施
- 工程施工协议书范文
- 2025湖泊治理(生态修复)合同
- 浙江2026年高级会计师《高级会计实务》历年真题汇编
- 2026年消防有毒气体探测系统施工方案
- 2026年水泥路面施工方案及切缝养护要求
- 体温单绘制规范
- 海南2026年注册会计师CPA《会计》考试题库
- 腹股沟斜疝护理查房
- 2026年国家公务员考试《申论》真题回忆版
- 小儿急性淋巴细胞白血病诊断治疗进展
- DZ∕T 0305-2017 天然场音频大地电磁法技术规程(正式版)
- 《光伏发电工程可行性研究报告编制规程》(NB/T32043-201)中文版
- 教授的研究生手册
- 儿童珠绣手工课件
- 大连理工大学经济学原理试卷与参考答案
- 咯血临床思维及诊断治疗课件
- 建立模糊专家系统实验报告
- 医院科室人员信息一览表
- 家庭社会工作PPT完整全套教学课件
- 先导式减压阀的设计方案
评论
0/150
提交评论