Java语言基础
1.变量
1.1定义方式
先声明,再赋值:
数据类型 变量名;
变量名 = 值;
声明并赋值:
数据类型 变量名 = 值;
1.2整型
面试题:byte的取值范围和原理
取值范围:-128~127
因为一个byte占8位,每一位可以存储一个0或者1,计算机以首位(最高位)为符号位,0表示正数,1表示负数,所以byte最大的数值为0111 1111转换为十进制为127,最小值为1000 0000转换为十进制为-128
public class Test2{
public static void main(String [] args){
// 整型数据类型 byte short int long
// byte 取值范围 -128 ~ 127
byte b1 = 120;
System.out.println(b1);
// byte b2 = 128; 超过范围不能存储 报错
// System.out.println(b2);
// short 取值范围 -32768 ~ 32767
short s1 = 200;
System.out.println(s1);
// short s2 = 50000; 超过范围不能存储 报错
// System.out.println(s2);
// short s3 = -40000;
// System.out.println(s3);
// int 取值范围 -2147483648 ~ 2147483647
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
int i1 = 2000;
System.out.println(i1);
int i2 = -20000;
System.out.println(i2);
// int i3 = 21474836470; 过大的整数 报错
// System.out.println(i3);
// long 取值范围 -9223372036854775808 ~ 9223372036854775807
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
long l1 = 56897L;
long l2 = -784512L;
System.out.println(l1);
System.out.println(l2);
// 给long类型赋值 如果取值范围超过了int的取值范围必须加L 大小写都可以 要求大写
long l3 = 21474836470l;
System.out.println(l3);
}
}
1.3浮点类型
public class Test3{
public static void main(String [] args){
// float 取值范围 负数-3.4E+38 ~ -1.4E-45 正数1.4E-45 ~ 3.4E+38
// 在给float类型赋值 必须在末尾加上F 大小写都可以 推荐大写
float f1 = 3.14F;
System.out.println(f1);
float f2 = 20F;
System.out.println(f2);
float f3 = -340000000000000000000000000000000000000F;
System.out.println(f3);
float f4 = -0.0000000000000000000000000000000000000000000014F;
System.out.println(f4);
float f5 = 0.0000000000000000000000000000000000000000000014F;
float f6 = 340000000000000000000000000000000000000F;
System.out.println(f5);
System.out.println(f6);
// double类型取值范围 负数 -1.7E+308 ~ -4.9E-324 正数 4.9E-324 ~ 1.7E+308
double d1 = 2.5;
System.out.println(d1);
double d2 = 20;
System.out.println(d2);
}
}
1.4布尔类型
public class Test4{
public static void main(String [] args){
// boolean 布尔类型 取值只有 真true/假 false
int a = 20;
int b = 30;
System.out.println(a > b);
System.out.println(a < b);
boolean bl1 = true;
boolean bl2 = false;
System.out.println(bl1);
System.out.println(bl2);
}
}
1.5字符类型
char类型可以使用三种赋值方式
字符赋值:char c1 = 'A';(通过 '' 描述为字符类型)
整数赋值:char c2 = 65;(通过十进制数65在字符集中对应的字符赋值)
进制赋值:char c3 = '\u0041';(通过十六进制数41在字符集中所对应的字符赋值)
public class Test5{
public static void main(String [] args){
// char 字符类型 任何被英文单引号包括的内容 且只能有一个
// char取值范围 0 ~ 65535 无符号
char ch1 = 'a';
char ch2 = 'B';
char ch3 = '3';
char ch4 = '中';
char ch5 = ',';
System.out.println(ch1);
System.out.println(ch2);
System.out.println(ch3);
System.out.println(ch4);
System.out.println(ch5);
// char ch6 = '15'; 编译报错 因为字符只能存一个内容
// System.out.println(ch6);
// 当我们直接赋值0~65535 范围的数值将根据ASCII码表 或者 Unicode码表(万国码)来找到对应的内容
// ASCII码表 美国标准信息交换码
char ch7 = 97;
System.out.println(ch7);
char ch8 = 98;
System.out.println(ch8);
char ch9 = 99;
System.out.println(ch9);
char ch10 = 20013;
System.out.println(ch10);
char ch11 = 20320;
System.out.println(ch11);
// char类型也可以直接以unicode编码赋值
// Unicode记录了世界大多数国家的语言 中文的取值范围是 \u4e00 ~ \u9fa5
char ch12 = '\u4f60';
System.out.println(ch12);
char ch13 = '\u4e00';
System.out.println(ch13);
char ch14 = '\u9fa5';
System.out.println(ch14);
}
}
2.转义字符
public class Test6{
public static void main(String [] args){
// 转义字符 表示用于处理一些特殊的符号 作为字符文本使用 不再具有特殊含义
char ch1 = '\'';
System.out.println(ch1);
char ch2 = '\\';
System.out.println(ch2);
// \n 换行
System.out.print("hello world \n 世界你好\n");
// \t 制表位 符
System.out.println("床前明月光\t疑似地上霜");
System.out.println("举头望明月\t低头思故乡");
// \"
char ch3 = '\"';
System.out.println(ch3);
}
}
3.String类型
public class Test7{
public static void main(String [] args){
String str1 = "abcdefg";
String str2 = "hel lo ,;'['.p[.,./' ";
String str3 = "中国";
String str4 = " 1";
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
String str5 = "\"";
System.out.println(str5);
String str6 = "\u4e00 \u4e01";
System.out.println(str6);
short s1 = -65;
char ch1 = (char)s1;
System.out.println(ch1);
}
}
4.类型转换
4.1 自动转换
两种类型相互兼容,目标类型取值范围大于原类型
public class Test1{
public static void main(String [] args){
// 类型转换
// 自动类型转换
// 两种类型要兼容 目标类型(等号左边的)要大于(取值范围大于)源类型(等号右边的)
// 自动提升
byte b1 = 20;
short s1 = b1;
System.out.println(s1);
short s2 = 220;
int i1 = s2;
System.out.println(i1);
int i2 = 5566;
long l1 = i2;
System.out.println(l1);
long l2 = 2233;
float f1 = l2;
System.out.println(f1);
float f2 = 33F;
double d1 = f2;
System.out.println(d1);
}
}
4.2 强制转换
两种类型相互兼容,目标类型取值范围小于源类型。
public class Test2{
public static void main(String [] args){
// 强制类型转换
// 两种类型要兼容 目标类型(等号左边)小于(取值范围小于)源类型(等号右边)
short s1 = 120;
byte b1 = (byte)s1; // 小括号中的内容表示 要强转为的类型
System.out.println(b1);
int i1 = 2233;
short s2 = (short)i1;
System.out.println(s2);
long l1 = 556;
int i2 = (int)l1;
System.out.println(i2);
double d1 = 20.5;
float f1 = (float)d1;
System.out.println(f1);
// 将浮点类型的数值强制转换为整数类型 只保留整数部分
float f2 = 3.14F;
long l2 = (long)f2;
System.out.println(l2);
double d2 = 220.5;
int i3 = (int)d2;
System.out.println(i3);
}
}```
>特殊情况:将超过目标类型取值范围的数值强制转换
```java
public class Test3{
public static void main(String [] args){
// 强制类型转换
// 将超过目标类型取值范围的数值 强制转换/存放
int s1 = 128;
byte b1 = (byte)s1;
System.out.println(b1);
short s2 = 257;
byte b2 = (byte)s2;
System.out.println(b2);
short s3 = 129;
byte b3 = (byte)s3;
System.out.println(b3);
// 原码 反码 补码
// 正数的原码 反码 补码都一样 都是其本身
// 负数的反码是符号位保持不变 其余各位取反 1011 0011 --》 1100 1100
// 补码是在反码的基础上 + 1 1100 1100 --》 1100 1101
int ch1 = 67;
char numa = (char)ch1;
System.out.println(numa);
}
}
5.运算符
5.1 算数运算符
public class Test4{
public static void main(String [] args){
// 算数运算符
// + - * / %
int a = 20;
int b = 5;
System.out.println("a与b的和是:" +( a + b));
System.out.println("a减去b是:" + (a - b));
System.out.println("a * b的结果是:" + a * b);
System.out.println("a/ b的结果是:" + a / b);
System.out.println("a % b的结果是:" + a % b);
}
}
public class Test5{
public static void main(String [] args){
int a = 10;
a++;
System.out.println(a); // 11
++a;
System.out.println(a);
int b = 10;
int c = b++;
System.out.println(c);
System.out.println(b);
int e = 5;
int f = ++e;
System.out.println(e);
System.out.println(f);
}
}
5.2赋值运算符
public class Test6{
public static void main(String [] args){
// 赋值运算符
int a = 20;
a += 3; // 等价于 a = a + 3;
System.out.println(a);
a -= 10; // 等价于 a = a - 10;
System.out.println(a);
a *= 2; // 等价于 a = a * 2;
System.out.println(a);
a /= 5; // 等价于 a = a / 2;
System.out.println(a); // 因为两个操作数都是int类型 所以不能保留小数
a %= 2; // 等价于 a = a % 2;
System.out.println(a);
}
}
5.3 关系运算符
public class Test7{
public static void main(String [] args){
// 关系运算符 两个操作数或者表达式关系是否成立
// 最终的结果为boolean类型 要么为true 要么为false
int a = 20;
int b = 20;
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <= b);
System.out.println(a == b);
System.out.println(a != b);
}
}
5.4 逻辑运算符
&& 短路与 表示两个或者多个表达式同时成立时结果为真,否则为假;如果第一个表达式不成立,则后续表达式不再执行
& 与 表示两个或者多个表达式同时成立时结果为真,否则为假;没有短路效果,不管第一个表达式结果怎么样,都将执行完所有的表达式。
|| 短路或 表示两个或多个表达式中有一个成立,则结果为真,否则为假;如果第一个表达式为真,则后续表达式不再执行。
| 或 表示两个或多个表达式有一个成立,则结果为真;没有短路效果,不管第一个表达式结果如何,都将执行完所有表达式。
public class Test8{
public static void main(String [] args){
int a = 20;
int b = 25;
int c = 21;
System.out.println((a < b) && (b > c) );
System.out.println((a < b) && (b < c) );
System.out.println("=====================================");
System.out.println((a < b) & (b > c) );
System.out.println((a < b) & (b < c) );
System.out.println("=====================================");
System.out.println((a < b) || (b > c) );
System.out.println((a < b) || (b < c) );
System.out.println("=====================================");
System.out.println((a < b) | (b > c) );
System.out.println((a < b) | (b < c) );
}
}
public class Test9{
public static void main(String [] args){
int x=8;
int y=9;
System.out.println((++x==y)&&(++x!=y));
System.out.println(x);
System.out.println("-------------------------------------------1");
int x1=8;
int y1=9;
System.out.println((++x1==y1)||(++x1!=y1));
System.out.println(x1);
System.out.println("-------------------------------------------2");
int x2=8;
int y2=9;
System.out.println((++x2==y2)|(++x2!=y2));
System.out.println(x2);
System.out.println("-------------------------------------------3");
int a=8;
int b=9;
System.out.println( (++a!=b)&(++a==b));
System.out.println(a);
}
}
5.5 三目运算符
public class Test11{
public static void main(String [] args){
// 三目(三元)运算符
// 布尔表达式 ? 结果1 : 结果2
// 如果布尔表达式条件成立 则执行结果1 否则执行结果2
int age = 18;
System.out.println(age >= 18 ? "成年了" : "未成年");
int numa = 20;
int numb = numa > 20 ? 25 : 300;
System.out.println(numb);
}
}
6. Scanner接受输入信息
程序运行中,可在控制台(终端)手动录入数据,再让程序继续运行。
使用顺序:
1.导入 java.util.Scanner
2.声明Scanner类型的变量。
3.使用Scanner类中对应的方法(区分类型):
.nextInt(); //获得整数
.nextDouble(); //获得小数
.next(); //获得字符串
.next().charAt(0); //获得单个字符
注意:如果输入了不匹配的数据,则会产生 java.util.InputMismachException
import java.util.Scanner;
public class Test12{
public static void main(String [] args){
// 编写程序获得用户输入的信息
// int a = 20;
// 定义一个扫描器 用于接收用户输入的信息 取名为 input
Scanner input = new Scanner(System.in);
// System.out.println("请输入一段文字");
// String context = input.nextLine();
// System.out.println(context);
// 提示用户输入
System.out.println("请输入您的姓名");
// 接收内容并且存储到name变量中
String name = input.next();
// 将用户输入的名字打印
System.out.println("您输入的名字是:" + name);
// 提示用户输入年龄
System.out.println("请输入您的年龄");
// 接收用户输入的年龄 并且赋值给age变量
int age = input.nextInt();
// 将用户输入的年龄打印
System.out.println("您输入的年龄是:" + age);
// 提示用户输入身高
System.out.println("请输入您的身高");
// 接收用户输入的身高 并且赋值给height变量
double height = input.nextDouble();
// 将用户输入的信息 打印
System.out.println("您输入的身高是:" + height);
System.out.println("-----------------------------");
}
}```