Java基础学习笔记_第1页
Java基础学习笔记_第2页
Java基础学习笔记_第3页
Java基础学习笔记_第4页
Java基础学习笔记_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(一)Java编程基础1.Java语言的跨平台是通过针对不同的操作系统,提供不同的jvm来保证的。2.JDK,JRE,JVM的作用及关系1)作用JVM:保证Java语言跨平台JRE:Java程序的运行环境JDK:Java程序的开发环境2)关系JDK:JRE+工具JRE:JVM+类库3.为了使程序能够独立运行,必须定义main方法main方法是程序的入口被jvm自动调用4.原码,反码,补码正数的原,反,补码都相同负数的反码为原码符号位不变,按位取反负数的补码为原码符号位不变,按位取反,末位加一5.关键字1)被Java语言赋予特定含义的单词2)特点:全部小写。3)注意事项:A:goto和const

2、作为保留字存在。B:类似于Notepad+这样的高级记事本会对关键字有特殊颜色标记6.标识符1)就是给类,接口,方法,变量等起名字的字符序列2)组成规则:A:英文大小写字母B:数字C:$和_3)注意事项:A:不能以数字开头B:不能是java中的关键字C:Java语言严格区分大小写7.常见的命名规则(见名知意):username,password等A:包名全部小写单级包:小写举例:cn,com多级包:小写,并用.隔开举例:com.baidu,com.renrenB:类名或者接口一个单词:首字母大写举例:Student,Demo多个单词:每个单词首字母大写举例:HelloWorld,Student

3、NameC:方法或者变量一个单词:首字母小写举例:name,main多个单词:从第二个单词开始,每个单词首字母大写举例:studentAge,showAllNames()D:常量全部大写一个单词:大写举例:PI多个单词:大写,并用_隔开举例:STUDENT_MAX_AGE8.注释1)就是对程序进行解释说明的文字2)分类:A:单行注释/ 注释内容B:多行注释/* 注释内容 */C:文档注释/* 注释内容 */D:单行注释可以嵌套使用,但是多行注释不可以嵌套使用9.常量1)在程序执行的过程中,其值不发生改变的量2)分类:A:字面值常量B:自定义常量3)字面值常量A:字符串常量 "hell

4、o"B:整数常量12,23C:小数常量12.345D:字符常量'a','A','0'E:布尔常量true,falseF:空常量null4)在Java中针对整数常量提供了四种表现形式A:二进制由0,1组成。以0b开头。B:八进制由0,1,.7组成。以0开头。C:十进制由0,1,.9组成。整数默认是十进制。D:十六进制 由0,1,.9,a,b,c,d,e,f(大小写均可)组成。以0x开头。10.进制转换1)其他进制到十进制系数:就是每一个位上的数值基数:x进制的基数就是x权:对每一个位上的数据,从右向左,并且从0开始编号,对应的编号就是该数

5、据的权。结果:系数*基数权次幂之和。2)十进制到其他进制除基取余,直到商为0,余数反转。3)进制转换的快速转换法A:十进制和二进制间的转换8421码。B:二进制到八进制,十六进制的转换11.变量1)在程序的执行过程中,其值在某个范围内可以发生改变的量2)变量的定义格式:A:数据类型 变量名 = 初始化值;B:数据类型 变量名;变量名 = 初始化值;使用变量的时候要注意的问题:A:作用域变量定义在哪个大括号内,它就在哪个大括号内有效。并且,在同一个大括号内不能同时定义两个同名的变量。B:初始化值没有初始化值的变量不能直接使用。你只要在使用前给值就行,不一定非要在定义的时候立即给值。推荐在定义的时

6、候给值。注意:成员变量有默认值,而局部变量没有,所以必须首先初始化C:在一行上建议只定义一个变量可以定义多个,但是不建议/int f,int g; /错误,可以写为int f, g;/int h; int i; /正确12.数据类型1)Java是一种强类型语言,针对每种数据都提供了对应的数据类型。2)分类:A:基本数据类型:4类8种B:引用数据类型:类,接口,数组,枚举,注解。3)基本数据类型A:整数占用字节数byte1short2int 4long8B:浮点数float4double8C:字符char2D:布尔boolean1注意:整数默认是int类型,浮点数默认是double类型。长整型后

7、缀用L或者l标记。建议使用L。单精度浮点数用F或者f标记。建议使用F。13.数据类型转换1)boolean类型不参与转换2)自动类型转换A:从小到大B:byte,short,char - int - long - float - doubleC:byte,short,char之间不相互转换,直接转成int类型参与运算。3)强制类型转换A:从大到小B:可能会有精度的损失,一般不建议这样使用。C:格式:目标数据类型 变量名 = (目标数据类型) (被转换的数据);4) 表达式类型自动提升byte b1 = 3;byte b2 = 4;byte b3 = b1+b2;程序报错:因为变量在表达式中进行

8、运算时,也有可能发生自动类型转换,这就是表达式数据类型的自动提升,如一个byte类型的变量在运算期间类型会自动提升为int类型。数据类型补充问题:a.在定义Long或者Float类型变量的时候,要加L或者f。 byte,short在定义的时候,他们接收的其实是一个int类型的值。 这个是自己做了一个数据检测的,如果不在它们的范围内,就报错。 b.byte值的问题byte b1 = 127;byte b2 = (byte)128; /-128byte b3 = (byte)129; /-127byte b4 = (byte)130; /-126byte的范围:-128 127 128:10000

9、000-128:10000000 (这里的1即是符号位,也是数值位)c.数据类型转换之默认转换byte,short,char - int - long - float - doublelong: 8个字节float:4个字节A:它们底层的存储结构不同。B:float表示的数据范围比long的范围要大long:263-1float:3.4*1038 > 2*1038 > 2*838 = 2*2338 = 2*2114 > 263-1d.Java语言中的字符char可以存储一个中文汉字吗?为什么呢?可以。因为java语言中的字符占用两个字节。Java语言采用的是Unicode编码

10、。14.算术运算符:+,-,*,/,%,+,-注意事项:A:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型B:/获取的是除法操作的商,%获取的是除法操作的余数+,-运算符的使用:单独使用:放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)参与运算使用:放在操作数的前面,先自增或者自减,然后再参与运算。放在操作数的后面,先参与运算,再自增或者自减。作用:就是对变量进行自增1或者自减1。+的用法:A:加法B:正号C:字符串连接符比较运算符A:=,!=,>,>=,<,<=B:无论运算符两端简单还是复杂最终结果是boolean类型。C:千万不要把=写

11、成了=逻辑运算符:&,|,!,&&,|特点:逻辑运算符一般用于连接boolean类型的表达式或者值。常用结论:&逻辑与:有false则false。|逻辑或:有true则true。逻辑异或:相同为false,不同为true。举例:情侣关系。!逻辑非:非false则true,非true则false。特点:偶数个不改变本身。&&和&的区别? 同理|和|的区别?A:最终结果一样。B:&&具有短路效果。左边是false,右边不执行。开发中常用的逻辑运算符:&&,|,!位运算符:&,|,<<,>

12、;>,>>>注意:要做位运算,首先要把数据转换为二进制。的特点:一个数据对另一个数据位异或两次,该数本身不变。<<:左移左边最高位丢弃,右边补齐0>>:右移最高位是0,左边补齐0;最高为是1,左边补齐1>>>:无符号右移 无论最高位是0还是1,左边补齐0表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。A:算术表达式:a + bB:比较表达式:a = b15.键盘录入基本步骤如下:A:导包格式:import java.util.Scanner; 位置:在class上面。B:创建键盘录入对象格式:Scanner

13、sc = new Scanner(System.in);C:通过对象获取数据格式:int x = sc.nextInt();16.流程控制语句1)顺序结构 从上往下,依次执行2)选择结构按照不同的选择,执行不同的代码3)循环结构 做一些重复的代码17.if语句1)三种格式A:格式1if(比较表达式) 语句体;执行流程:判断比较表达式的值,看是true还是false如果是true,就执行语句体如果是false,就不执行语句体B:格式2if(比较表达式) 语句体1;else 语句体2;执行流程:判断比较表达式的值,看是true还是false如果是true,就执行语句体1如果是false,就执行语句

14、体2C:格式3if(比较表达式1) 语句体1;else if(比较表达式2)语句体2;.else 语句体n+1;执行流程:判断比较表达式1的值,看是true还是false如果是true,就执行语句体1如果是false,就继续判断比较表达式2的值,看是true还是false如果是true,就执行语句体2如果是false,就继续判断比较表达式3的值,看是true还是false.如果都不满足,就执行语句体n+12)注意事项A:比较表达式无论简单还是复杂,结果是boolean类型B:if语句控制的语句体如果是一条语句,是可以省略大括号的;如果是多条,不能省略。建议:永远不要省略。C:一般来说,有左大括

15、号,就没有分号,有分号,就没有左大括号。D:else后面如果没有if,是不能出现比较表达式的。E:三种if语句其实都是一个语句,只要有一个执行,其他的就不再执行。3)三元运算符和if语句第二种格式的关系所有的三元运算符能够实现的,if语句的第二种格式都能实现。反之不成立。如果if语句第二种格式控制的语句体是输出语句,就不可以。因为三元运算符是一个运算符,必须要有一个结果返回,不能是一个输出语句。18.switch语句格式:switch(表达式) case 值1:语句体1;break;case 值2:语句体2;break;.default:语句体n+1;break;switch语句的注意事项:A

16、:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的B:default可以省略吗?答:可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。特殊情况:如果case就可以把值固定。A,B,C,DC:break可以省略吗?可以省略,但是结果可能不是我们想要的。会出现一个现象:case穿透。最终我们建议不要省略D:default一定要在最后吗?不是,可以在任意位置。但是建议在最后。无论default语句在前还是在后,default语句都是最后执行E:switch语句的结束条件a:遇到break就结束了b:执行到末尾就结束了if语句和switch语句的区别?if语句:A

17、:针对结果是boolean类型的判断B:针对一个范围的判断C:针对几个常量值的判断switch语句:针对几个常量值的判断Switch语句中的case穿透(case语句后面没有break语句)switch表达式:这个地方的取值是有限定的byte,short,int,charJDK5以后可以是枚举JDK7以后可以是字符串19.循环语句1)有三种:for,while,do.while2)for循环语句A:格式for(初始化语句;判断条件语句;控制条件语句)循环体语句;B:执行流程:a:执行初始化语句b:执行判断条件语句如果这里是true,就继续如果这里是false,循环就结束c:执行循环体语句d:执

18、行控制条件语句e:回到bC:注意事项a:判断条件语句无论简单还是复杂,结果是boolean类型b:循环体语句如果是一条,可以省略大括号,但是不建议c:有分号就没有左大括号,有左大括号就没有分号3)while循环A:基本格式while(判断条件语句) 循环体语句;扩展格式:初始化语句;while(判断条件语句)循环体语句;控制条件语句;通过查看这个格式,我们就知道while循环可以和for循环等价转换。B:for和while的区别a:使用上的区别for语句的那个控制条件变量,在循环结束后不能再次使用了。而while的可以继续使用。b:理解上的区别for适合于一个范围的判断while适合循环次数不

19、明确的4)do.while循环A:基本格式do 循环体语句;while(判断条件语句);扩展格式:初始化语句;do 循环体语句;控制条件语句;while(判断条件语句);通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。while循环和for循环的区别?使用区别:如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。建议使用for循环。因为变量及早的从内存中消失,可以提高内存的使用效率。 其实还有一种场景的理解:如果是一个范围的,用for循环非常明确。如果是不明确要做多少次,用while循环较为合适。那么,我们一般使用哪种循环呢?优先考虑for,其次考

20、虑while,最后考虑do.while5)循环使用的注意事项(死循环)A:一定要注意修改控制条件,否则容易出现死循环。B:两种最简单的死循环格式a:while(true).b:for(;)6)三种循环的区别A:do.while循环至少执行一次循环体B:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体20.控制跳转语句1)break:中断的意思A:用在循环和switch语句中,离开此应用场景无意义。B:作用a:跳出单层循环b:跳出多层循环,需要标签语句的配合2)continue:继续A:用在循环中,离开此应用场景无意义。B:作用是跳出单层循环的一次,可以继续下一次3)

21、return:返回A:用于结束方法的。B:一旦遇到return,程序就不会在继续往后执行。(二)方法方法:完成特定功能的代码块。1)方法定义格式:修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2.) 方法体语句;return 返回值; 2)要想写好一个方法,就必须明确两个东西:A:返回值类型即结果的数据类型B:参数列表你要传递几个参数,以及每个参数的数据类型3)方法的注意事项:A:方法不调用不执行B:方法与方法是平级关系,不能嵌套定义C:方法定义的时候参数之间用逗号隔开D:方法调用的时候不用再传递数据类型E:如果方法有明确的返回值,一定要由return带回一个值4)void类

22、型返回值的方法调用:单独调用输出调用(错误)赋值调用(错误)5)方法重载:在同一个类中,方法名相同,参数列表不同。与返回值类型无关。参数列表不同包括:A:参数个数不同B:参数类型不同(三)数组数组:存储同一种数据类型的多个元素的容器。1.定义格式:A:数据类型 数组名;B:数据类型 数组名;举例:A:int a; 定义一个int类型的数组a变量B:int a; 定义一个int类型的a数组变量注意:效果可以认为是一样的,都是定义一个int数组,但是念法上有些小区别。推荐使用第一种。2.如何对数组进行初始化呢?A:何谓初始化呢? 就是为数组开辟内存空间,并为每个数组元素赋予初值B:有几种方式呢?a

23、:动态初始化 只指定长度,由系统给出初始化值b:静态初始化 给出初始化值,由系统决定长度动态初始化的格式:数据类型 数组名 = new 数据类型数组长度;举例:int arr = new int3;如何获取数组中的元素呢?通过:数组名索引索引其实就是每个元素的编号,从0开始,最大索引是数组的长度-1。int arr = new int3;左边:int:说明数组中的元素的数据类型是int类型:说明这是一个数组arr:是数组的名称右边:new:为数组分配内存空间。int:说明数组中的元素的数据类型是int类型:说明这是一个数组数组元素初始化值:当数组被成功创建以后,数组元素会被自动赋予一个初始化值

24、,根据元素类型不同,默认初始化值也不相同。数据类型默认初始化值byte,short,int,long0float,double0.0char 一个空字符,即u0000boolean false引用数据类型null,表示变量不引用任何对象3. 数组长度,其实也就是数组中元素的个数4.数组的动态初始化:定义数组时,只指定数组长度,由系统为数组元素赋初值int arr = new int10;5.数组的静态初始化:定义数组的同时就为数组的每个元素赋值。格式:数据类型 数组名 = new 数据类型元素1,元素2,;简化格式:数据类型 数组名 = 元素1,元素2,;举例:int arr = new in

25、t1,2,3;简化后:int arr = 1,2,3;注意事项:不要同时动态和静态进行。如下格式:int arr = new int31,2,3; /错误6.数组操作的两个常见小问题:ArrayIndexOutOfBoundsException:数组索引越界异常原因:你访问了不存在的索引。NullPointerException:空指针异常原因:数组已经不再指向堆内存了。而你还用数组名去访问元素。7. 数组遍历:就是依次输出数组中的每一个元素。8. length属性:数组提供了一个属性length,用于获取数组的长度。格式:数组名.length知识拓展:Java的内存分配A:栈 存储局部变量B

26、:堆 存储所有new出来的C:方法区D:本地方法区(系统相关)E:寄存器(CPU使用)注意:a:局部变量 在方法定义中或者方法声明上定义的变量。b:栈内存和堆内存的区别栈:数据使用完毕,就消失。堆:每一个new出来的东西都有地址每一个变量都有默认值byte,short,int,long 0float,double 0.0char 'u0000'boolean false引用类型 null数据使用完毕后,在垃圾回收器空闲的时候回收。9.二维数组:就是元素为一维数组的一个数组。格式:A:数据类型 数组名 = new 数据类型mn;B:数据类型 数组名 = new 数据类型m;C:数

27、据类型 数组名 = new 数据类型.,.,.;D:数据类型 数组名 = .,.,.;格式1:数据类型 数组名 = new 数据类型mn;m:表示这个二维数组有多少个一维数组。n:表示每一个一维数组的元素有多少个。注意:A:以下格式也可以表示二维数组a:数据类型 数组名 = new 数据类型mn;b:数据类型 数组名 = new 数据类型mn;B:注意下面定义的区别int x;int y;int x,y;int x;/定义一个一维数组int y;/定义一个二位数组int x,y;/定义一个一维数组,一个二维数组格式2:数据类型 数组名 = new 数据类型m;m:表示这个二维数组有多少个一维数

28、组。列数没有给出,可以动态的给。这一次是一个变化的列数。格式3:基本格式:数据类型 数组名 = new 数据类型元素1,元素2.,元素1,元素2.,元素1,元素2.;简化格式:数据类型 数组名 = 元素1,元素2.,元素1,元素2.,元素1,元素2.;举例:int arr = 1,2,3,4,5,6,7,8,9;int arr = 1,2,3,4,5,6;10.Java中的参数传递问题:Java中只有值传递。基本类型:形式参数的改变对实际参数没有影响。引用类型:形式参数的改变直接影响实际参数。(四)面向对象现实世界中是如何描述一个事物的呢?举例:学生姓名,年龄,性别.学习,吃饭,睡觉属性:该事

29、物的描述信息行为:该事物能够做什么我们学习编程语言,是为了模拟现实世界中的事物。而我们学习的编程语言Java中最基本的单位是:类。所以,我们就应该把事物通过类来体现出来:由此,我们就得到了现实世界中的事物和类的对应关系:事物:类:属性成员变量行为成员方法类:是一组相关的属性和行为的集合。是一个抽象的概念。对象:是该类事物的具体表现形式。具体存在的个体。类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。举例:学生:类小明:对象1.面向对象思想面向对象是基于面向过程的编程思想。面向过程:强调的是每一个功能的步骤面向对象:强调的是对象,然后由对象去调用功能2.面向对象的思想特点A:是一

30、种更符合我们思想习惯的思想B:可以将复杂的事情简单化C:将我们从执行者变成了指挥者3.面向对象:我们怎么才能更符合面向对象思想呢?A:有哪些类呢?B:每个类有哪些东西呢?C:类与类直接的关系是什么呢?4.开发,设计,特征面向对象开发:就是不断的创建对象,使用对象,指挥对象做事情。面向对象设计:其实就是在管理和维护对象之间的关系。面向对象特征封装(encapsulation)继承(inheritance)多态(polymorphism)5.面向对象思想:在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系。封装性:封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外

31、界知道具体实现细节,这就是封装思想。继承性:继承性主要描述的是类与类之间的关系,通过继承,可以在无须重新编写原有类的情况下,对原有类的功能进行扩展。多态性:多态性指的是在程序中允许出项重名现象,它指在一个类中定义的属性和方法被其他类继承后,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。6.类的使用:如何使用呢?创建对象使用。如何创建对象呢?格式:类名 对象名 = new 类名();如何使用成员变量呢?对象名.变量名如何使用成员方法呢?对象名.方法名(.)7. 成员变量,局部变量定义在类中的变量被称为成员变量,定义在方法中的变量被称为局部变量。成

32、员变量和局部变量的区别A:在类中的位置不同成员变量:在类中方法外局部变量:在方法定义中或者方法声明上B:在内存中的位置不同成员变量:在堆内存局部变量:在栈内存C:生命周期不同成员变量:随着对象的创建而存在,随着对象的消失而消失局部变量:随着方法的调用而存在,随着方法的调用完毕而消失D:初始化值不同成员变量:有默认初始化值局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。注意事项:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。实例化对象时,Java虚拟机会自动为成员变量进行初始化,针对不同类型的成员变量,Java虚拟机会赋予不同的初始值,如下所示:成员变量类型

33、初始值成员变量类型初始值byte,short,int0char空字符long0Lbooleanfalsefloat0.0F引用数据类型nulldouble0.0D8.类作为形式参数的问题?基本类型:形式参数的改变不影响实际参数引用类型:形式参数的改变直接影响实际参数如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。9.匿名对象匿名对象:就是没有名字的对象。匿名对象的应用场景:A:调用方法,仅仅只调用一次的时候。注意:调用多次的时候,不适合。那么,这种匿名调用有什么好处吗?有,匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。B:匿名对象可以作为实际参数传递10.

34、封装封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。1)隐藏实现细节,提供公共的访问方式2)好处:A:隐藏实现细节,提供公共的访问方式B:提高代码的复用性C:提高代码的安全性3)设计原则把不想让外界知道的实现细节给隐藏起来,提供公共的访问方式4)private是封装的一种体现。11.private关键字1)私有的意思,可以修饰成员变量和成员方法2)特点:被private修饰后的成员只能在本类中被访问3)private的应用:A:把成员变量用private修饰B:提供对应的getXxx()和setXxx()方法12.this关键字1)是当前类的对象引用。简单的记,它就代表当前类的一个

35、对象。记住:哪个对象调用方法,该方法内部的this就代表那个对象2)this的应用场景:A:解决了局部变量隐藏成员变量的问题B:this还有其他应用。3) this关键字的常见用法A:通过this关键字可以明确地去访问一个类的成员变量,解决与局部变量名称冲突问题。B:通过this关键字调用成员方法。C:构造方法是在实例化对象时被Java虚拟机自动调用的,在程序中不能像调用其它方法一样调用构造方法,但可以在一个构造方法中使用“this(参数1,参数2.);”的形式来调用其他的构造方法。4)使用this调用类的构造方法时,需要注意:A:只能在构造方法中使用this调用其它的构造方法,不能在成员方法

36、中使用。B:在构造方法中,使用this调用构造方法的语句必须位于第一行,且只能出现一次。C:不能在一个类的两个构造方法中使用this互相调用。13.super关键字:用于访问父类的成员。1)使用super关键字访问父类的成员变量和成员方法。具体格式如下:super.成员变量;super.成员方法(参数1,参数2,.);2)使用super关键字访问父类的构造方法。具体格式如下:Super(参数1,参数2,.);注意:通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。3) 在子类的构造方法中一定会调用父类的某个构造方法。如果没有指定,自动调用父类无参的构造方法。4

37、)this和super的区别?分别是什么呢?this代表本类对象的引用。super代表父类存储空间的标识(可以理解为父类引用,可以操作父类的成员)怎么用呢?A:调用成员变量this.成员变量 调用本类的成员变量super.成员变量 调用父类的成员变量B:调用构造方法this(.)调用本类的构造方法super(.)调用父类的构造方法C:调用成员方法this.成员方法 调用本类的成员方法super.成员方法 调用父类的成员方法14.构造方法1)作用:用于对对象的数据进行初始化2)格式:A:方法名和类名相同B:没有返回值类型,连void都不能有C:没有返回值思考题:构造方法中可不可以有return语

38、句呢?可以。而是我们写成这个样子就OK了:return;其实,在任何的void类型的方法的最后你都可以写上:return;3)构造方法的注意事项A:如果我们没写构造方法,系统将提供一个默认的无参构造方法B:如果我们给出了构造方法,系统将不再提供默认构造方法如果这个时候,我们要使用无参构造方法,就必须自己给出。推荐:永远手动给出无参构造方法。4)给成员变量赋值的方式A:setXxx()B:带参构造方法5)标准案例class Student private String name;private int age;public Student()public Student(String name,

39、int age) = name;this.age = age;public String getName() return name;public void setName(String name) = name;public int getAge() return age;public void setAge(int age) this.age = age;/测试:public class StudentDemo public static void main(String args) /方式1Student s1 = new Student();s1

40、.setName("蒙蒙");s1.setAge(18);System.out.println(s1.getName()+"-"+s1.getAge();/方式2Student s2 = new Student("亮亮",20);System.out.println(s2.getName()+"-"+s2.getAge();6)代码:Student s = new Student();做了哪些事情?把Student.class文件加载到内存在栈内存为s开辟空间在堆内存为学生对象申请空间给学生的成员变量进行默认初始化

41、。null,0给学生的成员变量进行显示初始化。蒙蒙,18通过构造方法给成员变量进行初始化。亮亮,20对象构造完毕,把地址值赋给s变量15.类的组成:成员变量,成员方法,构造方法。变量什么时候定义为成员变量:如果这个变量是用来描述这个类的信息的,那么,该变量就应该定义为成员变量。变量到底定义在哪里好呢?变量的范围是越小越好。因为能及时的被回收。16.main方法的格式讲解:public static void main(String args) .public:公共的,访问权限是最大的。由于main方法是被jvm调用,所以权限要够大。static:静态的,不需要创建对象,通过类名就可以访问。方便

42、jvm的调用。void:因为我们曾经说过,方法的返回值是返回给调用者,而main方法是被jvm调用。你返回内容给jvm没有意义。main:是一个常见的方法入口。我见过的语言都是以main作为入口。String args:这是一个字符串数组。值去哪里了?这个东西到底有什么用啊?怎么给值啊?这个东西早期是为了接收键盘录入的数据的。格式是:java MainDemo(类名) hello(参数1) world(参数2) java(参数3)17. static关键字1)可以修饰成员变量,成员方法以及代码块等静态变量:数据在内存中只有一份,而且能被一个类的所有实例对象所共享,可以使用“类名.变量名”的形式

43、来访问。静态方法:方法不必和对象绑在一起。通过“类名.方法名()”的形式来访问。也可以通过类的实例对象来访问。静态代码块:类被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块只执行一次。在程序中,通常会使用静态代码块来对类的成员变量进行初始化。2)static的特点:A:随着类的加载而加载B:优先于对象存在C:被类的所有对象共享举例:咱们班级的学生应该共用同一个班级编号。其实这个特点也是在告诉我们什么时候使用静态?如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。举例:饮水机(用静态修饰)水杯(不能用静态修饰)D:可以通过类名调用其实它本身也可以通过对象名调用。推荐使用类

44、名调用。静态修饰的内容一般我们称其为:与类相关的,类成员E:不能用于修饰局部变量,编译报错。静态的内存图:静态的内容在方法区的静态区3)静态变量和成员变量的区别A:所属不同静态变量:属于类,类变量成员变量:属于对象,对象变量,实例变量B:内存位置不同静态变量:方法区的静态区成员变量:堆内存C:生命周期不同静态变量:静态变量是随着类的加载而加载,随着类的消失而消失成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失D:调用不同静态变量:可以通过对象名调用,也可以通过类名调用成员变量:只能通过对象名调用4)static关键字注意事项A:在静态方法中是没有this关键字的如何理解呢?静态是

45、随着类的加载而加载,this是随着对象的创建而存在。静态比对象先存在。B:静态方法只能访问静态的成员变量和静态的成员方法5)静态方法和非静态方法静态方法:成员变量:只能访问静态变量成员方法:只能访问静态成员方法非静态方法:成员变量:可以是静态的,也可以是非静态的成员方法:可是是静态的成员方法,也可以是非静态的成员方法。简单记:静态只能访问静态。注意事项:在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。18.final关键字1)final关键字可用于修饰类,变量和方法,它是“这是无法改变的”或者

46、“最终”的含义,因此被final修饰的类,变量和方法将具有如下特性:A:final修饰的类不能被继承B:final修饰的方法不能被子类重写C:final修饰的变量(成员变量和局部变量)是常量,只能赋值一次。常量:A:字面值常量"hello",10,trueB:自定义常量final int x = 10;注意:使用final关键字修饰成员变量时,虚拟机不会对其进行初始化。因此使用final修饰成员变量时,需要在定义变量的同时赋予一个初始值。19.抽象类Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用abstract关键字来修饰。当一个类包含了

47、抽象方法,该类必须使用abstract关键字来修饰,使用abstract关键字修饰的类为抽象类。在定义抽象类时需要注意,包含抽象方法的类必须声明为抽象类,但抽象类可以不包含任何抽象方法,只需使用abstract关键字来修饰即可。另外,抽象类是不可以被实例化的,因为抽象类中有可能包含抽象方法,抽象方法是没有方法体的,不可以被调用。如果想调用抽象类中定义的方法,则需要创建一个子类,在子类中将抽象类中的抽象方法进行实现。1)把多个共性的东西提取到一个类中,这是继承的做法。 但是呢,这多个共性的东西,在有些时候,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。所以,我们在定义这些共性的方法

48、的时候,就不能给出具体的方法体。而一个没有具体的方法体的方法是抽象的方法。在一个类中如果有抽象方法,该类必须定义为抽象类。2)抽象类的特点A:抽象类和抽象方法必须用关键字abstract修饰B:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类C:抽象类不能实例化因为它不是具体的。D:抽象类的子类a:是一个抽象类。b:是一个具体类。这个类必须重写抽象类中的所有抽象方法。抽象类的实例化其实是靠具体的子类实现的。是多态的方式。Animal a = new Cat();3)抽象类的成员特点:成员变量:既可以是变量,也可以是常量。构造方法:有。用于子类访问父类数据的初始化。成员方法:既可以是抽象

49、的,也可以是非抽象的。抽象类的成员方法特性:A:抽象方法 强制要求子类做的事情。B:非抽象方法 子类继承的事情,提高代码复用性。4)抽象类的几个小问题A:抽象类有构造方法,不能实例化,那么构造方法有什么用?用于子类访问父类数据的初始化B:一个类如果没有抽象方法,却定义为了抽象类,有什么用?为了不让创建对象C:abstract不能和哪些关键字共存a:final冲突b:private 冲突c:static 无意义20.接口如果一个抽象类中的所有方法都是抽象的,则可以将这个类用另外一种方式来定义,即接口。在定义接口时,需要使用interface关键字来声明。接口中定义的方法和变量都包含一些默认修饰符

50、,接口中定义的方法默认使用“public abstract”来修饰,即抽象方法。接口中定义的变量默认使用“public static final”来修饰,即全局变量。由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法。此时需要定义一个类,并使用implements关键字实现接口中所有的方法。接口特点总结归纳:接口中的方法都是抽象的,不能实例化对象。当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法。一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口之间要用逗号隔开。一个接口可以通过extends关键字继承多个接口,接口之间使用逗号隔

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论