java

一:关键字

概述:被JAVA语言赋予特定含义的单词

特点:组成关键字的字母全部小写

注意事项:

(1)goto和const作为保留字存在,目前并不使用

(2)类型Notepad++这样的高级记事本,针对关键字有特色的颜色标记,非常直观

二.标识符

概述:就是给,接口,方法,变量等起名字时使用的字符序列

组成规则:

(1)英文大小写字母

(2)数字字符

(3)$和_

注意事项:

(1)不能以数字开头

(2)不能是JAVA中的关键字

(3)区别大小写

三:标识符中常见的命名规则

(1)包:其实就是文件夹,用于把相同的类名进行区分,全部小写
单级:linyi
多级:cn.itcast
(2)类或者接口:
一个单词组成:单词的首字母必须大写
举例:Student,Dog
多个单词组成:每个单词的首字母必须大写
举例:HelloWord,UserName
(3)方法或者变量:
一个单词:单词的首字母小写
举例:main,age
多个单词:从第二个单词开始,每个单词的首字母大写
举例:studentAge,showAllnames()
(4)常量:
一个单词:全部大写
举例:PI
多个单词:每个字母都大写,用_隔开
举例:STUDENT_MAX_AGE

四:注释概述及其分类

概述:用于解释说明程序的文字

作用:解释说明程序,提高程序的阅读性,可以帮助我们调试程序

注释分类格式:

(1)单行注释://注释文字

(2)多行注释:/*注释文字*/

(3)文档注释:/**注释文字*/

五:常量

概述: 常量是一种特殊的变量 值一旦被设定 ,在程序运行过程中不允许改变,常量名一般使用大写字符

格式:fianl 常量名= 值

常量分类:

(1)字面值常量

(2)自定义常量(后面讲)

1.字面值常量

(1)字符串常量:用双引号括起来的内容,例"A","b","0"

(2)整数常量:所有整数,例如12,23

表示形式:二进制、八进制、十进制、十六进制(进制转换

进制概述:进制:就是进位制,对于任何一种进制--X进制,就表示某一位置上的数运算是逢X进一位。二进制是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一

(3)小数常量:所有小数,例如12.34,12.56

(4)字符常量:用单引号括起来的内容,例'A','a','0'

(5)布尔常量:较为特有,只有true和false

(6)空常量:null

在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开头。

有符号数据表示法:
在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。

原码:
就是二进制定点表示法,即最高位为符号位,“0"表示正,“1”表示负,其余位表示数值的大小。

反码:
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码:

正数的补码与其原码相同; -负数的补码是在其反码的未位加1。

例如:用原码,反码,补码分别表示  +7和-7,首先我们得到7的二进制:111

原码:正数的原码最高位是0,负数的原码最高位是1,其他是数值位
        符号位   数值
+7       0        0000111
-7       1        0000111

反码:正数的反码和原码相同,负数的反码与原码是符号位不变,数值位取反,就是1变0,0变1

        符号位   数值
+7       0       0000111
-7       1       1111000

补码:正数的补码与原码相同,负数的补码是在反码的基础上加1
      符号位    数值
+7       0      0000111
-7       1       1111001

六:变量

概述:在程序执行的过程中,在某个范围内可以发生改变的量(理解:如同数学中的未知数)

定义变量的格式:
a:数据类型 变量名 = 初始化值;
b:数据类型 变量名;
c:变量名 = 初始化值;

注意:格式是固定的,记住格式,以不变应万变

使用规则:

1Java中的变量需要先声明后使用

2 变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值 String a = 1; /String a; a=1;

3 变量中每次只能赋一个值,但可以修改多次

4.main 方法中定义的变量必须先赋值,然后才能输出

使用变量时要注意的问题:
A:作用域:
变量定义在哪一级大模块中,哪个大括号的范围就是这个变量的作用域,相同的作用域中不能定义两个同名变量。
B:初始化值:
没有初始化的变量不能直接使用
只要在使用前给值就行,不一定非要在定义的时候立即给值
推荐在定义前就给值
在一行上建议只定义一个变量
可以定义多个,但是不建议

七:数据类型

基本数据类型:

(1)数值型:

整数类型:byte,short,int,long

浮点类型:float,double

(2)字符型:char

(3)布尔型:boolean

引用数据类型:

(1)类:class

(2)接口:interface

(3)数组:[]

八:数据类型转换

默认转换:(从小到大的转换)

byte,short,char- -int- -long一 float -double
byte ,short, char相互之间不相互转换,他们参与运算首先直接转换为int类型

boolean类型不能转换未其他数据类型

例如:

byte c=5;
int d=7;
System.out.println(c+d);

强制转换:(从大的小的转换)

格式:
目标数据类型 变量 = (目标数据类型) (被转换的数据);
注意:

整数默认是int类型
浮点数默认是double类型
不要随意的去使用强制转换,因为它隐含了精度损失问题

长整型建议用L或者l标记,建议使用L
单精度浮点数用F或者f标记,建议使用F

例如:

byet a=3;

int b=4;

byte c=(byte)(a+b);

九:进制转换

其他进制到十进制:

系数:就是每一个位上的数

基数:X进制的基数就是X

权:对每一个位上的数,并且从0开始编号,对应的编号就是该数据的权

结果:系数*基数^权次幂之和

十进制到其他进制:

除基取余,直到商为0,余数反转

进制快速转换法:

A:十进制和二进制间的转换:8421码

B:二进制到八进制、十六进制的转换

十:运算符

1.算术运算符:

+,-,*,/都是比较简单的操作,简单演示即可

+的几种作用:

加法:System.out.println(3+4);

正数 :System.out.println(+4);

字符串连接符:

System.out.println('a');//只打印一个字符的情况下控制台只会输出这个字符

System.out.println('a'+1);//char类型参与运算首先会转换成int类型并参与运算

System.out.println("hellow"+'a'+1);//运算是从左到右开始运算的,所以这里的值是字符串hellowa1

注意事项:
A:整数相除只能得到整数,如果想得到小数,必须先转换为浮点类型

/和%的区别:
B:/获取的是除法操作的商,%获取的是除法操作的余数

++和--的应用:

单独使用:
++--放在操作数的前面或者后面效果是一样的(这种用法是我们比较常见的)
参与运算使用:
++或者--放在后面是先参与运算再自增或自减
++或者--放在前面是先自增或自减再参与运算

2.赋值运算符:

基本的赋值运算符:=(把右边的数据赋值给左边)
扩展的赋值运算符:+=,-=,*=,/=,%=(把左边和右边做计算再赋值给左边)

扩展的赋值运算符隐含了一个强制类型转换:

例如:

short int =1
s+=1;
不是等价于s=s+1;
而是等价于s=(s的数据类型)(s+1);

3.比较(关系)运算符:

注意:

(1)比较运算符的结果都是boolean类型,也就是要么是true,要么false

(2)比较运算符"=="不能误写成"="

特点:无论操作是简单还是复杂结果肯定是boolean类型

4.逻辑运算符:

逻辑运算符用于连接布尔型表达式,在java中不可以写成3<x<6,应该写成x>3x&x<6;

注意:当逻辑运算符两边是数据做的是位运算,当逻辑运算符两边是布尔值做的是逻辑运算

特点:逻辑运算符一般用户连接boolean类型的表达式或值
表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子
算术表达式:a+b
比较表达式:a==b
结论:
&逻辑与:有false则false,只有全部结果为true才会true
|逻辑或:有true则true,只有全部为false才会为false
^逻辑异或:结果相同为falser,不同为true
!逻辑非:非false则true,非true则false 特点:偶数个!不改变本身

“&”和“&&”的区别:

单&时,左边无论真假,右边都进行运算

双&&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算

“|”和“||”的区别:

单|时,左边无论真假,右边进行运算

双||时,当左边为true时,右边不参与运算,如果左边为false,那么右边参与运算

异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。

5.位运算符:

(1)<<:空位补0,被移除的高位丢弃。

算法:<<把<<左边的数据*2的移动次幂

(2)>>:被移位的二进制最高位是0,右移后,空缺位补0; 最高位是1,最高位补1。

算法:>>把>>左边的数据/2的移动次幂

(3)>>>:被移位二进制最高位无论是0或者是1,空缺位都用0补。

(4)&:任何二进制位和0进行&运算,结果是0; 和1进行&运算结果是原值。(0代表false,1代表true)

(5)|:任何二进制位和0进行 | 运算,结果是原值; 和1进行 | 运算结果是1。(0代表false,1代表true)

(6)^:任何相同二进制位进行 ^ 运算,结果是0; 不相同二进制位 ^ 运算结果是1。(0代表false,1代表true)

^的特点:某一个数据对另一个数据异或两次,结果不变

6.三元运算符:

格式:(关系表达式)?表达式1:表达式2;

如果条件为true,运算后的结果是表达式1;

如果条件为false,运算后的结果时表达式2;

注意:布尔类型格式后面不需要跟true和false,因为它本身就是布尔类型。

十一:键盘录入数据

概述:我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,我准备把数据改进为键盘录入,提高程序的灵活性。

如何实现键盘录入数据呢?(目前先记住使用)

导包(位置放到class定义的上面) import java.util.Scanner;

创建对象 Scanner sc = new Scanner(System.in);

接收数据 int x = sc.nextInt();

十二:流程控制语句

流程控制语句分类:

1.顺序结构:从上往下,依次执行

2.选择结构:按照不同的选择执行不同的代码

if语句 :if语句有三种格式

if语句第一种格式:

if(关系表达式) {

     语句体

    }

执行流程 :

(1)首先判断关系表达式看其结果是true还是false

(2)如果是true就执行语句体 如果是false就不执行语句体

注意事项:

(1)关系表达式无论简单还是复杂,结果必须是boolean类型

(2)if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略,建议永远不要省略

(3)一般来说,有左大括号就没有分号,有分号就没有左大括号

if语句第二种格式:

if(关系表达式) {

            语句体1;   

 }else { 语句体2;

    }

执行流程:

(1)首先先判断关系表达式看其结果是true还是false

(2)如果是true就执行语句体1

(2)如果是false就执行语句体2

三元运算符和if语句格式二的区别:

三元运算符实现的,都可以采用if语句实现,反之不成立
什么时候if语句实现不能用三元改进呢?当if语句控制的操作时一个输出语句的时候就不能,因为三元运算符是一个运算符,
运算符操作完毕后就应该有一个结果,而不是输出

if语句第三种格式:

if(关系表达式1) {             

语句体1;   

 }else  if (关系表达式2) {             

语句体2;     }    

…   

 else {             

语句体n+1;     }

执行流程:

(1)首先判断关系表达式1看其结果时false还是true

(2)如果是true就执行语句体1

(3)如果是false就继续判断关系表达式2看其结果是true还是false

(4)如果是true就执行语句体2

(5)如果是false就继续判断关系表达式.....看其结果时true还是false

(6)......

(7)如果没有任何关系表达式为true,就执行语句体n+1

if语句的使用场景:

(1)针对一个表达式时boolean类型的判断

(2)针对一个范围的判断

(3)if语句是可以嵌套使用的

switch语句:

格式:

switch(表达式) {         

 case 值1:             

语句体1;             

break;           

 case 值2:             

语句体2;             

break;             

default:                 

语句体n+1;           

 break;

格式解释 :

switch表示这是switch语句

表达式的取值:byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是String

case后面跟的是要和表达式进行比较的值 语句体部分可以是一条或多条语句 break表示中断,结束的意思,可以结束switch语句 default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

执行流程:

(1)首先计算出表达式的值

(2)其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行过程中,遇到break就会结束

(3)最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉

注意事项:

(1)case后面只能跟常量,不能是变量,而且,多个case后面的值不能出现相同的

(2)default可以省略,但是不建议,除非判断的值的固定的

(3)break可以省略,但是不建议,否则结果可能不是你想要的

(4)default的位置可以出现在switch的任意位置

(5)switch的结束条件:遇到break或者执行到程序的末尾

if语句和switch的区别:

if语句使用场景:

针对结果是boolean类型的判断

针对一个范围的判断

针对几个常量值的判断

switch语句使用场景:

针对几个常量值的判断

3.循环结构:主要做一些重复的代码

循环语句的组成:

初始化语句:一条或者多条语句,这些语句完成一些初始化操作

判断条件语句:这是一个boolean表达式,这个表达式能决定是否执行循环体

循环体语句:这个部分是循环体语句,也就是我们要多次做的事情

控制条件语句:这个部分在一部分循环体结束后,下一次循环判断条件前执行,通过用于控制循环条件中的变量,使得循环在合适的时候结束

for循环语句格式:

for(初始化语句;判断条件语句;控制条件语句;){

循环体结构;

}

执行流程:

A:执行初始化语句

B:执行判断条件语句,看其结果时truehaisfalse

(1)如果是true,继续执行

(2)如果是false,循环结束

C:执行循环体语句

D:执行控制条件语句

E:回到B继续执行

注意事项:

A:判断条件语句的结果是一个boolean类型

B:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。

C:一般来说:有左大括号就没有分号,有分号就没有左大括号

while循环语句格式:

基本格式:

while(判断条件语句){

循环体语句;}

扩展格式:

初始化语句:

while(判断条件语句){

循环体语句;

控制条件语句;}

while和for循环的区别:

使用区别:控制条件语句所控制的那个变量,在for循环结束后就不能再访问到了,而while循环结束后还可以继续使用,如果你想继续使用就用while循环,否者推荐使用for循环,原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率

场景区别:

for循环适合针对一个范围判断进行操作

while循环适合判断次数不明确操作

do…while循环语句格式:

基本格式:

do{

循环体语句;

}while(判断条件语句);

扩展格式:

初始化语句;

do{

循环体语句;

控制条件语句;

}while(判断条件语句);

循环语句的区别:
do…while循环至少会执行一次循环体。

for循环和while循环只有在条件成立的时候才会去执行循环体

优先考虑for循环,其次考虑while循环,最后考虑do...while循环

注意事项:

写程序优先考虑for循环,再考虑while循环,最后考虑do…while循环。

如下代码是死循环

while(true){}

for(;;){}

循环嵌套:就是循环语句的循环体本身是一个循环语句。

十三:跳转控制语句

break 中断:

使用场景:
A:switch语句中
B:循环语句中加入了if判断的情况
注意:离开上面的两个场景,无意义
如何使用:
A:跳出单层循环
B:跳出多层循环
带标签的跳出,(格式:标签名:循环语句)
标签名要符合java要求

continue继续:

使用场景:
A:在循环语句中
B:离开使用场景的存在时没有意义的
作用:
单层循环对比break,然后总结两个区别
A:break跳出单层循环
B:continue跳出一次循环,进入下一次的执行
也可以带标签的使用

return返回:

作用:它的作用不是拿来结束循环的,而是拿来结束方法的

十四:方法和数组

方法定义:

完成特定功能的代码块

注意:在很多语言里面有函数的定义,而java里面的函数被称为方法

方法格式:

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型参数名2,......){

                  函数体;

                   ruturn 返回值;}

详细解释:

修饰符:目前就用public static ,后面我们再详细的讲解其他的修饰符

返回值类型:就是功能结果的数据类型

方法名:符合命名规则即可,方便我们的调用

参数:

实际参数:就是实际参与运算的

形式参数:就是方法定义上的,用于接收实际参数的

参数类型:就是参数的数据类型

参数名:就是变量名

方法体语句:就是完成功能的代码

return:结束方法的

返回值:就是功能的结果,由return带给调用者

方法的执行特点:不调用不执行

基本类型和引用类型的区别:

基本类型:形式参数的改变对实际参数没有影响
引用类型:形式参数的改变直接影响实际参数

方法调用:

有明确返回值的调用:

(1)单独调用:sum(x,y);

一般来说没有意义,所以不推荐

(2)输出调用:System.out.println(sum(x,y));

但是不够好,因为我们可能需要对结果进行进一步的操作

(3)赋值调用:int result =sum(x,y);   System.out.print(result);

推荐方案

画图解释调用流程:

方法注意事项:

(1)方法不调用不执行

(2)方法与方法之间是层级关机,不能嵌套定义

(3)方法定义的时候参数之间用逗号隔开

(4)方法调用时不需要再传递数据类型

(5)如何方法有明确的返回值,一定要有return带回一个值

没有明确返回值的调用:

(1)没有明确的返回值时返回值类型为void

(2)没有明确的返回值时只能使用单独调用,不能使用输出调用和赋值调用:sum(x,y);

方法重载:

方法重载定义:在同一类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可

方法重载特点:

(1)与返回值类型无关,只看方法名和参数列表

(2)在调用时,虚拟机通过参数列表的不同来区分同名方法

参数列表:参数类型不同、参数个数不同

如下图例子:

方法递归在IO之前详细讲解

数组概念:

(1)数组是存储同一种数据类型多个元素的组合,也可以看成是一种容器

(2)数据既可以存储基本的数据类型,也可以存储引用数据类型

数据定义格式:

格式1:数据类型[] 数组名;

格式2:数据类型 数组名[];

数组初始化概述:

(1)java中的数组必须先初始化,然后才能使用

(2)所谓初始化:就是为数据中的数据元素分配内存空间,并为每个数组赋值

数组的初始化方式:

动态初始化:初始化时只指定数据长度,由系统为数组分配初始值

格式:数据类型[] 数组名 = new 数据类型[数据长度];

数据长度其实就是数组中元素的个数

赋值:数组名[索引]=值;

静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度

格式:数据类型[] 数组名=new[]{元素1,元素2,.......}

获取数组元素格式:数组名[索引]  (索引就是每个元素的编号,从0开始,最大索引是数组的长度-1)

获取数组长度格式:数组名.length

注意事项:不要同时动态和静态进行,如下格式int[] a=new int[3]{1,2,3};

数组操作的两个常见小问题:
数组索引越界:ArrayIndexOutOfBoundsException
原因:你访问了不存在的索引
空指针异常:NullPointerException
原因:数组已经不再指向堆内存了,而你还用数组名去访问元素

二维数组:

动态初始化格式1:

数据类型[][]变量名 = new数据类型[m][n];

m表示这个二维数组有多少个一维数组

n表示每一个一维数组的元素个数

举例:

int[][] arr = new int[3][2];

定义了一个二维数组arr 这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]

每个一维数组有2个元素,可以通过arr[m][n]来获取 表示获取第m+1个一维数组的第n+1个元素

动态初始化格式2:

数据类型[][] 变量名=new 数据类型[m][];

m表示这个数组有多少个一维数组

这一次没有直接给出一维数组的元素个数,我们可以动态给出

动态分配元素:数组名[一维数组索引]=new 数据类型[元素长度];

赋值:数组名[一维数组索引][元素索引]=值;

举例:

 //动态为每一个一位数组分配元素
a[0]=new int[3];
a[1]=new int[2];
a[2]=new int[2];

//给数组元素赋值

a[0][0]=100;
a[0][1]=200;
a[0][2]=300;
a[1][0]=400;

 静态初始化格式3:

数据类型[][] 变量名=new 数据类型[][]{{元素......},{元素......},{元素......}};

简化版格式:数据类型[][] 变量名={{元素......},{元素......},{元素......}};

举例:int[][] a={{1,2,3},{2,4},{3}};

Java中的内存分配以及栈和堆的区别:

java中程序为了提交代码的效率,就对数据进行了不同空间的分配

具体的划分为如下5个内存空间:

1.栈 :存放的是局部变量

局部变量:在方法定义中或者方法声明上的变量都成为局部变量

栈特点: 内存的数据用完就释放掉,这个释放一定是在这个数据脱离了她的作用域

栈内存的两个引用指向同一个堆内存空间,无论是它们谁的操作,都是针对同一个地方

2.堆:存放的是所有new出来的东西

栈内存的两个引用指向同一个堆内存空间,无论是它们谁的操作,都是针对同一个地方

堆特点:

(1)使用完毕后就变成了垃圾,但没有立即回收,会在垃圾回收器空闲的时候回收

(2)每一个new出来的东西都有地址值,这个地址值会赋值给变量名

(3)每个变量都有默认值

 

3.方法区:(面向对象部分详细讲解)

4.本地方法区:和系统相关

5.寄存器:CPU使用

十五:面向对象

1.面向对象思想:面向对象是基于面向过程的编程思想

面向过程:强调的是每一个功能的步骤

面向对象:强调的是对象,然后由对象去调用功能

2.面向对象的特点:

A:是一种更符合我们思想习惯的思想

B:可以将复杂的事情简单化

C:将我们从执行者变成了指挥者

3.开发、设计、特征:

面向对象开发:就是不断的创建对象,使用对象,指挥对象做事情

面向对象设计:管理和维护对象之间的关系

面向对象特征:封装(encapsulation)、继承(inheritance)、多态(polymorphism)

4.类与对象的关系:

类:是一组相关的属性和行为的集合,是一种抽象的概念

对象:是该类食物的具体表现形式,具体存在的个体

距离:

学生:类

班长、副班长:对象

5.类的定义:定义类就是在定义类的成员(成员变量和成员方法)

成员变量:和以前变量的定义是一样的格式,但是位置不同,在类中方法外

成员方法:和以前变量的定义是一样的格式,现在先把static去掉

如何使用:

创建对象: 类名 对象名 = new 类名();

使用变量:对象名.成员变量

使用方法:对象名.成员方法();

如何给成员变量赋值:对象名.成员变量=值;(定义的成员变量是什么类型值就必须是什么类型)

6.成员变量和局部变量的区别

A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中,或方法声明外
B:在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义赋值才能使用
注意事项:局部变量名称可以和成员变量名称一样,在方法中使用的时候采用的是就近原则

7.实际参数和形式参数的区别

实际参数:就是实际参与运算的

形式参数:就是方法定义上的,用于接收实际参数的

8.形式参数基本类型和引用类型的区别

基本类型:形式参数的改变不影响实际参数

引用类型:形式参数的改变直接影响实际参数

注意:如果你看到一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象

9.匿名对象

匿名对象:没有名字的对象
匿名对象的应用场景:
A:对象调用方法仅仅一次的时候
注意:调用多次的时候不适合
好处:匿名对象调用完毕后就是垃圾,可以被垃圾回收器回收
B:作为实际参数传递

10.封装

封装概述:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式

好处:

(1)隐藏实现细节,提供公共访问方式

(2)提高了代码的复用性

(3)提高安全性

封装原则:

(1)将不需要对外提供的内容都隐藏起来

(2)把属性隐藏,提供公共的访问方式

private关键字:

(1)是一个权限修饰符

(2)可以修饰成员(成员变量和成员方法)

(3)如果类的成员被private访问控制符修饰,则这个成员只能被该类的其他成员访问,其他类无法直接访问

private最常见的应用:

(1)把成员变量用private修饰

(2)提供对应的gitXxx()/setXxx()方法

(3)一个标准案例的使用

this关键字:

this:代表所在类的对象引用

记住:方法被哪个对象调用,this就代表哪个对象

什么时候使用this呢?

(1)局部变量隐藏成员变量

(2)其他用法后面和super一起讲

构造方法:

构造方法作用概述:给对象的数据进行初始化

构造方法格式:

(1)方法名与类相同

(2)没有返回值类型,连void都没有

(3)没有具体的返回值

构造方法注意事项:

(1)如果你不提供构造方法,系统会默认给出构造方法

(2)如果你提供了构造方法,系统将不再提供

(3)如果我们还想使用无参构造方法,就必须自己给出,建议永远自己给出无参构造方法

(4)构造方法也是可以重载的(以数据类型来区分)

重载案例:

 

类的成员方法;

方法具体划分:

(1)根据返回值:

有明确返回值类型

void返回值类型

(2)根据形式参数

无参方法

带参方法

一个基本类的标准代码写法:

1.类:

(1)成员变量

(2)构造方法:

无参构造方法

带参构造方法

(3)成员方法

gitXxx()

setXxx()

2.给成员变量赋值的方式:

(1)无参构造方法+setXxx()

(2)带参构造方法

类的初始化过程:

Student s = new Student();在内存中做了哪些事情?

A:加载Student.class文件进内场

B:在栈内场为s开辟空间

C:在堆内存为学生对象开辟空间

D:对学生对象的成员变量进行默认初始化

E:对学生对象的成员变量进行显示初始化

F:通过构造方法对学生对象的成员变量赋值

G:学生对象初始化完毕,把对象地址赋值给s变量

static关键字:

可以修饰成员变量和成员方法

static关键字特点:

A:随着类的加载而加载

B:优先于对象存在

C:被类的所有对象共享:这也是我们判断是否使用静态关键字的条件

D:可以通过类名调用:静态修饰的内容一般我们叫做与类相关的,也叫类成员

static关键字注意事项:

A:在静态方法中时没有this关键字的
如何理解:
静态是随着类的加载而加载,this是随着对象的创建而存在
静态比对象先存在
B:静态方法只能访问静态的成员变量和静态的成员方法
静态方法:
成员变量:只能访问静态变量
成员方法:只能访问静态成员方法
非静态方法:
成员变量:可以是静态的,也可以是非静态的
成员方法:可以是静态的成员方法,也可以是非静态的成员方法

静态变量和成员变量的区别:

所属不同:

静态变量属于类,所以也成为类变量

成员变量属于对象,所以也成为实例变量(对象变量)

内存中位置不同:

静态变量存储于方法区的静态区

成员变量处于堆内存

内存出现的时间不同:

静态变量随着类的加载而加载,随着类的消失而消失

成员变量随着对象的创建而存在,随着对象的消失而消失

调用不同:

静态变量可以通过类名调用,也可以通过对象调用

成员变量只能通过对象名调用

main方法是静态的:

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

public被jvm调用,访问权限足够大

static被jvm调用,静态的,不用创建对象,直接访问类名

void被jvm调用,不需要给jvm返回值

main是一个常见的方法入口,一个通用的名称,虽然不是关键字,但是被jvm识别

String[] args 这是一个字符串数组,以前用于接收键盘录入的,格式是:java MainDemo HelloWord word java

制作帮助文档:

制作工具类 :ArrayTools

制作帮助文档(API) :javadoc -d 目录 -author -version ArrayTool.java

如何使用帮助文档:

1:打开帮助文档
2:点击显示,找到索引,看到输入框
3:知道你要找谁?以Scanner举例
4:在输入框里面输入Scanner,然后回车
5:看包
    java.lang包下的类不需要导入,其他的全部需要导入。
    
    要导入:
    java.util.Scanner
6:再简单的看看类的解释和说明,别忘了看看该类的版本
7:看类的结构
    成员变量    字段摘要     
    构造方法    构造方法摘要 
    成员方法     方法摘要
8:学习构造方法    
    A:有构造方法    就创建对象
    B:没有构造方法    成员可能都是静态的
9:看成员方法
    A:左边
        是否静态:如果静态,可以通过类名调用
        返回值类型:人家返回什么,你就用什么接收。
    B:右边
        看方法名:方法名称不要写错
        参数列表:人家要什么,你就给什么;人家要几个,你就给几个

代码块:

局部代码块:局部位置,用于限定变量的生命周期
构造代码块:在类的成员位置,用{}括起来的代码,每次调用构造方法执行前都会先执行代码块
作用:可以把多个构造方法中共同代码放到一起,对对象进行初始化
静态代码块:在类中成员位置,用{}括起来的代码,只是他用static修饰了
作用:一般是对类进行初始化,在加载的时候就进行执行,并且只执行一次
执行顺序:静态代码块---构造代码块---构造方法
静态代码块:只执行一次
构造代码块: 每次调用构造方法都执行

继承:

继承概述:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需在定义这些属性和行为,只需要继承那个类即可

通过extends关键字可以实现类与类的继承:class 子类名 extends 父类名{}

单独的这个类称为父类,基类或者超类;多个类可以称为子类或者派生类。

继承的好处:

(1)提高了代码的复用性:多个类相同的成员可以放到一个类中

(2)提高了代码的维护性:如果功能的代码需要修改,修改一处即可

(3)让类与类之间产生了关系是多态的前提:其实这也是继承的一种弊端:类的耦合性很强

继承特点:

1.java只支持单继承,不支持多继承

(1)一个类只可以有一个父亲,不可以有多个父亲

class SubDemo extends Demo{} //ok

class SubDemo extends Demo1,Demo2...//error

2.java支持多层继承(继承体系)

class A{}

class B extends A{}

class C extends B{}

Java中继承的注意事项:

(1)子类只能继承父类所有非私有方法的成员(成员方法和成员变量)

其实这也提现了继承的另一只弊端:打破了封装性

(2)子类不能继承父类的构造方法,但是可以通过super(后面讲)去访问父类的构造方法

(3)不要为了部分功能而去继承

(4)我们到底在什么时候使用继承呢?

继承中类之间提现的是:“is a”的关系

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小鱼o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值