引言
本章节主要来讨论关于Java的基础语法,这部分语法在几乎所有编程语言中都一样,同时它也是一门编程语言基础中的础。
只要你写代码基本都会用的上。
变量
运算法
内存:
java虚拟机 默认分配的物理内存容量是计算机的1/8
计算机存储单位:
bit byte kb mb gb tb pb eb zb yb bb nb db cb xb
一. 变量
1.1 什么是变量
变量,可变化的量,可变化的数据,在计算机中,指的是一块数据空间,允许程序执行期间可以随时修改它的数据值。 简单的说就是用来存数据的容器。
直接量 (字面量) 固定不变得,就是常量。 1
1.2 变量三要素
变量的三要素 数据类型 变量名 变量值,一个变量就是由这三个方面组成的。
- 类型: 决定了变量的格式和范围。
- 变量名:该变量对外访问的代号。
- 值:变量具体的数据值。
类型 变量名 值
1.2.1 变量的类型要求
java语言是一门强类型( 所谓强类型就是对类型敏感,必须明确说明 )所以每个变量在声明前必要想清楚它将要保存什么样的数据,不同的数据需要不同类型的变量来存储。
Java 语言中对于类型的划分整体 分为基本数据类型 和 引用数据类型
-
基本数据类型 8个
byte short int long float double char boolean
-
引用数据类型 无数个
** String List Object 数组 自定义类 接口 **…
1.2.2 变量的名字要求
事实上,每个变量在内存中都有一个地址,叫内存地址,但是这个地址不好记,通过为这个变量命名的方式,来简化我们对变量空间的访问,命名遵循标识符规则。
1.2.3 变量值的要求
变量值,变量存储的具体数据,java语言强类型,要求变量的值必须和类型一致或兼容。
1.3 变量声明定义
语法1 :数据类型 变量名 = 值 ;
public static void main(String[] args){
int num = 100;
}
声明变量且为变量赋值
注意事项:
1、在一个方法块里面,不能重复定义相同类型和相同名称的变量;
2、定义在方法块内的变量,我们称为局部变量,局部变量必须先定义赋值,才能使用;
3、定义在类的作用域范围,方法块外的变量 我们称为:全局变量(成员变量);
4、全局变量和局局变量,定义变量类型和名称可以相同;
5、如果有相同的全局变量和局部变量,那么局部变量的优先级要高于全局变量;
6、全局变量,默认初始化的时候是有值的,而局部是没有的;
7、全局变量作用是在整个class范围内,局部变量只能在当前方法块中使用;
语法 2: 数据类型 变量名;
public static void main(String[] args){
int m;
int k;
int x;
}
只是声明变量没有赋值 , 可以后续赋值。
语法3 声明多个变量
public static void main(String[] args){
int m,k,x;
}
一次性声明多个变量,使用 逗号 , 分隔。
语法4 声明多个变量 且赋值
public static void main(String[] args){
int m =4 , k = 5 , x;
}
多个变量声明中间使用 逗号 , 分隔,根据需求为部分变量 或者全部变量赋值
定义在方法内部的变量使用前需要初始化值。
1.4 变量的作用范围
- 全局变量
定义在方法外部,可以在整个类中使用,即便不赋值,系统也将为其初始化默认值。
- 局部变量
局部变量只能其所在范围内使用。 局部变量使用前必须先赋值。
相同作用域下变量 变量名不允许重复。不同作用域下,变量名可以重复,且使用时遵循就近原则。
二.数据类型
2.1 数据类型介绍
不同数据类型由于占用空不同,直接导致保存数据范围大小不同,实际使用的时候可以选择合理的类型,可有效利用内存。
byte( 1字节=8bit位 ) short(2字节) int(4字节) long(8字节) ** ** float(4) double(8) boolean( 1 ) char( 2 )
char 取值范围 0-2^16
2.2 二进制
进制:常见的 10进制 2进制 8进制 16进制 ,进制往往就是说逢多少需要进位。不同的进制数码(符号)不同,比如10进制( 0 1 2 3 4 5 6 7 8 9 ) 比如2进制( 0 1 ) 比如16进制( 0 1 2 3 4 5 6 7 8 9 A B C D E F ) 比如 8 进制 ( 0 1 2 3 4 5 6 7 )
二进制,是计算技术中广泛采用的一种数制,由德国数理哲学大师莱布尼茨于1679年发明。二进制数据是用0和1两个数码来表示的数。
在二进制中 一个0 或1表示一个bit(比特),8个bit 等于 一个byte(字节) 1 byte(字节)= 8bit
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
---|
其中 最高位为符号位,0表示正数 1表示负数
【反码】表示法规定: 正数的反码与原码相同,负数的反码是对其原码逐位取反,但不包含符号位。
-5源码
1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
---|
-5反码
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
---|
【补码】表示法规定: 正数的补码与原码相同,负数的补码是对其反码+1。
-5补码
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
---|
计算中是使用补码来表示和存储数据的
2.3 整型
public static void main(String[] args){
byte a = 123;
short b = 300;
int c = 123345;
long pi = 600000000L;
}
2.4 浮点型
public static void main(String[] args){
float x = 123.4f;
double pi = 3.14d;
}
2.5 布尔
public static void main(String[] args){
// 标准赋值
boolean isVIP = false;
}
2.6 字符型
ascii码赋值
// unicode编码
public static void main(String[] args){
// 标准赋值
char sex = '';
// ascii码赋值
char sex= 10;
// unicode编码
char sex = '\u7537'
}
用于保存单个字符
\u unicode \n 换行 \t 制表符 ’ 单引号 " 双引号 \ 斜杠 */
2.7 类型转换
类型转换是变量赋值的一种特殊情况,详细来看分为两种。
- 自动类型提升
当把一个 变量或者值赋值给一个比自身范围更大精度更高的变量时,是可以的,同时该变量或值的类型会被提升。
举例
public static void main(String[] args){
byte m = 12;
int x = m;
double money = 12;
}
- 强制类型转换
相反,如果把一个范围更大精度更高的变量或值 赋值给一个跟小更低的变量,则编译器是拒绝的,如果非得要这么干,那么就需要强制。这样可能会找出数据精度的丢失。
public static void main(String[] args){
double money = 12;
int m = (int)money;
}
数值 类型精度排序 byte < short < int < long < float < double
java 里面默认的类型就是一个int
三、键盘输入
目前咱们的数据都是直接给定的数据,这样不是灵活,如果我们需要动态的获取用户的输入呢?
3.1 导入包
import java.util.Scanner;
import java.util.*;
需要写在源文件的第一行顶部( 类的外部 )
3.2 使用输入对象
Scanner sc = new Scanner(System.in);
3.3 使用输入方法
// 输入一个整数数据
int num = sc.nextInt();
//输入一个 字符串数据
String name = sc.next();
//输入一个double 数据
double money = sc.nextDouble();
3.4 整合代码
package xx.xx;
import java.util.Scanner;
public class IpuptDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("输入一个整数");
int m = sc.nextInt();
System.out.println("你输入的是"+ m);
}
}
四.运算符
用于变量或者数据的运算,运算的类型非常多,需要分类来讨论。
3.1赋值运算符
赋值 |
---|
= |
一个非常基础却十分常用的运算符,它的作用就是把 等号 右边的数据 赋值给 左边的变量。
public static void main(String[] args){
int m = 10;
int k = 20;
}
需要注意的是 赋值数据 必须要 和类型一致。
3.2算术运算符
加法 | 减法 | 乘法 | 除法 | 模运算 |
---|---|---|---|---|
+ | - | * | / | % |
用于算术数学运算,遵循混合运算法则,%的作用是求余数。 乘号使用 * 。
public static void main(String[] args){
int m = 10;
int k = 20;
System.out.println( m+k );
System.out.println( m*k );
System.out.println( m/k );
System.out.println( m-k );
System.out.println( m%k );
}
除号 /
3.3复合赋值(复合运算符)
加等 | 减等 | 乘等 | 除等 | 模等 |
---|---|---|---|---|
+= | -= | *= | /= | %= |
用于简化运算和赋值,如果一个变量需要在自己身上做算术运算,可以使用。
public static void main(String[] args){
int m = 10;
int k = 20;
int n = 105;
System.out.println( m+=10 );
System.out.println( m-=20 );
System.out.println( k*=2 );
System.out.println( m/=5 );
System.out.println( m%=5 );
}
3.4 自增自减运算符
在自己基础上 +1 或者 -1的 运算符号。
++ 和 –
++ : 自增
– : 自减
class PlusDemo{
public static void main(String[] args){
int age = 30;
//age++;
//++ age;
age--;
--age;
//无论 ++ -- 在前或者在后,对于变量本身的影响是确定 +1 或者 -1.
System.out.println(age);// ok
System.out.println("-------------------------------------");
int money = 100;
System.out.println(money--); // 问的表达式
// 对于++ -- 表达式来讲,++ --的位置是有影响的, 在前具有立即计算性 在后有延时计算性。
}
}
3.4关系运算符
大于 | 小于 | 大于等于 | 小于等于 | 相等 | 不等 |
---|---|---|---|---|---|
> | < | >= | <= | == | != |
用于对数据做大小关系的比较,运算结果是 布尔值 。
public static void main(String[] args){
int m = 10;
int k = 20;
System.out.println( m>k );
System.out.println( m<k );
System.out.println( m>=k );
System.out.println( m<=k );
System.out.println( m==k );
System.out.println( m!=k );
}
3.5逻辑运算
且 | 或 | 非 | 且[不短路] | 或[不短路] |
---|---|---|---|---|
&& | || | ! | & | | |
用于多条件逻辑判断,运算结果是 布尔值。
public static void main(String[] args){
int m = 10;
int k = 20;
System.out.println( m>0 && k>0 );
}
3.6三目运算符
三目 |
---|
?: |
可用于逻辑判断,根据判断结果为变量赋值。 表达式?a:b
public static void main(String[] args){
int m = 10;
int k = 20;
int t = 1>0?m:k;
}
3.7位运算符
按位与 | 按位或 | 按位异或 | 按位取反 | 左移 | 右移 | 无符号右移 |
---|---|---|---|---|---|---|
& | | | ^ | ~ | << | >> | >>> |
同1则1 | 有1则1 | 不同为1相同为0 | 0、1互换 | 向左移动 | 向右移动 | 向右移动不保留负数符号 随便怎么搞:正数 |
用于把数据按照二进制位进行运算,运算结果为整数。
public static void main(String[] args){
int m = 10;
int k = 20;
System.out.println( m&k );
}
附:ASCII码表
![Picture 2.png](https://img-blog.csdnimg.cn/img_convert/fa7deee71c85fc29e91c17332680625e.png#height=513&id=nwJIm&margin=%5Bobject%20Object%5D&name=Picture 2.png&originHeight=699&originWidth=1232&originalType=binary&ratio=1&size=597570&status=done&style=none&width=904)
附:关键字表
附:优先级结合性表
作业
1.变量练习
使用变量定义 定义一部电影资讯信息,数据从键盘输入。
比如:
影片名字:《你好!李焕英》
上映日期: 2021-1-22
导演: 贾玲
票价: 30.50元
2.强制类型转换练习
输入一个 double 值, 把double 强制为int 然后 +1 输出。
3.输入3 个int 值 计算 3个数的和输出。
4.计算BMI指数:
BMI = 體重(公斤) / 身高2(公尺2)
输入 体重 和 身高 按照公式计算 BMI,注意 java 中不可以直接使用 平方,比如 a的平方可以使用 a * a表示。
并提示所属类别 比如偏瘦 正常 过重 肥胖 (不允许用if)
分类 BMI 范围
偏瘦 <= 18.4
正常 18.5 ~ 23.9
=> 过重 24.0 ~ 27.9
肥胖 >= 28.0
5. 输入一个三位数判断这个数是否为水仙花数 水仙花数 abc = a的立方 + b的立方 + c的立方 (不允许用if)