Java基础语法(上)
文章目录
一.关键字&标识符
提示:以下是本篇文章正文内容,下面案例可供参考
1.关键字
Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。Java的关键字对Java的编译器 有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。
书写时必须注意关键字为小写,Java中严格区分大小写
关键字按照作用不同可分为:
-
访问控制
-
类方法变量修饰符
-
程序控制
-
错误处理
-
包相关
-
基本类型
-
变量引用
-
保留字
图片来源: https://blog.csdn.net/z1web/article/details/89068217
下面是Java中每个关键字的含义
关键字 | 含义 |
---|---|
abstract | 表明类或者成员方法具有抽象属性 |
assert | 断言,用来进行程序调试 |
boolean | 基本数据类型之一,声明布尔类型的关键字 |
break | 提前跳出一个块 |
byte | 基本数据类型之一,字节类型 |
case | 用在switch语句之中,表示其中的一个分支 |
catch | 用在异常处理中,用来捕捉异常 |
char | 基本数据类型之一,字符类型 |
class | 声明一个类 |
const | 保留关键字,没有具体含义 |
continue | 回到一个块的开始处 |
default | 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
do | 用在do-while循环结构中 |
double | 基本数据类型之一,双精度浮点数类型 |
else | 用在条件语句中,表明当条件不成立时的分支 |
enum | 枚举 |
extends | 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
float | 基本数据类型之一,单精度浮点数类型 |
for | 一种循环结构的引导词 |
goto | 保留关键字,没有具体含义 |
if | 条件语句的引导词 |
implements | 表明一个类实现了给定的接口 |
import | 表明要访问指定的类或包 |
instanceof | 用来测试一个对象是否是指定类型的实例对象 |
int | 基本数据类型之一,整数类型 |
interface | 接口 |
long | 基本数据类型之一,长整数类型 |
native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
new | 用来创建新实例对象 |
package | 包 |
private | 一种访问控制方式:私用模式 |
protected | 一种访问控制方式:保护模式 |
public | 一种访问控制方式:共用模式 |
return | 从成员方法中返回数据 |
short | 基本数据类型之一,短整数类型 |
static | 表明具有静态属性 |
strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754)算术规范 |
super | 表明当前对象的父类型的引用或者父类型的构造方法 |
switch | 分支语句结构的引导词 |
synchronized | 表明一段代码需要同步执行 |
this | 指向当前实例对象的引用 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
transient | 声明不用序列化的成员域 |
try | 尝试一个可能抛出异常的程序块 |
void | 声明当前成员方法没有返回值 |
volatile | 表明两个或者多个变量必须同步地发生变化 |
while | 用在循环结构中 |
注意:null,false,true这几个保留字不是关键字,而是文字,包含Java定义的值.不可当标识符使用
2.标识符
标识符分为关键字和用户自定义标识符
对类,类的对象,方法,变量等要素进行的定义命名,标识符可有一个或多个字符.在Java中,其命名规则如下
- 标识符由数字(0~9)、美元符号($)、下划线(_)以及 Unicode 字符集中符号大于 0xC0 的所有符号组合构成.
- 必须以字母、下划线和美元符号开头,后面可以是任何字母、数字、美元符号或下划线.
- 不能以数字开头,也不能使用任何 Java 关键字作为标识符 .
- 标识符可以包含关键字,但不能与关键字重名.
- 严格区分大小写,不能有空格.
- 不能使用中文及拼音
2.1各种类型命名规范
-
项目名全部小写 (project)
-
包名全部小写 (package)
-
类名首字母大写,其余组成词首字母依次大写. (CarClass)
-
变量名,方法名首字母小写,如果名称由多个单词组成,除首字母外的每个单词的首字母都要大写. (newTest)
-
常量名全部大写. (MAX)
二.Java数据类型
1.基本数据类型
其中声明long型与float型变量时,需添加后缀(l或L,F或f)
上图,idea未报错
不加就会报错
基本数据类型之间的转换
- 默认转换
小容量默认转换为大容量
容量从小到大依次为: byte/short/char–>int–>long–>float–>double
byte,short,char三者在运算中会转换为int,而不会相互转换
操作数1类型 | 操作数2 类型 | 转换后的类型 |
---|---|---|
byte、short、char | int | int |
byte、short、char、int | long | long |
byte、short、char、int、long | float | float |
byte、short、char、int、long、float | double | double |
- 强制转换
- 隐式强制转换
在进行算数操作时,会把结果的类型“隐式”提升为 int 类型,此时再使用 short/byte/char 类型的变量引用时,就会出现“损失精度”
short s=2;
byte b=3;
char c='a';
//隐式强制转换
short s1=s+b+c;
byte b1=s+b+c;
char c1=s+b+c;
运行结果:
解决方法:
-
此時可以用int 或字节更大的类型变量来接收运算结果
-
对运算结果进行强制转换
short s=2;
byte b=3;
char c='a';
//用字节大的来接收,或强制转换
short s2=(short)(s-b+c);
int i=s-b+c;
- 显式强制转换
//显式强制转换
int m;
double d=10.51;
m=(int)d;
System.out.println("m="+m);
System.out.println("d="+d);
结果:
2.引用数据类型
引用数据类型: 类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
所有非基本数据类型都可称为引用数据类型
基本类型与引用类型的区别
基本变量类型
- 在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的
引用变量类型
- 只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
//基本数据类型
int a=100;
double d=1000.0;
boolean b=false;
//引用数据类型
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
三.运算符
1.算数运算符
运算符 | 功能 |
---|---|
+ | 1.算数运算 2.连接字符串 |
- | 减 |
* | 乘 |
/ | 求商(取整) |
% | 求余/模 |
++ | 自增 |
– | 自减 |
+
int a=10;
short b=10;
String str="abc";
System.out.println(a+b);//算数运算
/*
若 "+"后紧跟字符串,则字符串后的所有"+"都为字符串连接符
字符串前的"+"为算数运算符
*/
System.out.println(str+a+b);
System.out.println(b+a+str+b+a);
System.out.println(a+b+str+b);
运算结果:
注意:
若 "+"后紧跟字符串,则字符串后的所有"+"都为字符串连接符,将后面的数值转换为字符串进行连接
字符串前的"+"为算数运算符,数值也依旧按照规则运算后再和字符串连接
++ & –
++:
int a=0;
int b=a++;
//先赋值(0),再自增 a=1,b=0;
int c=++a;
//先自增(a++-->a=a+1-->a=1+1=2),再赋值(c=2)
System.out.println("b="+b);
System.out.println("c="+c);
运算结果:
- - 与++同理.
2.比较运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
instanceof | 检查是否是类的对象 | “Hello” instanceof String | true |
比较运算符的结果都是boolean型(false/true).
3.逻辑运算符
逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。
逻辑运算符的真值表
操作数1 | 操作数2 | 短路与 | 短路或 | 逻辑非 | 逻辑异或 | 逻辑与 | 逻辑或 |
---|---|---|---|---|---|---|---|
A | B | A && B | A || B | ! A | A ∧ B | A & B | A | B |
T | T | T | T | F | F | T | T |
T | F | F | T | F | T | F | T |
F | T | F | T | T | T | F | T |
F | F | F | F | T | F | F | F |
其中 & | ^ ! 既可参与逻辑运算(false,true) 也可参与位运算(二进制bit位运算 ,eg: 5^10)
逻辑与 | :
左边无论真假,右边都进行运算
短路或 ||:
遇到第一个true发生短路,不再执行||后的语句
逻辑或 & :
左边无论真假,右边都进行运算
短路与 &&:
遇到第一个false发生短路,不再执行&&后的语句
逻辑异或 ^ :
当左右都为true时,结果为false
"异"时为真,"同"时为假
4.赋值运算符
运算符 | 意义 | 实例 | 等价于 |
---|---|---|---|
= | 赋值 | n=25 | |
+= | 加赋值 | n += 25 | n=n+25 |
-= | 减赋值 | n -= 25 | n=n-25 |
*= | 乘赋值 | n *= 25 | n=n*25 |
/= | 除赋值 | n /= 25 | n=n/25 |
%= | 求余赋值 | n %= 25 | n=n%25 |
<<= | 左移位赋值 | n <<= 25 | n=n<<25 |
>>= | 右移位赋值 | n >>= 25 | n=n>>25 |
&= | 按位与赋值 | n &= OxF2F2 | n=n&OxF2F2 |
^= | 按位异或赋值 | n ^= OxF2F2 | n=n ^ OxF2F2 |
|= | 按位或赋值 | n |= OxF2F2 | n=n | OxF2F2 |
5.条件运算符
运算符: 条件表达式?(表达式1):(表达式2);
当条件表达式的结果
为true时整个条件表达式结果是表达式1的值
为false时整个条件表达式结果是表达式2 的值
eg. max=(a>b)?a:b 将a和b二者中较大的一个赋给max。
当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。
eg. w < x ? x + w : x < y ? x : y
与 w < x ? x + w : ( x < y ? x : y) 等价
与 (w < x ? x + w : x < y) ? x : y 不等价
a > b ? c > d ? e : f : g
与a > b ? (c > d ? e : f) : g等价
6.位运算符
Operator | Usage | Description |
---|---|---|
按位与 | a & b | 在a,b的位表示中,每一个对应的位都为1则返回1, 否则返回0. |
按位或 | a | b | 在a,b的位表示中,每一个对应的位,只要有一个为1则返回1, 否则返回0. |
按位异或 | a ^ b | 在a,b的位表示中,每一个对应的位,两个不相同则返回1,相同则返回0. |
按位非 | ~ a | 反转被操作数的位。 |
左移 | a << b | 将a的二进制串向左移动b位,右边移入0. |
算术右移 | a >> b | 把a的二进制表示向右移动b位,丢弃被移出的所有位 (算术右移左边空出的位是根据最高位是0和1来进行填充的) |
无符号右移(左边空出位用0填充) | a >>> b | 把a的二进制表示向右移动b位,丢弃被移出的所有位,并把左边空出的位都填充为0 |
package p1.OperatorDemo;
import java.util.Scanner;
/*
* 位运算符
* 按位与 & 1&1=1 1&0=0 0&1=0
* 按位或 | 1|1=1 1|0=1 0|1=1
* 按位异或 ^ 1^1=0 0^0=0 1^0=1 0^1=1
* 按位取反 ~ 二进制按补码各位取反
* 左移 <<
* (带符号)右移 >>
* 无符号右移 >>>
* */
public class C1_5 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("输入两个数,得其按位与/或/异或/取反的结果");
int a=sc.nextInt();
int b=sc.nextInt();
// & | ~ ^
// 0010
// 0011
System.out.println("按位与: "+(a&b));// 0010
System.out.println("按位或: "+(a|b));// 0011
System.out.println("按位异或: "+(a^b));// 0001
System.out.println("按位取反: "+(~++a));//
System.out.println("按位取反: "+(~b));//
System.out.println();
System.out.println("输入一个数,得其左右移运算结果:\r\n");
int c=sc.nextInt();
System.out.println("你想左/右移多少位?");
int x=sc.nextInt();
System.out.println();
// 左移 一位 相当于乘2的1次方
System.out.println("左移: "+(c<<x));
// (带符号)右移 一位 相当于除2的1次方
System.out.println("带符号右移: "+(c>>x));
//无符号右移
System.out.println("无符号右移:"+(a>>>x));
}
}
运行结果:
本人新✋,初来乍到,:✒️此拙作以记录学习中的知识点滴,若能帮助到同在学习的新手,不甚荣幸.若有不对的地方,还请各位大佬斧正,不吝赐教🙏!