一、变量
● 概念
变量:程序运行中可以改变的量,其本质是一个存储空间
例:
int a = 10;
a = 5;
● 本质
变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必
须要先申请(声明),然后必须进行赋值(填充内容) 才能使用。
● 访问(引用)
● 变量是通过使用 变量名 来访问这块区域的
● 声明方法
数据类型 变量名1,变量名2
二、数据类型
按数据类型分为两类:基本数据类型 和 引用数据类型
1.基本数据类型
(1)数值型
a.整数类型( byte , short , int , long )
注:Java语言中,整型常量默认为 int 型,声明 long 型常量时,数字结尾应加 'l' 或 'L'
例如:
byte a = 127;// 1个字节 可以表示-128 ~ 127
short b = 32767;// 2个字节 可以表示-32768~32767
int c = 1000000000;//4个字节
long d= 1000000000000L;//整型默认为int,要用long必须后面加L
b.浮点类型( float , double )
注:浮点数通常默认为 double 类型的,要定义 float 类型的变量,赋值时需要结尾添加 'f' 或 'F' 作为后缀。
例如:
float e = 123.022f;
double f = 123414.43244;
注:一般很少用浮点数,因为浮点数转化为二进制时不能精准转化。
例:
System.out.println(1.0-0.7);//0.30000000000000004
如果需要使用精确的小数计算,要用到 BigDecimal 类型
BigDecimal bigDecimal1 = new BigDecimal("1.0");
BigDecimal bigDecimal2 = new BigDecimal("0.7");
System.out.println(bigDecimal1.subtract(bigDecimal2));// 0.3
(2)字符型( char )
a.字符表示
char 只能表示一个字符,如果想表示一个字符串,应该用 String 来声明;
例如:
char g = 'C';
String h = "abcdef";
b.字符运算
char 运算:char 类型运算是 字母在 ASCII 码表中对应的值
char h = 'A'; //65
System.out.println(h); // A
System.out.println(0+h); // 0 + 65 = 65
*Unicode 编码
一种编码,将世界上所有的符号都纳入其中。这个编号范围从 0x000000 到 0x10FFFF (十六进制),有 110 多万,每个字符都有一个唯一的 Unicode 编号,这个编号一般写成 16 进制在前加上 U+。
例:“ 马 ” 的 Unicode 是 U+9A6C ,可以换算为整数。
Java 底层采用 Unicode 编码来存储字符.
(3)布尔型( boolean )
注:Java中不能用 0 或 非0 来替代 false 或 true,这点与 C语言 不一样
//不能通过赋 0 或 非0
int k = 0;
// if(k); //报错
*基本数据类型转换
规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大)的类型。
当容量大的数据类型转化为容量小的时,要加上强制转换符,但可能造成精度降低或数据溢出。
当有多种类型的数据混合运算时,系统自动将所有数据转换成大容量的那一种,然后再进行计算。
例如:
/*大容量转化为小容量*/
//1、溢出的的删去
int x= 256; // 0001 0000 0000
byte y = (byte)x; // 0000 0000
System.out.println(y);//0
//2、精度降低
float f = 3.14f; // 3.14
int uf = (int)f; // 3
System.out.println(uf); // 3
2.引用数据类型
(1)类( class )
(2)接口( interface )
(3)数组( [ ] )
三、运算符
1、算术运算符
运算符 | 运算 | 范例 | 结果 |
+ | 正号;加号 | +3 | 3 |
- | 负号;减号 | b = 4;-b | -4 |
* | 乘 | 3*4 | 12 |
/ | 除 | 12/3 | 4 |
% | 取模 | 15%4 | 3 |
++(前) | 自增(前):先运算后取值 | a = 2;b = ++a | a = 3;b = 3 |
(后)++ | 自增(后):先取值后运算 | a = 2;b = a++ | a = 3;b = 2 |
--(前) | 自减(前):同理 | a = 3;b = --a | a = 2;b = 2 |
(后)-- | 自减(后):同理 | a = 3;b = a-- | a = 2;b = 3 |
+ | 字符串相加 | "he"+"llo" | "hello" |
2、比较运算符
运算符 | 运算 | 范例 | 结果 |
== | 相等于 | 4 == 3 | false |
!= | 不等于 | 4 != 3 | true |
> | 大于 | 4 > 3 | true |
< | 小于 | 4 < 3 | false |
>= | 大于等于 | 4 >= 3 | true |
<= | 小于等于 | 4 <= 3 | false |
instanceof | 检查是否是类的对象 | "Hello" instanceof String | true |
3、逻辑运算符
& --- 逻辑与 | --- 逻辑或 ! --- 逻辑非
&& --- 短路与 || --- 短路或 ^ --- 逻辑异或
a | b | a & b | a | b | !a | a ^b | a && b | a || b |
true | true | true | true | false | false | true | true |
true | false | false | true | false | true | false | true |
false | true | false | true | true | true | false | true |
false | false | false | false | true | false | false | false |
注:
“&”和“&&”的区别:
单&时,左边无论真假,右边表达式都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算,
|”和“||”的区别同理。
建议:在开发过程中,建议使用 && 和 ||
4、赋值运算符
符号: =
拓展运算:
运算符 | 用法 | 等效表达 |
+= | a += b | a = a + b |
-= | a -= b | a = a - b |
*= | a *= b | a = a * b |
/= | a /= b | a = a / b |
%= | a %= b | a = a % b |
注:
short a = 3;
a = a + 2; 会报错,原因是 a 是 short 类型,而右式是 int 类型;
不能把 int 型赋给 short 型。
a += 2; 有隐式类型转换,不会报错
5、条件运算符
语法:
(条件表达式) ? 表达式1 : 表达式2;
当条件表达式结果为 true 执行表达式1;当条件表达式结果为为 false 执行表达式2 ;
6、位运算符
日常开发中位运算使用相对较少,但是巧妙的使用位运算可以大量减少运行开销, 优化算法
位运算符 | 名称 | 用法 |
<< | 左移 | 空位补0,被移除的高位丢弃,空缺位补0。 |
>> | 右移 | 被移位的二进制最高位是0,右移后,空缺位补O; 最高位是1,空缺位补1。 |
>>> | 右移 | 被移位二进制最高位无论是O或者是1,空缺位都用O补。 |
& | 按位与 | 二进制位进行&运算,只有1&1时结果是1,否则是0 |
| | 按位或 | 二进制位进行|运算,只有 0 │ 0 时结果是0,否则是1; |
^ | 按位异或 | 相同二进制位进行^运算,结果是 0; 1^1=0,0^0=0 不相同二进制位^运算结果是 1。1^0=1,0个1=1 |
~ | 按位取反 | 正数取反,各二进制码按补码各位取反 负数取反,各二进制码按补码各位取反 |
四、Java 控制台输入
Java 提供 Scanner 类来实现从控制台向程序输入信息的功能;
具体步骤:
1.导入使用的类:import java.utl.Scanner;
2.创建Scanner类型的对象:Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法,来获取指定类型的变量
例如:
package day2;
import java.util.Scanner;
/**
* 控制台输入
*/
public class Demo8 {
public static void main(String[] args) {
//创建一个输入功能的对象
Scanner scanner = new Scanner(System.in);
System.out.println("请输入姓名:");
String name = scanner.next();//读入姓名
System.out.println("请输入年龄:");
String age = scanner.next();//读入年龄
System.out.println("年龄为:"+name+",年龄为:"+age);
}
}