一、main()方法
public class TestBegin {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
- 源文件(扩展名为*.java):源文件带有类的定义。类用来表示程序的一个组件,小程序或许只会有一个
类。类的内容必须包含在花括号里面。- 类:类中带有一个或多个方法。方法必须在类的内部声明。
- 方法:在方法的花括号中编写方法应该执行的语句。
✅简述Java中的main()方法
main()方法是Java程序执行的入口,它是一个定义在类中的、公开的、静态的、无返回值的,参数为一个字符串数组的方法,它的参数args与执行参数一一对应。
在一个源文件中只能有一个public修饰的类,而且源文件名字必须与public修饰的类名字相同。
二、标识符
- 合法的标识符
字母、数字以及 下划线和 $ 符号等等。
注意:标识符不能以数字开头,也 不能是关键字,且 严格区分大小写。
- 一般规范:
类名:每个单词的首字母大写(大驼峰)
方法名:首字母小写,后面每个单词的首字母大写(小驼峰)
变量名:与方法名规则相同
三、常见关键字
具有特殊含义的标识符称为关键字
- 48个关键字:abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while。
- 2个保留字:goto、const。
- 3个特殊直接量:true、false、null。
四、注释规则
单行注释:// 注释内容 Ctrl+/多行注释:/ 内容 / Ctrl +Shift+/
文档注释: / 文档注释 */(常见于方法和类描述方法和类的作用) / + Enter
五、数据类型与变量
1 . 常量与变量
- 常量:固定不变的量
字符串常量、整形常量、浮点数常量、字符常量、布尔常量true和false、空常量null
- 变量:经常改变的内容
int a = 10; // 定义整形变量a,a是变量名也称为标识符,该变量中放置的值为10
字符串、整形、浮点型、字符型以及布尔型,在Java中都称为数据类型
2. 基本数据类型
- 基本数据类型:四类八种 整型、浮点型、字符型以及布尔型
- 整型、浮点型、字符型以及布尔型
整型
public class TestBegin { public static void main(String[] args) { /** 整型变量 * 1. int不论在何种系统下都是4个字节 * 2.变量在使用之前必须要赋初值,否则编译报错 * 3. int的包装类型为 Integer */ int a = 10; System.out.println(a); System.out.println(Integer.MIN_VALUE); System.out.println(Integer.MAX_VALUE); /**长整型变量 *1. 长整型变量的初始值后加L或者l,推荐加L *2. 长整型 占8个字节: -2^63~2^63-1 *3. long的包装类型为Long */ long b = 30L; System.out.println(b); System.out.println(Long.MIN_VALUE); System.out.println(Long.MAX_VALUE); /**短整型变量 * 1. short 占2个字节 16bit -32768 ~ 32767 * 3. 使用时注意不要超过范围(一般使用比较少) * 4. short的包装类型为Short */ short c = 5; System.out.println(c); System.out.println(Short.MIN_VALUE); System.out.println(Short.MAX_VALUE); /**字节型变量 * 1. byte在任何系统下都占1个字节-128 ~ 127 * 2. 字节的包装类型为Byte */ byte d = 2; System.out.println(b); System.out.println(Byte.MIN_VALUE); System.out.println(Byte.MAX_VALUE); } }
- 浮点型
/**double
*双精度浮点数 8字节
*存储方式与整数不同
*/
double d = 5.26;
/**float
*单精度浮点数 4字节
*包装类Float
*/
float f =12.5f;
- 浮点数存在一定量的精度误差,因此浮点数是个近似值,并不是精确值
- 在 Java 中, int 除以 int 的值仍然是 int(会直接舍弃小数部分)。如果想得到 小数, 需用 double 类型计算.
字符型
char ch1 ='h'; System.out.println(ch1); char ch2 = 97; System.out.println(ch2);
Java 中char使用 Unicode 编码表示字符. 因此一个字符占用两个字节即16位, 表示的字符种类更多, 包括中文, 并兼容ASCLL 码
- 布尔型
boolean b =true;
- boolean 类型的变量只有两种取值, true 表示真, false 表示假.
- Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.
六、类型转换
隐式类型转换(编译器自动进行处理 )
float f = 3.14F;
double d = 5.12;
d = f; // 编译器会将f转换为double,然后进行赋值
f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全
byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte
byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失
数据范围小的转为数据范围大的时会自动进行
强制类型转换(经过一定的格式处理 )
int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由小到大,隐式转换
f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
注意事项:
- 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
- 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是**可能精度丢失
- 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
- 强制类型转换不一定能成功,不相干的类型不能互相转换
七、类型提升
/**
*类型提升
*参与运算的数据小于四个字节,进行整型提升,并使用int类型接收
*/
//计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short
//这种低于 4 个字节的类型, 会先提升成 int, 再参与计算
byte x =10;
byte y =20;
int c = a+b;
- 不同类型的数据混合运算, 范围小的会提升成范围大的.
- 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算
- 字符串类型转换
在有些情况下,需要将字符串和整形数字之间进行转换:
- int 转成 String
public static void main(String[] args) {
String s1 = "hello";
String s2 = " world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2); // s1+s2表示:将s1和s2进行拼接
String 转成 int
int num = 10; // 方法1 String str1 = num + ""; // 方法2 String str2 = String.valueOf(num); String str = "100"; int num = Integer.parseInt(str)
八、 常见运算符
逻辑运算符逻辑与 &&
表达式1 && 表达式2,左右表达式必须是boolean类型的结果。 两个表达式都为真,结果才是真
逻辑或 || 左右表达式至少有一个位真,则结果为真
逻辑非 ! 真变假,假变真
位运算符
按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
移位运算符
<<左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
>>右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
>>>无符号右移: 最右侧位不要了, 最左侧补 0
由于计算机 计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替
public class Solution {
public int Add(int num1,int num2) {
while (num2!=0) {
int temp = num1^num2;
num2 = (num1&num2)<<1;
num1 = temp;
}
return num1;
}
}
383,不使用“+”,“-”,“×”,“÷”实现四则运算 (qq.com)
九、循环与分支
✅不能用作switch的参数类型有哪些?
- 多个case后的常量值不可以重复
- switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,注意不能是long类型
引用类型:String常量串、枚举类型 - long、float、double、boolean不能作为 Switch的数据类型
十、输入数据
import java.util.Scanner; // 需要导入 util 包
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
println 输出的内容自带 \n, print 不带 \n
printf 的格式化输出方式和 C 语言的 printf 是基本一致的
多组输入
while(scan.hasnext(int))
//举例
public class TestCircle {
/**
* 输出形状
* @param args
*/
public static void main11(String[] args) {
Scanner scan = new Scanner(System.in);
while(scan.hasNextInt()) { //判断下一有无整数输入,多组输入
int n = scan.nextInt();
for(int i = 0;i < n;i++) {
for(int j = 0;j < n;j++) {
if(i == j) {
System.out.print("*");
}else if( i+j+1 == n) {
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
注意事项: 当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 Windows 上使用 ctrl + z,Linux 上使用 ctrl+d)
猜数字游戏0-100之间
public class TestRandom {
public static void main(String[] args) {
Random random = new Random();
int a =random.nextInt(100);
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("请输入你的数字");
int m = scan.nextInt();
if(m > a){
System.out.println("猜大了");
}else{
if( m < a){
System.out.println("猜小了");
}
else {
System.out.println("恭喜你,回答正确");
break;
}
}
}
}
}