Java程序编写(下)
Scanner对象
通过java.util.Scanner
来获得Scanner
类
基本语法:
Scanner s = new Scanner(System.in)
通过next()
和nextLine()
方法获取输入的字符串。
通过hasNext()
和hasNextLine()
判断是否还有输入的数据。
next():
1、一定要读取到有效字符后才可以结束输入
2、对输入有效字符之前遇到的空白,next()方法会自动将其去掉
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
4、next()不能得到带有空格的字符串
nextLine():
1、以Enter为结束符,也就是说nextLine方法返回的是输入回车之前的所有字符
2、可以获得空白
除了scanner.hasNext()
之外还有scanner.hasNextInt()
、scanner.hasNextDouble()
等。
Switch多选择结构
switch
语句中的变量类型可以是byte
、short
、int
或char
,还有String
(从Java SE 7 开始)
case
标签必须为字符串常量或字面量
switch(expression) {
case value:
...
break;
case value:
...
break;
default:
...
}
如果没有break
的话,每个case
语句都会执行——case穿透。
循环结构
-
while
-
do…while
do { }while(布尔表达式)
-
for
100.for
是下述代码的快捷键for (int i = 0; i < 100; i++) { }
增强for循环
for(声明语句: 表达式) { }
方法
注意保证方法的原子性,最好一个方法实现一个功能。
类方法要使用static
关键字
方法声明
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
方法调用
对象名.方法名(实参列表)
什么是值传递和引用传递?
值传递:在值传递中,方法接收的是实际参数值的一个拷贝,而不是参数本身。这意味着在方法内部对参数进行的任何改变都不会影响到原始参数的值。**在Java中,基本数据类型(如整数、浮点数、布尔值等)都是以值传递的方式进行传递。**当你将一个基本数据类型的变量传递给一个方法时,方法接收的是这个变量的一个拷贝。
引用传递:在引用传递中,方法接收的是实际参数的引用(地址)而不是参数的拷贝。这意味着在方法内部对参数进行的任何改变都会影响到原始参数的值。在一些编程语言中,比如C++,可以通过指针实现引用传递。但在Java中,并没有显式的引用传递机制。Java中的对象引用是以值传递的方式进行传递,但这个值是对象的引用,因此看起来类似于引用传递。
方法重载
在一个类中,有相同的函数名称,但形参不同(参数的类型、顺序或数量不同)的函数。
方法重载的规则:
- 方法名相同,参数列表不同。
- 返回类型可以相同也可以不同。
- 方法的重载与方法的返回类型无关。
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
public String add(String a, String b) {
return a + b;
}
}
命令行传参
假设你有一个名为 MyProgram.java
的程序,你可以通过以下方式在命令行中运行它并传递参数:
java MyProgram arg1 arg2 arg3
在这个例子中,arg1
、arg2
和 arg3
是传递给程序的参数。在 MyProgram.java
中,你可以通过 args
数组来访问这些参数:
public class MyProgram {
public static void main(String[] args) {
System.out.println("Number of arguments: " + args.length);
for (int i = 0; i < args.length; i++) {
System.out.println("Argument " + i + ": " + args[i]);
}
}
}
可变参数
语法:
public void myMethod(Type... variableName) {
// 方法体
}
使用注意事项:
- 可变参数必须是方法的最后一个参数。
- 一个方法只能有一个可变参数。
- 可变参数在方法内部被视为数组,因此你可以像操作数组一样操作它们。
数组
数组的声明和创建
int[] myArray = new int[5];
内存分析
Java内存:
- 堆
- 存放
new
的对象和数组 - 可以被所有的线程共享,不会存放别的对象引用
- 存放
- 栈
- 存放基本变量类型(会包含这个基本类型的具体数值)
- 引用对象的变量(会存放这个引用在堆里面的具体地址)
- 方法区
- 可以被所有的线程共享
- 包含了所有的
class
和static
变量
三种初始化
-
静态初始化
int[] a = {1,2,3}; Man[] m = {new Man(1, 1), new Man(2, 2)};
-
动态初始化
int[] a = new int[2]; a[0] = 1; a[1] = 2;
-
数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此一旦数组分配空间结束,其中的每个元素也会按照和实例变量同样的方式被隐式初始化。- 对于整型数组(int[]、long[]等),默认值为0。
- 对于浮点型数组(float[]、double[]等),默认值为0.0。
- 对于布尔型数组(boolean[]),默认值为false。
- 对于引用类型数组(String[]、Object[]等),默认值为null。
数组的四个特点
- 固定长度: 一旦数组被创建,它的长度就是固定的,不能再改变。
- 相同类型元素: 数组中的所有元素必须是相同的数据类型。
- 元素任意类型:数组中元素可以是任何数据类型,包括基本类型和引用类型。
- 数组属于引用类型: 在Java中,数组本身也是对象,其中每个元素可以看做对象的成员变量,因此可以调用其相应的方法。
Java中对象是在堆中,因此数组无论保存原始类型还是其他对象类型,数组对象本身都是在堆中的。
数组边界
合法区间[0, length - 1]
ArrayIndexOutOfBoundsException:数组下标越界异常!
Arrays类
Java中的Arrays
类是java.util
包中提供的一个实用工具类,用于对数组进行各种操作。
这个类提供了许多静态方法来对数组进行排序、搜索以及其他常见的操作。
由于Arrays类中的方法都是static
修饰的静态方法,因此可以直接通过类名进行调用。
一些Arrays
类中常用的方法包括:
排序方法:
sort()
:用于对数组进行排序,可以按升序或者自定义的比较器进行排序。
搜索方法:
binarySearch()
:使用二分查找算法在已排序的数组中搜索指定元素。
比较方法:
equals()
:用于比较两个数组是否相等。
填充方法:
fill()
:将数组的所有元素设置为指定的值。
转换为列表:
asList()
:将数组转换为列表。
输出为字符串:
toString()
:将数组转换为字符串。
注意import java.util.Arrays
以及Array.XXX()
稀疏数组
稀疏数组是一种数据结构,用于表示大部分元素为同一值(通常为0)的二维数组。
它通过压缩存储来节省空间,通常用于表示稀疏矩阵或者在某些特定条件下的二维数组。
稀疏数组通常由三列组成:
- 行数:原始二维数组的行数。
- 列数:原始二维数组的列数。
- 数值:包含非默认值的元素及其位置信息。
row col value
3 4 6
0 0 1
0 3 2
1 1 3
1 2 4
2 0 5
2 2 6
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!