### Java变量
#### 一、变量的概念
> 包含变量的类型、名称、值。
>
> 定义的方式:
>
> 1.先定义,后赋值
>
> 2.定义并赋值
>
> 3.定义多个相同类型数据并赋值
```java
/**
* 当前为第一个类
*/
public class First{
/**
* 当前为主方法
* args:输入的参数
*
*/
public static void main(String[] args){
// int 整数
int num; // 先定义
num = 10; // 后赋值
System.out.print(num);
// 定义并赋值
int num1 = 20;
System.out.print(num1);
// 一次定义多个相同类型的变量,并赋值
int a = 30, b = 40;
System.out.print(a);
System.out.print(b);
}
}
```
#### 二、基本数据类型
> 8种:
>
> 整数:
>
> byte:1字节
>
> short:2字节
>
> int:4字节 默认类型
>
> long:8字节 应该在数字的最后加一个L
> 小数(浮点数),采用科学计数法,所以不精确
>
> float:4字节,应该在数字最后加上F
>
> double:8字节,默认类型
> 布尔类型
>
> boolean:true或者false
```java
public static void main(String[] args){
// int 整数
int num; // 先定义
num = 10; // 后赋值
System.out.print(num);
// 定义并赋值
int num1 = 20;
System.out.print(num1);
// 一次定义多个相同类型的变量,并赋值
int a = 30, b = 40;
System.out.print(a);
System.out.println(b);
// 整数
byte by = 10; // 1字节
short s = 300; // 2字节
int i = 2074927349; // 4字节
long l = 25000000000L; // 8字节(超出int范围的大数字需要加一个L,可以大写也可以小写)
// 小数
float f = 55533333334.1415926535897932384626F;//(float类型必须加f)
System.out.println(f);
double db = 55533333334.1415926535897932384626;
System.out.println(db);
// 布尔
boolean boo = true;
//
}
```
> char:字符类型,2字节
>
> ASCII:美国标准信息交换码,1字节,通常表示数字字母符号等
>
> unicode:万国码,2字节,能表示多个国家的文字,Java中char使用此编码
>
> GB2312、GBK、GB18030,2字节,表示简体中文
>
> UTF-8统一传输格式,以1个字节为每次传输长度。如果是英文字母数字符号等就是1个字节,如果是中文等多国文字,长度3到4个字节。
>
> 乱码:乱码出现的原因是因为写入的编码和读取的编码不一致导致。
```java
public static void main(String[] args) {
// 第一种赋值方式:采用单引号
char ch = 'A';
System.out.println(ch);
char ch1 = '中';
System.out.println(ch1);
// 第二种赋值方式,采用数字(ASCII编码)
char ch2 = 97;
System.out.println(ch2);
// 第三种赋值方式,采用万国码(unicode)
char ch3 = '\u0041'; //16进制0041==十进制4*16+1=65
System.out.println(ch3);
}
```
```java
public static void main(String[] args) {
// 转义字符
char ch = '\''; // 单引号
System.out.print(ch);
char ch2 = '\n'; //换行
System.out.print(ch2);
char ch3 = '\t'; // tab键
System.out.print(ch3);
char ch1 = 'A';
System.out.print(ch1);
}
```
#### 三、引用数据类型之字符串
> 由一串字符组成,写在双引号之间,可以有0个或多个字符。
>
> [注意:]()char类型的字符必须有且仅有一个字符。
```java
public static void main(String[] args) {
// 字符串,由一长串字符组成
String str = "你是空色即是空的空空";
System.out.println(str);
String str1 = "王";
System.out.println(str1);
}
```
#### 四、类型转换`[重点]`
> 类型转换:
>
> 小的类型的数据放入到大的类型中,会自动类型转换。
>
> 大的类型数据放入到小的类型中,需要强制转换,不管值是多少。
>
> 当强制类型转换时,如果值符合小的类型的范围,则几乎没有影响。如果超出了范围,则会截断。
>
> [注意:]()布尔类型不能转换成其他类型
```java
public static void main(String[] args) {
// 类型转换
// 自动类型转换(小数据类型值放入到大的数据类型变量中)
byte b = 10;
short s = b;
int i = s;
long l = i;
// 强制类型转换(大数据类型值放入到小的数据类型变量中)
long l1 = 1;
int i1 = (int) l1;
short s1 = (short)i1;
byte b1 = (byte)s1;
// 整数和浮点数之间的转换
// 浮点数是以科学计数法,所以大小范围比long要大,把一个long的数据放到浮点里是可以的
// 要把浮点数放到整数类型中,丢失小数部分,需要强制转换
long l2 = 23479237427427942L;
float f = l2;
long l3 = (long)f;
double db = f;
float f1 = (float)db;
// 与char之间的转换
// char虽然是两个字节,但是存放方式是万国码,范围为0-65535,没有负数
char a = 'A';
byte b2 = (byte)a;
short s2 = (short)a;
int i2 = a;
long l4 = a;
char ch = (char)b2;
char ch1 = (char)s2;
char ch2 = (char)i2;
char ch3 = (char)l4;
}
```
```java
public static void main(String[] args) {
// 类型转换后的值
// 超出范围,(例如,比最大值大一个,就变成最小值,比最小值小一个就变成最大值)
short s = -130;
byte b = (byte)s;
System.out.println(b);
// 把整数放到小数中,输出时后面有.0,把小数放到整数中,小数部分舍去,整数部分按照整数类型的转换规则
int i = 100;
double db = i;
System.out.println(db);
float f = 1.81F;
int n = (int)f;
System.out.println(n);
float f1 = 128.35F;
byte b2 = (byte)f1;
System.out.println(b2);
// char类型与其他类型的转换,可以把char当作数字类型,范围是0-65535
char ch = 'A';
byte b3 = (byte)ch;
System.out.println(b3);
char ch1 = '中';
int i3 = (int)ch1;
System.out.println(i3);
short s1 = 20014;
char ch2 = (char)s1;
System.out.println(ch2);
}
```
#### 五、运算符
##### 5.1 二元算术运算符
>与数学中基本一致。
>
>[注意:]()乘法和除法的符号。整数除以整数结果是整数,浮点数运算不精确。
```java
// 算术运算符(二元运算符)
int i = 5 + 3; // 加
System.out.println(i);
double d = i - 0.1; //减
System.out.println(d);
int j = 3 * 6;//乘
System.out.println(j);
double k = 6 / 4;// 除(整数除以整数结果是整数)
System.out.println(k);
int n = 5 % 3; // 求余数
System.out.println(n);
int m = 5;// m:5
m = m + 2;// m:7
System.out.println(m);
```
##### 5.2 一元算术运算符
> ++自增1,在前表示先自增后参与运算,在后表示先参与运算后自增。
>
> --自减1,在前表示先自减后参与运算,在后表示先参与运算后自减。
```java
// 一元运算符
int n1 = 3;
n1++; // n1 = n1 + 1;自增1
// n1 += 1; // n1 = n1 + 1;
System.out.println(n1);
int n2 = 5;
++n2; // n2 = n2 + 1;//自增1
System.out.println(n2);
int n3 = 2;
int n4 = 5 + n3++; // ++在后面先参与运算,后自增
System.out.println(n3);
System.out.println(n4);
int n5 = 2;
int n6 = 5+ ++n5; // ++在前面先自增,后参与运算
System.out.println(n5);
System.out.println(n6);
// int n7 = 2;
// int n8 = ++n7 + ++n7 + ++n7; // ++在前面先自增,后参与运算
// System.out.println(n7);
// System.out.println(n8);
// --表示自减1,与++用法一样
```
##### 5.3 赋值运算符
```java
public static void main(String[] args) {
// 赋值运算符
int n = 1;
n+=5; // n = n + 5; 自增5
n-=5; // n = n - 5; 自减5
n*=5; // n = n * 5;
n/=5; // n = n / 5;
n%=5; // n = n % 5;
}
```
##### 5.4 关系运算符
> [注意:]()
>
> - 结果是布尔值。
> - 符号是一个整体,中间不能加空格。
> - 等于(==)和不等于(!=)的符号。
```java
public static void main(String[] args) {
// 关系运算符
boolean b1 = 5 >= 3;
int n = 6;
boolean b2 = n <= 20;
boolean b3 = n == 5;
boolean b4 = n != 6;
}
```
##### 5.5 逻辑运算符
```java
public static void main(String[] args) {
// 逻辑运算
int n1 = 98;
int n2 = 100;
int n3 = 95;
// 逻辑与(并且)
boolean b1 = n1 == 100 && n2 == 100;
System.out.println(b1);
// 逻辑或(或者)
boolean b2 = n1 == 100 || n2 == 100 || n3 == 95;
System.out.println(b2);
// 逻辑非(取反)
boolean b3 = !(n1 == 100 && n2 == 100);
System.out.println(b3);
// 逻辑与和逻辑或都有短路的效果(即在前面的表达式判断过程中,如果已经能够确定整体的值,则后面的表达式不会进行判断)
}
```
##### 5.6 三元运算符
> 使用?:来实现如果,否则的效果。
```java
public static void main(String[] args) {
// 三元运算符(?:)
// 如果你有100万,买一辆车,否则就来学Java
int n = 9800000;
String str = n >= 1000000 ? "买一辆车" : "来千锋学Java";
System.out.println(str);
}
```
#### 六、接收键盘输入
> 首先需要导入Scanner类。
>
> Scanner input = new Scanner(System.in);
```java
import java.util.Scanner;
public class MyDemo11 {
public static void main(String[] args) {
// 控制台输入
Scanner input = new Scanner(System.in);
System.out.println("请输入你的钱:");
// 如果你有100万,买一辆车,否则就来学Java
int n = input.nextInt(); // 输入整数
System.out.println("请输入你的房子的数量");
int m = input.nextInt();
String str = n >= 1000000 ? "买一辆车" : "来千锋学Java";
System.out.println(str);
System.out.println("你房子的数量为:" + m);
// 输入小数
// input.nextFloat();
// input.nextDouble();
// // 输入布尔
// input.nextBoolean();
// // 输入字符串
// input.next();
// // 输入字符
// input.next().charAt(0);// 得到字符串的第一个字符
}
}
```
> 作业:
>
> 1、定义两个整型变量并给它们赋值,定义第三个整型变量,将前两个变量的和赋值给它,输出第三个变量的值。int num1 =10; int num2 = 20; int num3 = num1 + num2;
>
> 2、使用双精度浮点型(double)变量保存商品的价格,给变量赋值,然后输出变量值。
>
> double price = 55.6;
>
> 3、使用变量保存游戏角色的攻击力(float)、血量(short)、级别(byte)等信息,并输出。
>
> float attack = 89.5F;
>
> short hp = 560;
>
> byte level = 99;
>
> 4、定义两个变量,交换两个变量的值并输出。
>
> int a = 3; int b = 5;
>
> int c = b;
>
> b = a;
>
> a = c;
>
> 提示:借助第三个变量
>
> 酱油 和 醋 瓶子进行交换
>
> 1)拿空瓶子来,把酱油导入空瓶
>
> 2)把醋导入酱油瓶
>
> 3)把空瓶里的酱油导入醋瓶
> 作业2:
>
> 1、请推断res1,a,b最后的值,并说明计算过程。
>
> int a = 3;
>
> int b = 2;
>
> int res1 = (a++)*(--b) + (--a)/(b++);
>
> // int res1 = 3 * 1 + 3 / 1;
>
> 2、从控制台输入一个4位数整数,定义4个变量将此整数的个十百千位数字分别取出赋值并输出。
>
> 3、判断闰年的规则是:年份能被400整除,或者年份能被4整除并且不能被100整除, 定义一个年份变量,输出true和false表示是否闰年
>
> 4、定义年龄变量和姓名变量,如果年龄大于35,姓名为老王,否则姓名为小王,用三元运算符实现。
>
> 5.定义变量保存你家的存款和房子数量,如果存款超过2000000并且房子数大于3,输出可以在家睡觉了,否则输出来千锋学java
>
> 6、定义变量保存系统的账号和密码,如果账号等于"zhangsan"并且密码等于"123aaa",就显示欢迎登录系统,否则提示账号或密码错误。
>
> 7、从控制台输入一个三位的整数,判断该数是否是水仙花数(数字等于三个位数的立方和)数字 = 个位数的立方 + 十位数的立方 + 百位数的立方 ,是的话输出是水仙花数否则输出不是。