目录:
1.数据类型
2.数据输入
3.方法
4.数组
5.二维数组
序言:
与学习其他计算机语言一样,都是从它的语法形式开始学习的,Java与C语言有所相同也有所不同,接下来我就将Java与C类比着介绍一下Java的一些简单语法。( 声明:我使用的Java集成开发环境是idea)
正文:
1.数据类型:
不管在什么系统,Java中的数据类型占用的字节数都是一定的,这就体现了Java语言可移植性强的优点,这便体现了那句口号:“Write once,run anywhere”
在变量初始化的时候,Java也和C语言不同:
在Java中,如果一个变量没有初始化,那么在编译时会报错,不会有默认值。例:
如果进行变量赋值的时候,字面值超过了取值范围,也会报错(int
类型的取值范围是-2147483648
到 2147483647
)。例:
在Java中浮点数的储存方式与C与语言一样,所以并不能精确地表示每一位,如以下例子可直观看出。
在Java中,整数的默认类型是int, 小数的默认类型是double,在进行变量赋值的时候要注意在数字后加一个f或F来表示它是什么类型的变量,否则编译器会报错。例:
强制类型转换在编译层面不会报错,但它是有风险的,尽量不要从大范围类型的数强转成小类型的数,可能会产生数据丢失。例:
0是假,非0是真这句话在Java中不适用,boolean类型只有两个值——true和false。
以下这种代码在Java中就是错误代码,括号中必须是布尔表达式。
int a = 0;
if (a) {
System.out.println(a);
}
下面的代码出现错误的原因是数据类型低于四个字节时,在运算时会提升为4个字节,详细点来说就是a和b在运算的时候会提升成四个字节,相加后的结果就是一个四个字节的数,而byte的字节大小为1,所以会出现不兼容的警告出现。这就体现了Java代码的严谨性。
使用“ + ”可以对字符串进行拼接,并且字符串没有所谓的“ \0 ”结尾的说法!
2.常用的数据输入:
整数类型 (int
, long
, short
, byte
):
- 使用
Scanner
类的nextInt()
方法来输入整数。 - 如果需要输入长整型 (
long
),则可以使用nextLong()
方法。 - 如果需要输入短整型 (
short
),则可以使用nextShort()
方法。 - 如果需要输入字节 (
byte
),则可以使用nextByte()
方法。
Scanner scanner = new Scanner(System.in);
int intValue = scanner.nextInt();
long longValue = scanner.nextLong();
short shortValue = scanner.nextShort();
byte byteValue = scanner.nextByte();
浮点类型 (float
, double
):
- 使用
Scanner
类的nextFloat()
方法来输入单精度浮点数。 - 使用
nextDouble()
方法来输入双精度浮点数。
Scanner scanner = new Scanner(System.in);
float floatValue = scanner.nextFloat();
double doubleValue = scanner.nextDouble();
字符类型 (char
):
- 使用
Scanner
类的next().charAt(0)
方法来输入一个字符。
解释:
scanner.next()
从标准输入中读取下一个字符串。charAt(1)
获取这个字符串的第二个字符。在Java中,字符串的索引是从0开始的,所以charAt(0)
表示第一个字符,charAt(1)
表示第二个字符,以此类推。
Scanner scanner = new Scanner(System.in);
char charValue = scanner.next().charAt(0);
值得注意的是,Scanner
对象在执行 next()
方法时会等待用户输入一个完整的标记(通常以空格、换行符或制表符分隔),然后将其作为字符串返回。因此,当你连续两次调用 next()
方法时,程序会等待两次用户的输入,而不会像你期望的那样,直接从第一次输入中获取两个字符。
想以下输入方法就可以从第一次输入中获取两个字符。
字符串类型 (String
):
- 使用
Scanner
类的next()
或nextLine()
方法来输入字符串。next()
方法会读取到下一个空白符(空格、制表符、换行符等)之前的内容,而nextLine()
方法会读取一整行的内容。
Scanner scanner = new Scanner(System.in);
String stringValue = scanner.nextLine(); // 或者使用 scanner.next()
布尔类型(boolean):
布尔类型的输入就相对麻烦,基本的思路就是输入一个字符串然后将他转换成布尔类型。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入布尔值(true 或 false):");
String input = scanner.next();
boolean boolValue;
if (input.equalsIgnoreCase("true")) {
boolValue = true;
} else if (input.equalsIgnoreCase("false")) {
boolValue = false;
} else {
System.out.println("输入的不是有效的布尔值!");
return;
}
System.out.println("输入的布尔值为: " + boolValue);
}
}
equalsIgnoreCase()
是 Java 中的一个字符串比较方法,用于比较两个字符串的内容是否相等,而且不区分大小写。
在这个示例中,input.equalsIgnoreCase("true")
表示将用户输入的字符串 input
与字符串 "true"
进行比较,如果它们的内容相等(不区分大小写),则返回 true
,否则返回 false
。这个方法在比较时会忽略字符串的大小写差异,因此无论用户输入的是 "true" 还是 "TRUE" 或 "TrUe",都会被视为相等。
在前面的示例中,这个方法被用来判断用户输入的字符串是否等于 "true",如果是,则将布尔变量设置为 true
,否则继续判断是否等于 "false"。
在Java中实现多组输入:
Ctrl键 + “ z ”结束输入。
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()) {
int a = sc.nextInt();
//.......
}
3.方法:
在学习方法的时候可以类比着C语言中的函数来理解,方法也是一段实现特定功能的代码,它可以被重复使用,大大地降低了代码量,从而加快了开发效率。
接下来我就来介绍Java中的方法如何定义以及注意事项:
定义一个方法的语法:
注意方法名一般采用小驼峰命名。
修饰符 + 返回值类型 + 方法名 + (形式参数列表) {
方法体;
}
在Java中,我们是拿不到栈上的局部变量的地址的,所以不存在通过传指针来改变实参的值的,所以以下写法是错误的:
且形参的改变不会改变实参的值:
方法的重载:
应用场景:
当我们需要写一个方法打印两个数的和的时候,可能会因为数据类型不同而需要写多个方法,当我们使用时还需要看各个方法的名字来调用,非常麻烦,所以就有了方法的重载。
使用方法重载后的效果:
可以发现并没有出现编译错误的提醒,这就大大便利了方法的调用。
发生方法重载的条件:
1. 方法名一样;
2. 参数列表不一样(参数个数 / 参数顺序 / 参数类型);
3. 返回值不做要求(与返回值无关)。
在Java中也是存在递归的,这里并不详细讲解,
大概说一下解决递归的两大步骤:
1. 有个递推公式(难点);
2. 找到当前问题的递归“结束条件”。
4.数组:
数组可以看成是相同类型元素的集合,在内存中是一段连续空间。
数组的定义:
//1和2没有区别。
//1.
int[] array = {1, 2, 3};
//2.
int[] array = new int[]{1, 2, 3};
//3这种定义并没有初始化元素的值,默认全为其类型对应的“0”值。
//3.
int[] array = new int[10];
//4.
int array[] = {1, 2, 3};//不建议这样写
错误写法1:
错误写法2:
定义一个数组:
int[] array = {1, 2, 3, 4, 5};
array叫做引用变量,它里面储存的是地址。
在内存中它的储存形式是这样的:
0x99是首元素的地址。
如果数组没有被初始化,数组中的元素默认为其类型对应的“0”值(boolean类型的默认“0”值为“false”)。
如果数组中储存的元素为引用型,默认值为null。
遍历数组的三种方法:
1. for循环
int[] array = new int[]{1,2,3,4,5};
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
2.toString方法
使用Arrays的toString方法,把传入的参数array表示的数组以字符串的形式进行输出。
int[] array = new int[]{1,2,3,4,5};
System.out.println(Arrays.toString(array));
3.for each循环
缺点:无法获取对应元素的下标。
int[] array = new int[]{1,2,3,4,5};
for (int x:
array) {
System.out.println(x);
}
5.二维数组:
二维数组其实就是特殊的一维数组。
二维数组的定义:
//1.
int[][] array = {{1,2,3},{4,5,6}};
//2.
int[][] array = new int[][]{{1,2,3},{4,5,6}};
//3.
int[][] array = new int[2][3];//默认元素都是0
//4.
int[][] array = new int[2][];//不规则二维数组,在Java中,二维数组是不能够省略的。
其实我们在学习二维数组的时候可以将其认为是特殊的一维数组;
举个例子,一维数组在内存中的储存方式是:
二维数组在内存中的储存方式是: