Java基础知识(基础知识+面向对象基础)

关键字的特点 完全小写纯英文字母 有颜色

标识符 在程序中,我们自己定义的内容,比如类名,方法名,和变量名,都是标识符

命名规则(硬性要求) 可包含英文字母,数字,$和 _ 不能以数字开头 不能是关键字

(软性要求) 类名大驼峰 变量名以及方法名用小驼峰

常量 在程序运行期间,固定不变的量

分类 字符串(双引号) 双引号中可以为空

整数常量

浮点数常量

字符(单引号)常量 两个单引号中必须有且仅有一个字符

布尔 常量 只有true和false

空(null)常量 不能直接打印null

基本数据类型(引用数据类型:字符串、数组、类、接口、lambda)

整数型 byte1 short2 int4 long8

浮点型 float4 double8

字符型char2

布尔型boolean1

注意事项:字符串不是基本类型,而是引用类型

浮点数可能只是一个近似值,并非精确值

数据范围与字节数不一定相关,float数据范围比long更加广泛,但是float是4字节,long是8字节

浮点数默认类型是double,如果一定使用float类型,需加上一个后缀F。

如果是整数,默认为int 类型,如果一定使用long类型,需加上后缀L。

变量:程序运行期间,内容可以发生改变的量。

定义格式 数据类型 变量名称; //创建变量

变量名称 = 数据值; //给其赋值

另一种 数据类型 变量名称 = 数据值;

注意事项 多个变量之间名称不要重复

对于float和long类型,字母后缀F和L不要丢弃。

没有进行赋值的变量,不能直接使用

变量使用不能超过作用域(从定义变量的那一行开始,一直到所属的大括号结束为止) 的范围

数据类型的自动转换

特点:代码不需要进行特殊处理,自动完成

规则:数据范围从小到大

强制类型转换

特点:代码需要进行特殊的格式处理,不能自动完成

格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据;

注意事项:强制类型转换一般不推荐使用,有可能发生精度损失、数据溢出

byte/short/char这三种类型都可以发生数学运算

byte/short/char这三种类型在运算的时候,都会被首先提成int类型,然后再计算,

所以在接收时要用一个int类型的数据接收

运算符

四则运算(加减乘除) 与取模运算 对于一个整数表达式来说,除法用的是整除,整数除以整数,结果仍是整数,只看商,不看余数 只有对于整数的除法来说,取模运算符才有余数的意义

注意事项 一旦运算中有不同类型的数据,那么结果将会是数据类型范围大的那种

加法的三种用法 1数值加 2对于char类型,char类型会提升成int,然后再计算 3对于字符串来说,加号代表字符串连接操作 任何数据类型和字符串进行连接的时候,结果都会变成字符串例如 hello + 20 +30 会打印hello2030

自增自减运算符 使用方式 单独使用:不和其他任何操作混合,自己独立成为一个步骤 混合使用:和其他操作混合,例如与赋值或打印混合

使用区别 在单独使用时,前++和后++没有任何区别 在混合使用时,如果是前++,需要先加后用;如果是后++,需要先用后加;

此外还有赋值,比较(== , < > = !=)和逻辑运算符(按位与,按位或 ,非)

方法

方法名称的命名规则和变量一样,小驼峰

定义方法的格式 public static void 方法名(){

方法体

}

方法的调用 方法名称();

注意 方法的定义先后顺序无所谓 方法的定义不能产生嵌套关系

编译器的两点优化

对于byte/short/char 三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器会自动隐含地为我们补上一个(byte)(short)(char)

在给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量,那么编译器将会直接将若干个

常量表达式计算得到结果。 short result = 5 + 8 ; 结果相当于short result = 13 ;右侧常量结果的数值,没有超过左侧范围,所以正确,但是一旦有变量参与,就不能进行优化了。如short = 5 +a +8; a的值不确定

顺序结构(简单)

判断语句(也叫选择结构)

1if(关系表达式){

语句体;

}

2if(关系表达式){

语句体;

}else{

语句体;

}

3if(关系表达式){

语句体;

}else if(判断语句){

语句体;

}

...

}else if(判断语句){

语句体;

}else{

语句体;

}

选择语句switch

switch (表达式){

case 常量值1:

语句体1;

break;

case 常量值2:

语句体2;

break;

...

default:

语句体;

break;

}

switch语句的注意

多个case后面的数值不可以重复 switch后面的小括号当中只能是以下数据:基本数据类型:byte/short/char/int 引用数据类型:String字符串、enum枚举

switch语句格式很灵活:前后顺序可以颠倒,而且break语句还可以省略

循环语句

for while do-while三种循环(凡是确定次数的多用for循环,否则多用while循环)

控制语句 break 一旦执行,整个循环语句立刻结束 continue一旦执行,立刻跳过当此循环,马上开始下一次循环

死循环的标准格式while(true){

循环体

}

方法的定义格式

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

方法体

return 返回值;

}

现阶段的固定写法 public static

返回值类型 也就是方法最终产生的数据是什么类型

方法名称 方法的名字,规则和变量一样 小驼峰

参数类型 进入方法的数据是什么类型

参数名称 进入方法的数据对应的变量名称

注意事项 参数如果有多个,使用逗号进行隔离 return后面的“返回值”,必须和方法名称前面的“返回值类型”保持一致

方法的调用格式

单独调用 方法名称(参数)

打印调用 sout(方法名称(参数));

赋值调用 数据类型 变量名称 = 方法名称(参数);

方法的有参数和无参数类型

有参数类型如 小括号当中有内容,必须给一些数据,才能运行

无参数类型 小括号当中留空,一个方法不需要任何数据条件,自己就能独立完成任务,例如定义一个方法,打印固定十次Hello

对于无返回值的方法,只能使用单独调用。

方法的注意事项

如果方法有返回值,那么必须加return return后面的返回值数据,必须和方法的返回值类型对应

对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己 ,也可以省略不写

方法的重载(Overload)多个方法名称(区分大小写)一样,但是参数列表不一样

方法重载注意

方法重载与下列因素相关 参数个数不同 参数类型不同 参数的多类型不同

方法重载与下列因素无关 与参数的名称无关 与参数的反回值类型无关

数组

数组是一种引用数据类型 数组中的多个数据,类型必须统一 数组的长度在运行期间不可改变

动态初始化 在创建数组的时候,直接指定数组当中的数据元素的个数

动态初始化数组格式 数据类型 [ ] 数组名称 = new 数据类型 [ 数组长度 ] 例 int [ ] arrayA = new int [300];

静态初始化 在创建数组的时候,不直接指定数据个数的多少,而是直接将具体的数据内容进行指定

静态初始化数组格式 数据类型 [ ] 数组名称 = new 数据类型[ ] {元素1,元素2,...}

使用静态初始化数组的时候,格式还可以省略一下 数据类型 [ ] 数组名称 = {元素1,元素2,... }

数组变量名中存储的是数组在内存中的地址,数组是一种引用类型

注意事项

其实静态数组在初始化的时候,也会有初始值,只不过被大括号中的具体值给替换了

数组是一种引用数据类型 数组中的多个数据,类型必须统一 数组的长度在运行期间不可改变

数据类型 [ ] 数组名称 也可以写成 数据类型 数组名称 [ ]

数组的遍历

Java基础知识(基础知识+面向对象基础)_第1张图片

 快捷键:数组名.fori

求数组的最大值

Java基础知识(基础知识+面向对象基础)_第2张图片

 我们一般注意的是在max初始化时一般定义数组的第一个元素为最大值,因为如果我们把max赋初值为0,如果数组中的元素全是负数,那么输出最大值会是0

冒泡排序

Java基础知识(基础知识+面向对象基础)_第3张图片

上图更好的理解,但是我们面试时希望我们写成下边的形式

Java基础知识(基础知识+面向对象基础)_第4张图片

左图更好的理解,但是我们面试时希望我们写成右边的形式

Java内存划分5个部分

栈(Stack): 存放的都是方法中的局部变量。方法的运行一定要在栈当中运行

局部变量: 方法的参数 或者是方法{ }内部的变量

作用域 :一旦超出作用域,立刻从栈内存当中消失

堆(Heap):凡是new出来的东西,都在堆中

方法区(Method Area):存储 .class相关信息,包含方法信息

本地方法栈(Native Method Stack):与操作系统相关

寄存器(pc Register): 与CPU相关

数组常见异常

数组索引越界异常(ArrayIndexOutOf...) 索引编号不存在时,将会发生

空指针异常 数组必须行new初始化才能使用其中的元素,如果只是赋值了一个null,没有进行new,那么将会发生空指针异常(NullPointerException)

获取数组的长度

数组名称.length 这将会得到一个int数字,代表数组的长度

数组一旦创建,程序运行期间,长度不可改变

数组作为方法的参数

当调用方法时,向方法的小括号进行传参,传递进去的其实是数组的地址值

例 public static void printArray(int[] array){

for( int i =0; i < array.length; i++){

System.out.println(array[i]);

}

}

数组作为方法的返回值

数组作为方法的返回值,返回值其实也是数组的地址值

public static int[]calculate(int a,int b,int c){

int sum = a + b +c ;

int avg = sum / 3;

int[] array = {sum,avg};

return array;

}

面向对象(强调对象) 当需要实现一个功能的时候,不关心具体步骤,而是找一个已经具有该功能的,帮我做事

面向过程(强调步骤)

面向对象三大特性 封装 继承 多态

类和对象

类是对一类事物的描述 ,是抽象的 对象是一类事物的实例,是具体的 类是对象的模板,对象是类的实体

类的定义

成员变量(属性):姓名 年龄

成员方法(行为):吃饭 睡觉 学习

注意事项 成员变量是直接定义在类当中的,在方法的外边 成员方法不要写static关键字

对象的创建及使用

导包 也就是指出需要使用的类,在什么位置

import 包名称.类名称

对于和当前类属于同一个包的情况下,可以省略导包语句

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

使用 使用成员变量:对象名.成员变量名 使用成员方法:对象名.成员变量方法名(参数)

内存图

关于解释 首先在main方法当中调用call方法,指向 堆 当中的成员方法地址,然后再指向地址当中的成员方法,此时call 方法会进栈(此过程叫 压栈),执行完毕后,就会从栈当中消失

Java基础知识(基础知识+面向对象基础)_第5张图片

源代码如图

Java基础知识(基础知识+面向对象基础)_第6张图片

Java基础知识(基础知识+面向对象基础)_第7张图片

使用对象类型作为方法的参数 当一个对象作为参数,传递到方法当中时,实际上传递进去的是对象的地址值

Java基础知识(基础知识+面向对象基础)_第8张图片

使用对象类型作为方法的返回值(返回值也是地址值)

Java基础知识(基础知识+面向对象基础)_第9张图片

局部变量和成员变量不同点

定义的位置不一样 局部变量在方法内部 成员变量 在方法的外部,直接写在类当中

作用范围不一样 局部变量 只有方法当中才可以使用,出了方法就能再用 成员变量整个类都可以用

默认值不一样 局部变量没有默认值,如果想要使用,必须进行手动赋值 成员变量如果没有进行赋值,会有默认值,规则和数组一样

方法的参数是局部变量,但书写时没有直接赋值 因为参数在方法调用时,必然会被赋值的

Java的封装性

方法就是一种封装 关键字private也是一种封装

封装就是将一些细节信息隐藏起来,对外界不可见

private封装

一旦用private进行修饰,那么本类当中仍然可以随意访问,但是,超出了本类范围之外就不能在直接访问

但是,可以间接访问,定义一对儿Getter/Setter方法(命名 必须叫 setXxx或者getXxx)Xxx 就是被private修饰的那个

对于Getter来说,不能有参数,返回值类型和成员变量对应

对于Setter来说,不能有返回值,参数类型和成员变量对应

注意 对与布尔类型来说,getter方法要写成isXxx

this 关键字

当方法的局部变量和类的成员变量重名的时候,根据就近原则,优先使用局部变量

如果需要访问本类当中的成员变量 ,需要使用格式 this.成员变量名

Java基础知识(基础知识+面向对象基础)_第10张图片

构造方法

专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法

格式 public 类名称(参数类型 参数名称){

方法体;

}

注意事项 构造方法的名称必须和所在类名完全一样 不写返回值,void也没有

不能return一个具体的值 如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法

没有参数,方法体什么都不做 public Student(){}

一旦编写了一个构造方法,那么编译器不再赠送 构造方法也可以重载

完结...

你可能感兴趣的:(Java知识,java,开发语言)