当前位置: 首页 > 工具软件 > java-bible > 使用案例 >

java基础认识_认识Java-1

孔光赫
2023-12-01

引言:认识Java

java的常量,变量,逻辑等

java中的数组特点

java的内存划分

常量

常量类型

字符串常量'abc','hello'

整数常量100,200

浮点数常量2.5,3.14

字符常量:单引号引起来的单个字符'a','w','2','啊'可以是汉字,但是不能什么都没有

布尔常量false,true

空常量null代表没有任何数据(null不能用来打印输出)

基本数据类型数据类型

关键字

内存占用

取值范围

字节型

byte

1字节

-128 ~ 127

短整型

short

2字节

-2^15 ~ 2^15-1

整型

int

4字节

-2^31 ~ 2^31-1

长整型

long

8字节

-2^63 ~ 2^63-1

单精度浮点型

float

4字节

超大(远大于long)

双精度浮点型

double

8字节

超级大

字符型

char

2字节

0~65535(2^16-1)

布尔类型

boolean

1字节

true & false

整数型 byte short int long

浮点型 float double

字符型 char

布尔型 boolean

注意:

字符串不是基本类型,是引用类型

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

数字范围和字节数不一定相关,例如float和long

浮点数默认类型是double,用float,得加F后缀

整数默认为int,用long,要加L后缀

变量

定义变量注意他们的取值范围:

1

2

3byte x = 10; //正确

byte x = 128; //错误

// byte范围在-128~127之间

注意long

1

2long x = 300000000000; // 错误

long x = 300000000000L; //正确

注意float

1

2float x = 2.5; //错误

float x = 2.5F; //正确

注意事项:

变量名不能重复

float和long要加后缀

未赋值的变量不可以使用

使用byte和short要注意右侧的数据范围

变量不要超出变量的取值范围

一定要先声明后使用,java是从上到下执行的

数据类型转换

自动类型转换(隐式)自动完成

数据范围从小到大转换

布尔类型在JAVA中就是布尔,不能运算,不是0,1

强制转换1

2int num = (int)100L;

//带上括号就可以实现强制转换

注意:

强制类型转换要谨慎使用,易发生精度损失、数据溢出

byte/short/char都可以数学运算,都会被首先提升为int来进行运算1

2

3

4

5byte x = 60;

byte y = 50;

byte result = x + y;

//这样会报错

//byte + byte -> int + int -> int != byte

在运算过程中,他们会变为int

可以改成

1int result = x + y;

或者

1byte result = byte(x + y);

运算符

运算符类型

加减乘除 +-*/

取模 %只对于整数有效

自增自减 ++ --

赋值运算符 =

比较运算符 > < == <= >=

逻辑运算符 && || !

三元运算符 ?:

加法多种用法

加法的运算结果是运算范围最大的那一个

char类型的加法会变为int

可以用于字符串相加减

逻辑运算符

逻辑运算符||和&&有短路效果,

如果根据左边已经可以判断得到最终的结果,右侧的代码将不会执行

赋值运算符

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

方法

定义格式

1

2

3public static void xxx(){

//方法体

}

调用方法

单独调用 function()

打印调用 System.out.print(function()

赋值调用 int x = function

注意:

void的方法只能单独调用,也可以使用return;直接返回

同c++,可以根据数据类型的不同和参数的数量不同来实现重载。

唯一的区别–可以通过多类型的顺序区别

1

2sum(int a,double b);

sum(double a, int b);

语句结构

基本内容同c语言

区别:

switch(x)其中x只能为

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

引用数据类型:String/enum

数组

数组是一种引用数据类型

特点:

一个数组中的数字类型一致

数组的长度在运行期间长度不可改变

初始化:

动态初始化——指定长度

静态初始化——指定内容,自动推算长度‘

创建:1

2

3String[] str;

str = new String[5];//动态

str = new String[]{"a","b","c"};//静态

可以化为一步

1

2

3

4int[] sum = new int[50];

//动态指定长度创建数组

String[] arr = new String[]{"你好啊","你是谁啊"};

//静态指定数组内容创建数组

当使用动态初始化数组的时候,其中的元素会自动拥有一个默认值:规则如下

1

2

3

4

5

6graph LR

整数-->0

浮点-->0.0

字符-->'\u000'

布尔-->false

引用-->null

数组长度:

直接.length即可

1System.out.println(arr.length)

访问:

直接访问数组名,得到该数组对应的内存地址哈希值

1[I@1b6d3586

传递数组参数

1public static void fun(int[] xxx){}

引用:当一个数组赋值给数组时,他们指向同一片内存

1

2

3

4

5int[] arr = new int[5];

int[] arr2 = arr;

arr[0]=1;

System.out.println(arr[0]);// 1

System.out.println(arr2[0]);// 1

数组的长度不可变

1

2

3

4

5

6

7int[] arr = new int[5];

System.out.println(arr.length);//5

arr = new int[10];

System.out.println(arr.length);//10

//这样看似是更改了数组的长度

//其实是创建了一个新的长度的数组

//更改了原先数组指向的地址

内存划分

java的内存主要划分为五个部分

栈(Stack):存放的都是方法中的局部变量,方法的运行一定要在栈当中(方法的参数,或者是方法{}内中的变量,一旦超出作用域,立马从栈内存消失)

堆(Heap):new建立的东西(堆内中的东西都有一个地址,堆内存中的东西都有一个默认值)

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

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

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

注意:

当我们提到java的基本类型时,一般都说是八种。但在Thinking in java 这本java圣经中,将void归为基本类型。

倒也可以说得通:

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

基本类型: 数据在栈中划分内存,值存储在栈上

引用类型: 数据在栈中划分一块内存用来存储其引用(地址),而其真正的数据存放在堆中

而void不可以new出来(因为 Void 的源码中,将构造函数设置为 private 的,所以外部不能 new 对象),void是存储在栈上的,所以将它归为了基本类型

在java的Class反射内有一个方法isPrimitive() ,可以判断是否是基本类型,当我们输入代码void.class.isPrimitive(),它的返回值是true,再一次证明void分为基本类型是有道理的

 类似资料: