JAVA基础知识一(java简介,基础语法)

一、 Java简介

1.Java语言简介

从1991年开始研发,Java语言之父(詹姆斯.高斯林),Green项目小组,C++,oak(橡树)。

1995年,想要将oak语言正式对外发布,java(咖啡杯),1996年正式发布--JDK。

公司:SUN公司,Oracle公司收购。

JDK 是一款软件,作用:用来编译和执行java语言所编写的程序。

2.发展史

\1. 1996年,jdk1.0。 jdk5.0:泛型、可变参数、枚举...。

JDK8.0: Lambda表达式/函数式接口/StreamAPI...

目前最新版本:JDK16.0。

\2. 在jdk1.2版本时,将java语言根据不同的需求,划分了三大平台。

javase(j2se): 标准版,桌面应用程序。

javaee(j2ee): 企业版,做web项目,简单理解:做网站

javame(j2me): 微型版,做移动端项目--淘汰了,Android和iOS。

\3. Java语言特点

a.编译性 :我们编写好的代码,必须先编译,编译后会有新的文件产生(字节码文件或类文件),最终执行的编译后的文件。

我们编写的自己可以看懂的代码编译为字节码文件,字节码文件是计算机能看懂的,然后JVM执行这些字节码文件。

b.面向对象:编程思想,解决问题的思路。找对象,调用其功能。封装对象。

Java语言的特性,万物皆是对象。把需求不自己亲自解决,而是交给对象解决。对象是我们提前设计好的能有一定功能的代

码,当我们需要的时候直接调用对象实现其功能。比如:洗衣服的面向过程的理解就是,每次洗衣服都拿盆放水放洗衣液自己

洗完拧干晾衣服,每次洗衣服都是这个重复的工作。面向对象的思想就是,我把这些重复的工作设计到一个全自动洗衣机里,

或者买一个全自动洗衣机,我每次洗衣服的时候只需要把衣服放进洗衣机打开开关就行。自己设计洗衣机就是自己设计代

码块,买洗衣机就是拿别人设计好的-可以实现该功能的代码,我们直接复制过来。

c.跨平台 :java相较于其他语言火的原因之一。

d.动态性 :执行过程中,可以选择要运行的内容或对内容进行修改。

e.开源 :开放源代码、免费的

\4. 跨平台

跨:跨越; 平台:操作系统。

指的就是编译后的类文件可以在不同的操作系统平台上运行。

原因:在不同的操作系统平台上,安装了对应系统版本的jvm(虚拟机)。

jvm: 一台假的计算机,是一个软件。

不同的操作系统上的jvm,可以营造相同的环境,能识别类文件。

总结:一次编译,处处运行。

3.配置环境变量

方法一、

1.计算机--右键--属性--高级系统设置--环境变量--系统变量--Path

2.Path = E:\Java\jdk1.8.0_131\bin; ....

注意:在Path值的原来基础上做添加,使用分号与其他内容做分隔

千万不要将Path原理的值删除。

方法二、

将jdk的安装目录,使用一个变量名来表示。

JAVA_HOME= E:\Java\jdk1.8.0_131

Path = %JAVA_HOME%\bin;......

这对百分号的作用就是用来获取某个变量名所对应的值。

jvm:java virtual machine, java虚拟机,看成是容器,装载类文件,执行类文件。

jre: java runtime environment,java运行时环境,包含:jvm + 核心类库

jdk:java development kit,java开发工具包,包含:开发工具+jre。

关系: jdk包含jre,jre包含jvm。

安装:jdk,满足我们的需求。

JAVA_HOME : jdk 路径

Path : 需要把jdk的bin目录路径,添加到path变量

Jdk 开发工具

Jre 核心类库

Jvm

4.编辑器

只要能用来编写纯文本数据,都可以用来作为编写代码的软件。

1.普通记事本软件

没有颜色区分、没有快捷键、没有自动缩进和换行等.

电脑系统自带的记事本软件。

2.超级记事本

有颜色区分、可以设置快捷键、有缩进和换行、有高亮提示等。

Editplus、 notepad++...

3.集成开发工具

有颜色区分、可以设置快捷键、自动补全代码的快捷键,有缩进和换行、有高亮提示等。

eclipse:免费的,下载后解压就可以使用。 javase javaee

MyEclipse: 收费的, javaee项目

Idea: 收费的,安装.

二、 基础语法

1.注释

1. 单行注释: //

//这是一条单行注释

public int i;

2. 多行注释: /和* 相结合

/** The first Thinking in Java example program.

* Lists system information on current machine.

* @author Bruce Eckel

* @author http://www.BruceEckel.com

* @version 1.0

*/

注意: 多行注释不能嵌套使用

2.关键字

是被Java语言赋予特殊含义,具有专门用途的单词,比如class,int,double均为Java已经预设好的;

组成关键字的字母全部小写 ,注意String不是关键字;

goto与const是Java中的保留字,即没有赋予特殊含义却仍被Java占用的单词;

3.标识符

凡是让我们自己起名字,这些名字就是标识符

类名、变量名、方法名、常量名、包名、接口名、枚举类名。

就是给类,接口,方法,变量等起名字时使用的字符序列,组成规则只能包含下面的内容,不能有其它内容:

l 英文大小写字母

l 数字字符

l $和_

1.注意事项

l 数字不能开头

l 不可以使用关键字

l 严格区分大小写,不限制长度

l 起名时,尽量见名知意

2.标识符常见的命名规则

l 包名:多单词组成时所有字母均小写,使用.连接.比如:aaa.bbb.ccc

l 类名&接口名&枚举类名:大驼峰式。比如:AaaBbbCcc

l 变量名&方法名:小驼峰式。比如:aaaBbbCcc

l 常量名:多单词组成是所有字母均大写,使用_连接。比如:AAA_BBB_CCC

4.数据类型

1. 基本数据类型

基本数据类型是Java语言中内置的类型,分别是整数类型、小数类型、字符类型、布尔类型。

l 整数(byte、short、int、long),默认的整数类型是int类型,long类型需添加"L"后缀。

l 小数(float、double)、字符类型(char),默认的浮点类型是double类型。在Java中所有没有后缀以及使用“D”后缀(小写也可以,但建议使用大写)的小数都是double类型;float类型常量必须添加“F”后缀

l 字符类型(char)

l 布尔类型(boolean)

整数:

byte 1字节 8位 -128~127

short 2字节 16位 -2^15~2^15-1

int 4**字节** 32**位** -2^31~2^31-1 默认类型

long 8字节 64位 -2^63 ~ 2^63-1

浮点:

float 4字节

double 8**字节** 默认类型

字符:

char 2个字节 0~65535

布尔:

boolean true/false

大小排序

byte < short = char < int < long < float < double

一个汉字字符在UTF-8 编码表中占3个字节。

一个汉字字符在GBK 编码表中占2个字节。

2. 引用数据类型

引用数据类型是强大的数据类型,它是基于基本数据类型创建的。JavaSE中提供了一个超级类库,类库中包含了近万种引用数据类型。比如: 数组、类、接口、枚举

注意: 字符串类型不是基本类型,属于引用型类类型

3. 数据类型间 的转换

自动转换:(小变大)

这个动作是自动完成的,不需要手动写代码。

小类型 会自动提升类型,与操作中的大类型一致,提升后进行计算。

有浮点类型出现,最终结果是浮点类型

byte / short /char-->int --->long--->float--->double

boolean类型不能转成数字,因此不能做转换。

强制转换:大类型 转换成 小类型

这个动作是显示完成的,需要手动写代码。

格式: (要转换的类型)数据

Float x = (float)10 ;

强转后,数据的精确程度可能会降低,因此使用时要慎重。

5.常量

常量就是不变的数据量, 在程序执行的过程中其值不可以发生改变

常量分类

数值型:

整数: 1,2,3, -1,-2...

浮点: 1.2, -1.3...

字符串型:使用双引号来表示的数据

内容不限,是什么都可以,个数也不限,最少0。 “” “())__” “abcd”....

字符型:使用单引号来表示的数据

内容是什么不限制,但是个数有要求,必须是1个。 ‘ ’ ‘1’ ‘中’ ‘a’

布尔类型: true 和false

空 : null

6.变量

1.概念

字面角度: 可以改变的数据

引深含义:在内存中,开辟空间,存储数据,存储的数据可以改变

java语言是一个强类型语言,开辟的空间有大小限制,根据空间类型,即java中的数据类型。

2.格式

变量的声明(定义):

数据类型 变量名;

存储数据:

变量名 = 数据;

合并一行:

数据类型 变量名 = 数据;

例如:

int 整数类型

int a = 123; //定义变量并存储数据

a = 125; //对存储的数据的改变

3.注意事项

1.变量没有定义过即不存在,不能直接使用

2.变量定义过,但是没有存储数据,也不能直接使用(只针对局部变量,因为局部变量储存在栈中,没有默认值,而成员变量储存在堆中,有默认值)

3.在一对大括号中,不能出现同名的变量

7.进制转换、原码、反码、补码

1.进制

二进制: 0 和1 ,逢2进1 0b(0B)开头 :0b010101

八进制: 0-7, 逢8进1 0开头 : 0123

十进制: 0-9, 逢10进1 正常数字: 123

十六进制:0-9和a-f 逢16进1 以0x(0X)开头,数字以0-9及A-F组成:0x12c

二进制转成其他进制:

二转十进制 1101 :从右边开始,每位上的数字乘以2的N次幂,n从0开始,逐位+1,最终相加之和为十进制数。 1 1 0 1 ,12^0 +02^1 +12^2 +12^3 = 1+0 + 4+ 8 = 13

二转八进制 1101: 从右边开始,每三位为一位,不够位数用0补位。

二转十六进制 1101

从右边开始,每四位为一位,不够位数用0补位。

其他进制转二进制:

十转二进制: 13

除以2 取余数的过程,直至商为0停止

八转二进制: 15

每位数字与2进行取余过程,直至商为0,共三位。

不足三位用0补位,这些二进制数合在一起即是整个二进制数

1 ==== 001 5 === 101

001101 有效位: 1101

十六转二进制: D

每位数字与2进行取余过程,直至商为0,共四位。

不足四位用0补位,这些二进制数合在一起即是整个二进制数

13 === 1101

十进制转其他进制,其他进制转十进制(扩展)。

3. 原码、反码、补码

都是使用二进制数进行计算的。

无符号表示 (+正数),有符号表示(+ -)

最高位是一个符号位,0 正数 1负数

正数 : 原码 、 反码、 补码都一致

6 00000110

负数 :

-6 10000110 11111001 11111010

反码: 最高位保留,其他位取反

补码: 反码+1

在java中,进行计算都是将数据转成其补码后在进行计算的。

bit : 位 (比特) 代表的是一个二进制数位 要么是0 要么是1,最小存储单元

byte: 字节 是由8个bit组成,最小的计量单位

1k = 1024b

1m = 1024k

1G = 1024m

1T = 1024G

8.运算符

算术运算符:

一元:+正号 -负号 ++自增 --自减

自增 自减: 单独使用时 a++ 和++a 没有区别 都是 a = a+1

在与其他运算接和使用时a++和 ++a 有区别

a++ > 10 先判断a>10 ,在进行运算 +1

++a > 10 先进行运算+1 ,再用+1后的结果判断 > 10

二元:+ - * / %取余数 +字符串连接符

赋值运算符:

= :将右边的结果存储到左边,有赋值动作的任何情况下都可以使用。

+= -= *= /= %=

A += 5 ; 效果是 A = A +5 ;

当A 和 5 的数据类型一样时。两个效果是一样的

如果A 和 5 的数据类型不一样时,涉及到精度问题。

byte b = 1 ;

b = b + 1;

byte = byte + int 会报错

b += 1 这种写法会自动转换数据类型

比较运算符:

计算后的结果是:boolean类型,即true或false结果

> >= < <=

==: 比较左右两边是否相等

!=: 比较左右两边是否不等

注意:一个等号是赋值, 两个等号是比较

逻辑运算符:

作用:就是用来连接比较运算符组成的表达式

计算后结果:boolean类型

&与and :连接的表达式值都是true,最终结果是true,否则是false。

| 或or :连接的表达式值都是false,最终结果是false,否则是true。

! 非not:对表达式的结果进行取反,!true=false , !false = true

^ 异或:连接的表达式结果都相同,结果是false,否则是true。

&&:段落与,只要有一个表达式结果是false,其他不再进行计算,直接判断结果false。

||:短路或,只要有一个表达式结果是true,其他不再进行计算,直接判断结果true。

其他情况与一个符号是相同的。

三元运算符:

需要有三个数据。

是运算符,必然有结果产生,这个运算符只不过是格式稍微复杂些。

格式:

表达式1 ? 表达式2 :表达式3;

表达式1: 结果是boolean

如果是true,最终执行表达式2

如果是false,最终执行表达式3

优先级 描述 运算符

1 括号 ()、[] 2 正负号 +、- 3 自增自减,非 ++、--、! 4 乘除,取余 *、/、% 5 加减 +、- 6 移位运算 <<、>>、>>> 7 大小关系 >、>=、<、<= 8 相等关系 ==、!= 9 按位与 & 10 按位异或 ^ 11 按位或 | 12 逻辑与 && 13 逻辑或 || 14 条件运算 ?: 15 赋值运算 =、+=、-=、*=、/=、%= 16 位赋值运算 &=、|=、<<=、>>=、>>>=

9.键盘录入

步骤:

1.在class关键字的上边,写一条导包语句,import java.util.Scanner/*;

2.创建扫描器, Scanner 扫描器名 = new Scanner(System.in);

扫描器名实际就是一个变量名

3.通过扫描器,扫描用户录入的数据 (扫描整数),创建整型变量存储扫描到的数据

int 变量名 = 扫描器名.nextInt();

String 变量名 = 扫描器名.next();

4.对扫描到的数据进行想要的操作

5.注意:扫描器创建好后,就可以一直使用,前提是在当前类中,可以多次扫描数据。

不是扫描一个数据就创建一个扫描器。

三、流程控制语句

1.顺序结构:

从上到下,从左到右,依次执行

2.分支结构:

程序执行到某一处,根据条件,选择要执行内容,不满足的就跳过不执行。

特点:写的多,执行的少。

代表语句:

if语句

switch语句

1. if

关键字:if如果 else否则

格式1:

if(条件){

语句1;...

} 语句2

条件就是boolean类型结果的表达式。

如果条件结果是true,就执行大括号里面的语句1,然后继续执行语句外边的语句2;

如果条件结果是false,跳过大括号里面的语句1,继续执行语句外边的语句2。

格式2:

if(条件){

语句块1;...

}else{

语句块2;...

}语句块3

条件就是boolean类型结果的表达式。

如果条件结果是true,执行语句块1,整个语句结束,继续执行语句外边的语句3

如果条件结果是false,执行语句块2,整个语句结束,继续执行语句外边的语句3

三元运算符其实是if-else语句的简写格式,当执行语句能出现具体数值时可以互换。

格式3:

嵌套语句,一个语句中包含了另一个语句。

if(条件1){

if(条件2){

语句体1;...

}语句2

}语句3

条件1,结果是true去执行条件2,结果是true,执行语句体;如果是false,内部if语句结束。结果是false,整个语句结束。

条件1true——判断条件2 ——条件2true——执行语句块1——执行语句块3

条件1true——判断条件2 ——条件2false——执行语句块2——执行语句块3

条件1 false——执行语句块3

格式4:

多重条件判断。

if(条件1){

语句体1;

}else if(条件2){

语句体2;...

}else if(条件3){

语句体3;...

}...else{

语句体n;

}

所有条件表达式结果是boolean类型。条件123…最多只执行一个,执行了前面的后面直接跳过。

条件1结果是true,执行语句体1,整个语句结束,执行语句后边的代码。如果是false,执行条件2,如果是true,执行语句体2,整个语句结束,执行语句后边的代码。如果是false,执行条件3....,依次类型,所有的条件结果是false,执行语句体n。

格式5:

if(条件1){

执行语句1

}

if(条件2){

执行语句2

}

if(条件3){

执行语句4

}

条件1234…逐个判断,哪个结果是true就执行哪个,可以全部执行也可以全部不执行

注意:

1.条件表达式结果是boolean,只有if后边才能出现条件语句

2.语句体中的语句(大括号中)有且只有一条,这对大括号可以省略不写。

3.写语句时,不要乱加分号,分号出现代表结束。

4.= 叫做赋值, == 比较是否相等

2. switch

关键字: switch case break default

switch其实是 if-else if-else 语句的另外一种表现形式,二者间可以互换使用。

格式:

switch(表达式){

case 值1:

语句体1;

break;

case 值2:

语句体2;

break;

...

default:

语句体n;...

break; //可省略

}

先计算表达式,带着结果进入到switch语句中,首先与第一个case后的值进行匹配,如果匹配上执行语句体1,执行break语句,这个switch语句结束,执行后续代码;如果没有匹配上,找第二个case,与其后的执行进行匹配...,所有case后的值都没有匹配上执行语句体n,即default后的内容,这个语句结束。

说明:

1.表达式结果类型:byte short char int String 枚举

2.break; 语句作用:跳出switch语句,结束switch语句的。

3.switch语句的结束标志是:break; 和 }

4.switch语句中的case是没有顺序的,包括default部分

5.default 语句可有可无,最多只能有一个。

进入switch中,首先从上到下依次找case,那个匹配执行哪个,没有找default

5.如果没有写break语句,那么会继续向下执行,遇到语句就执行,直至遇到结束标志才会停止,不会再进行case后的值的匹配,这种现象称为:穿透性。

6.表达式的结果与case后的值类型得一致。

7.case穿透:如果case1 匹配后,执行完语句体1,再没有写case的情况下,循环不会跳出,而是会填过下面的匹配直接执行下面的语句,知道遇见循环标志。

3.对比总结

\1. If 分支结构的判断语句结果只可以是boolean类型

Switch 分支结构的判断语句可以是

基本数据类型:byte, short, char, int

包装数据类型:Byte, Short, Character, Integer

枚举类型:Enum

字符串类型:String(Jdk 7+ 开始支持)

\2. switch 结构 和 if … else if…else if…else 结构思想相同,匹配一个结果后后面就不匹配、不执行

\3. if…else 和 三元运算符思想相同,结果只有两种,而且每次只会有一个结果产生

4. 循环结构:

概念:某些相同或相似的代码想要重复执行多次,可以使用循环语句来简化编写。

要素:

循环体语句 、初始化变量语句、更改初始化变量语句、循环条件

程序执行到某一处,将某些相同或相似的代码重复执行多次。

代表语句:

1. while语句

while语句:

while(条件){

循环体语句;...

}

条件:是一个boolean类型的结果,用于判断是否进行下一次循环的标志

该结果一旦是false,循环立即停止。

特点: 先判断,后执行;

次数: 0 - n

注意: 更改初始化变量语句,千万别丢了

初始化变量定义在循环的外边,因此循环结束后,依然可以对其进行使用。

2. do-while语句

do{

循环体语句;...

}while(条件);

特点:先执行,后判断

次数:1- n

注意:格式中有一个分号,别落下

3. for语句

for(初始化变量 ; 循环条件 ; 更改初始化变量语句){

循环体语句;...

}

流程:

1.初始化变量语句

2.循环条件

3.循环体语句

4.更改初始化变量语句

5.循环条件

6.循环体语句

7.更改初始化变量语句

...

以此类推,直至循环条件为false,循环停止。

与while类似,都是先判断后执行,执行次数:0-n次。

4. 区别

区别:while,将变量定义在循环外;而for,将变量定义在循环上。

现在定义的变量位置:要么在main方法中,要么在语句中或语句上,这样的变量统称

叫做 局部变量。特点:每个变量都有作用域(使用范围),超出作用域不能再使用.

判定作用域: 在哪定义范围就在哪。

比如:在for中定义的,只能在for中使用。

局部变量特点:

1.没有初始值不能直接使用

2.有作用域,超出范围不能使用

3.在一对大括号中不能出现同名变量

无限循环(死循环):

指的是循环条件值终生为true,不会出现false结果的情况。

while(true){

}

do{

}while(true);

for(;;)

}

现象就是:循环不能停止,想要停止,必须手动加结束标志。

5.嵌套循环

一个循环语句中包含另一个循环语句---嵌套模式。

循环代表语句有三个:for、while、do-while,这三个可以相互嵌套也可以自身嵌套。

以for嵌套为例:

for(){ //时针

for(){ //分针

}

}

6. 跳转语句

从当前语句中跳出来,去执行其他的代码。

以下这两个语句只能在所在的环境中使用,出了环境其他地方不能出现。

break;

switch和循环语句中出现,其他地方不能出现。

作用:跳出当前语句,去执行语句后边的代码,即当前语句结束。目的就是退出当前执行的Switch 或者循环语句,对外层的Switch 或者循环语句没有影响。

continue;:

只能使用在循环语句中,其他地方不能出现。

作用:跳出此次正在进行中的循环,继续下一次循环。

Return:

返回的意思,将产出的数据返回给方法的调用者。返回的是当前的方法。return可以单独写,后面不写返回数据,目的就是中断当前执行的方法。

一旦执行到return,方法立即结束。

四、 方法

1. 基本概念

1. 概念

对应单词:method

概念:在类中,一段具有特定功能的代码段。

2. 格式

格式:

修饰符 返回值类型 方法名(参数列表){

功能语句;...

return 返回值;

}

修饰符: public static

返回值类型: 数据类型(引用、基本)都可以

方法是代表一个功能执行,因此功能执行后,可能会有数据产生,返回值

类型就是用来表示该数据的数据类型。

方法名: 自定义名字,符号标识符的规则和规范即可。

参数列表:变量声明列表。 数据类型 变量名 这种形式可以有多个,中间使用逗号

连接,最后一个没有逗号。作用:用来接收数据。

编写功能时,如果需要外界资源数据辅助完成,此时必须通过参数列表来接

如果不需要,保留小括号,括号中什么都不写。

return 返回值;: 返回值就是一个数据,即功能执行后产出的那个数据。

return:返回的意思,将产出的数据返回给方法的调用者。

一旦执行到return,方法立即结束。

注意:

1.方法要写在类中,方法间都是平级的,没有位置要求

2.方法不调用不执行,没有位置要求看调用顺序,调用顺序决定了方法的执行顺序。

  1. 方法中不能定义方法, 但是,方法中可以调用方法(方法内调用方法就是递归)

返回值类型:

1.具体类型

引用类型、基本类型

2.无返回值类型

方法执行完,并没有数据产出,返回值类型位置上要有内容,因此使用关键字

void来占位。

通常是方法执行完,就可以了,不需要有结果。

调用时,直接写:方法名(参数赋值); 不要在写其他。

return;语句通常省略不写,编译器编译时会自动补全该语句,因为方法结束

依赖于return关键字。

好处:

1.提高代码的复用性

因为相同作用的代码只需要写一遍,需要的时候直接调用就可以。

2.体现了一种封装思想--代码

2. 方法重载

overload

概念:在类中,功能相似的方法允许使用相同的方法名来定义,

前提是保证方法的参数列表不同即可,与返回值类型无关。

参数列表不同:

参数个数、参数类型、参数顺序

调用重载方法时,jvm会根据调用时传递的数据的个数及类型自动找到对应方法执行。

重载方法:

println或print 可以输出打印不同类型的数据。

方法重载注意事项

  • 重载和参数变量名无关

  • 重载和返回值类型无关如void method(int x)与int method(int y)不是方法重载,不能同时存在

  • 重载和修饰符无关

  • 重载看 方法名参数列表

3. 数组

1. 概念

1.一组数据

2.看成是一个容器,存储多个数据。

2.特点

1.存储的数据是同类型的

2.数组长度固定的,不能改变其大小

3.既可以存储基本类型,也可以存储引用类型

4.有下标(角标、索引),操作数组中的数据,从0开始的。

5.获取数组元素个数:数组名.length

获取数组元素最大下标值:数组名.length-1

数组中存储的数据,也叫做元素。

3.格式

动态:

元素类型[] 数组名 = new 元素类型[个数];

静态:

元素类型[] 数组名 = new 元素类型[]{e1,e2,e3,.....};

静态简写格式:

元素类型[] 数组名 = {e1,e2,e3,.....};

注意:元素类型[]的中括号可以写在元素类型的后边也可以写在数组名的后边。

4.二维数组

说明:容器中有容器,外层的容器存储的是内层容器的地址

元素类型[] [] 数组名 = new 元素类型[行数] [列数]; 二维数组的数据个数= 行数*列数

元素类型[] [] 数组名 = {{1,2,3},{4,5,6} ,{7,8}};

"

//创建一个二维数组方法一
​
int[] []arr = new int[3][];
arr[0]  = new int[]{2,5,4,9};
arr[1] = new int[]{1,2,3,4};
arr[2] = new int[]{9,5};
​
//创建二维数组方法二
int[][]arr1= new int[2][3];
arr1[0]= new int[]{1,2,3};
arr1[1]= new int[]{4,5,6};
​
//创建二维数组方法三
int[][] arr2 = {{1,2,3},{4,5,6} ,{7,8}};

"

二维数组的遍历

"

public static void printArray(int[][] arr) {    //arr[i][j]
    for (int i = 0; i < arr.length; i++) {      //外层控制i的循环
        for (int j = 0; j <arr[i].length ; j++) {   //内层控制j的循环
            System.out.print(arr[i][j]+"\t");
        }
        System.out.println();
    }
}

"

5. 数组的应用

1.数组元素遍历(依次打印)

public static  void printArray(int []arr){
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i]+"\t");
    }
}

2.数组元素获取最大值或最小值

public static int getMin(int[] arr){
    int min = arr[0]; //默认第一个最小
    for(int i = 1; i < arr.length; i++){
        if(min > arr[i])
            min = arr[i];
    }
    return min;
}

3.反转数组元素

第一种方法

public static void  reverseArray(int[] arr){ // arr = arr 引用传递
    //交换
    for(int i = 0; i < arr.length/2 ;i++){
         int temp = arr[i];
         arr[i] = arr[arr.length-1-i];
         arr[arr.length-1-i] = temp;
    }
    
}

第二种方法

public static int[]  reverseArray1(int[] arr){ // arr = arr 引用传递
    //交换
    for(int start =0, end = arr.length-1; start < end; start ++, end--){
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
    }
    
    return arr;
}

4.数组元素的查找和排序

一维数组查询

public static int findArray(int[] arr,int a){
    for (int i = 0; i <arr.length ; i++) {
        if(arr[i] == a){
            return i;
        }
    }
    return -1;
}

二维数组查询

public static String findArray(int[][] arr,int a){
    for (int i = 0; i <arr.length ; i++) {
        for (int j = 0; j <arr[i].length ; j++) {
            if(arr[i][j] == a){
                return i+","+j;
            }
        }
​
    }
    return -1+","+-1;
}

一维数组的排序

public static void sort(int [] arr){
    for (int i = 0; i < arr.length-1; i++) {
        for (int j = 0; j <arr.length-1-i ; j++) {
            if (arr[j]>arr[j+1]){
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

6. 数组内存理解

jvm启动,将内存划分5个区域,从而提高效率。

寄存器:控制执行哪行代码

本地方法区:调用底层方法。

与我们有关的: 栈、堆、方法区

栈:所有的方法执行都是在栈中完成的。一旦方法执行完会出栈。

特点:先进后出。

堆:存储容器或对象或实体

只要是通过关键字new创建的都是。

默认值:

整型: 0 float: 0.0f double :0.0 boolean:false char: ‘\u0000’

引用:null

int[] arr = new int[2];

只要在堆中开辟空间,就会为其分配内存地址值。

在该空间中存储默认值,依赖于空间中元素的数据类型。

将内存地址值赋值给arr引用变量,arr指向了堆中的容器。

垃圾:在堆中的容器,如果没有任何引用变量来指向,那么这个容器是垃圾。

容器一旦是垃圾,最终会被垃圾回收器(GC机制)给回收。

引用变量值为null,说明变量和容器间没有关系,这个容器就是垃圾了。

7. 方法传参

基本类型:(包括String)

值传递,仅仅是将数值赋值给方法的参数,在方法内部做的操作,并不影响原来的变量

引用类型:(除了string)

引用传递,将地址值进行传递,一个引用变量对其进行改变,另一个引用看到的是改变后的结果。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值