Java语言基础

一、关键字

二、字面量

(1)整数和小数直接使用;

(2)字符串需要加上双引号;

(3)字符需要加上单引号;

(4)布尔只有两个值true和false。

三、变量

两个注意点:

1、正常都是一条语句中只定义一个变量,

如int a = 100;

int b = 200;

其实一条语句中也可以定义多个变量,即int a = 100, b = 200;。

2、变量一定要初始化吗?

方法中的局部变量在使用之前必须进行赋值;

中的成员变量在定义的时候可以不进行初始化。

Java 变量一定要初始化吗?CSDN博客

四、数据类型

1、基本数据类型

①整数:byte、short、int、long

②小数:float、double

整数和小数两个数据类型的取值范围如下图所示:

byte < short < int < long < float < double

③布尔:boolean

④字符:char

问题1:Java中的long和float在使用时为什么需要加L和F?

(1)在Java中,当出现一个整数字面量时,我们就默认这个整数是int型,所以将此整数赋给除int以外的任何一种类型的变量时都会进行数据转换。

①如果这个数处于int数据类型的范围,在赋给long类型的变量时会自动进行数据类型提升,由int转换为long,不会提示出错;

②受限于int型,有些数它存不了,如果这个数超出int数据类型能表示的范围,则会提示错误,然后加上L则可表明这是一个long类型的数据就合法了。

代码如下:

(2)同理float也一样。在Java中出现的小数的默认数据类型是double。

①给出的小数假设是在double数据类型的范围内的,但是为了赋给float类型的变量,必须加上F强制转换为float。

详情见文章链接:Java定义的long和float为什么需要加L和F?CSDN博客

问题2:为什么float的取值范围大于long? 

float = (-1)^{S}\cdot M\cdot 2^{E}

float类型的数据在内存中的存储是这样的:

其中第一位,表示符号位,即S;

接下来的8位,即第二位到第九位,表示指数域E;

剩下的23位,即第十到第三十二位,表示小数域M。

具体如何计算这里就不再详细介绍了,有时间可以看一下下面这些文章:

【详细解说】单精度浮点数float取值范围_float范围-CSDN博客

float 和 long 比较 - HJ0101 - 博客园 (cnblogs.com)

2、引用数据类型
3、数据类型之间的转换

整数和小数它们所能表示的数的取值范围如下:

byte < short < int < long < float < double

(1)自动转换

①什么时候转换?

例如当参与运算的变量数据类型不一致,会先转换成一致的再进行计算。

②转换的依据?

范围小的可自动提升位范围大的;

③byte、short、char这三种类型的变量在参与运算时会自动向上提升为int,然后再参与运算。

例子1,a和b已经向上提升为int型,所以计算的结果为int型,赋给int型变量是没有问题的。

byte a = 5;
byte b = 8;
int result = a + b;

例子2,char类型的变量在参运计算时会自动转换为ASCII码表中的int型整数。所以c自动向上转型为int型整数97,与int整数进行加法运算后的结果为109。

char c = 'a';
int result = c + 12;
(2)强制转换

①范围大的想向范围小的进行转换时就需要强制转换,如int a = (int)10L;

(3)自动转换和强制转换发生在两种情况下

①赋值:小的赋给为大的自动转换;大的赋给小的则强制转换。

②计算:两种不同类型的数据进行计算,要先转换为同一数据类型。

Example

1、在Java中整数的默认数据类型是int,那么 byte  a = 10;为什么没有报错呢?

①问题:赋值的左边是一个int型的整数10,右边是byte型的变量,从范围大的向小的转换就需要强制,但是此处并没有看到强制转换出现。

②答案:这里有一个规则1:当赋值左边的字母量小于右边数据类型的取值范围时,Java编译器在编译的时候会自动为其加上强转。通过反编译可以看到,下面来测试一下:并没有看到。

2、在下面这个例子中,byte型变量a和b在参与计算的时候向上提升为int型,所以计算的结果为int型(计算), 但是如果要赋给byte型变量就需要强转(赋值),所以有两次数据转换过程。

byte a = 5;
byte b = 8;
byte result = (short)a + b;

①但是如果直接byte result = 5 + 8;是没有问题的,为什么呢?

 5和8是int型,计算完的结果13也是int型,赋值左边的字面量小于右边变量的数据类型的取值范围,Java编译器在编译的时候会自动为其加上强转。(和1类似)

②那为什么byte result = a + b;就不行呢?

因为a和b是变量,所以必须加上强转。

五、标识符

1、变量和方法的命名

硬性规则:

①包括数字、字母、下划线和美元符

②不能以数字开头

③区分大小写

④不能是关键字

软规则:

符合小驼峰,如果只有一个单词,则只需小写;如果两个及以上个单词,则第一个单词小写,第二个及后面的单词需要首字母大写,如setPrice等等。

2、类名的命名

软规则:

符合大驼峰,如果只有一个单词,则首字母大写;如果两个及以上个单词,则每一个单词的首字母都需大写。

六、运算符

1、算术运算符:+ - * / % ++ --
(1)关于后面的自增自减运算符a++和++a的区别

①a++:先使用a原先的值,再将a+1;

②++a:先将a+1,再使用。

int a = 5;//定义一个变量;
int b = 5;
int x = 2*++a;
int y = 2*b++;
System.out.println("自增运算符前缀运算后a="+a+",x="+x);
System.out.println("自增运算符后缀运算后b="+b+",y="+y);

 输出结果:

(2)+运算符的两个作用

如果有字符串的出现,+是拼接字符串,其他的都是加法运算。

①作为数字之间的加法运算

②字符串的拼接 

当+的某一边出现了字符串时,此时就将+左右两边的数据进行拼接生成一个新的字符串。

下面是字符串分别与数字、布尔、字符类型的字面量进行+操作:

System.out.println("abc" + 123);
System.out.println("abc" + true);
System.out.println("abc" + 'd');

结果如下:

2、赋值运算符:=
3、关系运算符:> >= < <= == !=
4、逻辑运算符:& | ^ !
&(逻辑与)两边都为真才为真
|(逻辑或)一边为真就是真
^(逻辑异或)两边相同为假,不同为真
!(逻辑非)取反

5、短路逻辑运算符:&& ||

短路逻辑运算符的出现是为了减少第二个条件的判断,比如与,第一边为假第二边就不用判断了。

6、三元运算符

因为需要3个操作数,所以称为三元操作符,格式:(条件表达式) ? 表达式1 : 表达式2。读作如果条件为true,则返回表达式1的值,为false则返回表达式2的值。

七、表达式、语句和块

在学习完字面量、变量以及运算符之后就可以进行一个操作了。

1、表达式

如x + y,表达式的计算结果为单个值。

2、语句

以分号结束,如int result = x + y;和流程控制语句。

3、块

由很多语句组成。

八、流程控制语句

一、分支语句
1、if语句

(1)第一种格式:只有一个条件,只关注满足条件时要做什么。

if(条件表达式){
    语句体;
}

注意点:

如果语句体只有一行代码,则if后面的大括号可以省略,但是不建议这样做。

(2)第二种格式:只有一个条件,关注满足条件时要做什么和不满足条件要做什么!

if(条件表达式){
    语句体;
}
else{
    语句体;
}

(3)第三种格式:多条件判断,一般是判断一个值属于众多条件表达式中的哪一个。

关注满足条件时要做什么,不满足条件时进入到下一个条件的判断。

if(条件表达式1){
    语句体1;
}
else if(条件表达式2){
    语句体2;
}
...

自己总结就是,else的后面可以是第一种格式,也可以是第二种格式。

2、switch语句

多条件判断时用if语句很麻烦,这里就出现了switch。

基本格式:

switch(条件表达式){
    case 值1:
        语句体1;
        break;
    case 值2:
        语句体2;
        break;
        ...
    default:
        语句体n;
        break;
}

有一个疑问就是case后面的语句体要用大括号括起来吗?

可以写很多语句,可以不用大括号括起来。

但是加和不加的区别:
①加了之后,大括号框定了作用域,大括号内定义的变量只在大括号内部有效。
②不加的话,一个case中定义的变量,会在另一个case中也能访问,不安全。

(1)关于default的位置以及default是否可以省略?

关于default的位置:default也可以放在case语句的前面,放在哪里都可以,不一定要放在最后的位置。

关于default是否可以省略:答案是可以,语法没有错误,但是当switch中条件表达式的值与case中的所有值都不匹配时会没有输出,这种情况不好,容易让人摸不着头脑,为了避免这种情况一般都加上default。

(2)case穿透

如果当前匹配的case语句体中没有break,当匹配成功后,会继续执行后续所有case的语句体,直到方法结束或者遇到break。利用这一特性我们可以少写一些代码。

(3)JDK12的switch新特性:简化switch的书写

具体怎么简化的呢?

①将冒号:改为->

②省略break,然后将语句体用大括号括起来,而且如果语句体只有一句,那大括号也可以省略。

有一个问题,就是我发现总是可以这样省略大括号,但是到了后面我根本就记不得什么时候可以省,什么时候不可以省。很烦。或者这样想,如果语句体只有一句那么大括号自然可以省略。

switch(条件表达式){
    case 值1 -> {
        语句体1;
    }
    case 值2 -> {
        语句体2;
    }
        ...
    default -> {
        语句体3;
    }
}

//语句体只有一句时省略大括号
switch(条件表达式){
    case 值1 -> 语句体1;
    case 值2 -> 语句体2;
        ...
    default -> 语句体3;
    }
}

(4)if的第三种格式和switch分别什么时候使用呢?

判断一个变量属于众多条件中的哪一个。

if一般是判断变量是否属于某个范围,而switch则一般是判断变量是哪个值。

二、循环语句
1、for
2、while
3、break和continue
  • 65
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java语言是一种面向对象的编程语言,由Sun Microsystems公司于1995年推出。它具有简单易学、跨平台、安全可靠等特点,广泛应用于各种软件开发领域。 以下是一些Java语言基础知识: 1. Java程序的基本结构:一个Java程序由一个或多个类组成,每个类包含属性(变量)和方法(函数)。一个Java程序必须包含一个类,并且该类必须包含一个名为`main`的方法作为程序的入口。 2. 数据类型:Java语言提供了多种数据类型,包括基本数据类型(如整数、浮点数、字符、布尔值等)和引用数据类型(如数组、类对象等)。 3. 变量和常量:在Java中,使用关键字`var`或指定具体的数据类型来声明变量。变量可以被赋予不同的值,而常量则是一旦赋值就不能再改变的值。 4. 控制流程:Java语言提供了各种控制流程语句,如条件语句(`if-else`、`switch`)、循环语句(`for`、`while`、`do-while`)和跳转语句(`break`、`continue`、`return`)等,用于控制程序的执行流程。 5. 面向对象:Java是一种面向对象的编程语言,支持封装、继承和多态等面向对象的特性。面向对象编程的核心是类和对象,通过定义类来创建对象,并通过对象进行方法调用和属性访问。 6. 异常处理:Java提供了异常处理机制,用于处理程序运行时可能发生的错误或异常情况。通过捕获和处理异常,可以使程序具备更好的健壮性和容错性。 7. 输入输出:Java提供了丰富的输入输出类和方法,可以实现与用户交互、读写文件等功能。 这些只是Java语言基础知识,Java还有很多其他的特性和功能。如果你对特定的主题或问题有更多的兴趣,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值