学习java的第一周
前言
这是开始学习java的第一周,开始我也不知道去哪里找资源学习比较好,后来我问我哥要了一个学习java的网址,按照上面的教程,创建好了环境并且安装一个编辑器后,才开始正式学习。
(编译器在运行的时候出了很多错误,我在此期间花了很多时间去询问我哥和百度来解决这些问题)
写的均为与c同的地方,相同的没有做笔记
网址
程序基础
变量和数据类型
基本数据类型
- 整数类型:byte,short,int,long
- 浮点数类型:float,double
- 字符类型:char
- 布尔类型:boolean(值只有
ture
和false
)
var关键字
定义的时候,可以用var代替基本数据类型的名字,编译器会根据赋值语句自动推断出变量的类型。
学习的第一个java程序
在java中,总有这样的代码
public class Hello {
public static void main(String[] args) {
....
}
}
- 其中class是定义一个类,public表示它是公开的,Hello是自己定义的类的名称(习惯开头字母为大写) ,main中有一个参数,参数类型是String[],参数名是args,public static是一个公开的静态方法。
- 在定义变量时,可以采取C的定义方式,如
int i=0; char a = '*';
,也可以直接var i=0;var a='*';
编译器会根据赋值语句自动推断出变量的类型。
数据类型中的计算
整形
和C中相同
浮点型
- 俩浮点数比较是否相等的时候不能直接比较,因为会存在误差,因此比较的方法是判断两个浮点数之差的绝对值是否小于一个很小的数;
- 当数据溢出的时候不会报错但会返回几个特殊值:
NaN
表示Not a Number,Infinity
表示无穷大,Infinity
表示负无穷大
连接字符串
public class Main {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "world";
String s = s1 + " " + s2 + "!";
System.out.println(s);
}
}
- 可以使用+连接任意字符串和其他数据类型,这样极大地方便了字符串的处理,这个结果输出的是
Hello world!
- 如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接
- 如果想要表示多行字符串可以用"""..."""表示
数组类型
int[] ns = new int[5];
- 数组定义的方式,定义一个数组类型的变量,使用数组类型“类型[]”,数组变量初始化必须使用new int[5]表示创建一个可容纳5个int元素的数组。
- 可以用
数组变量.length
获取数组大小; - 可以利用指向,来改变数组数组中某个元素的值
流程控制
输入与输出
输出
- 使用
System.out.println()
来向屏幕输出一些内容。
println
是print line的缩写,表示输出并换行。所以,如果输出后不想换行,可以用print():
注:这些输出方式都会格式化输出,表示的数据不一定适合人来阅读,可以将println
改为printf
输入
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner对象
System.out.print("Input your name: "); // 打印提示
String name = scanner.nextLine(); // 读取一行输入并获取字符串
System.out.print("Input your age: "); // 打印提示
int age = scanner.nextInt(); // 读取一行输入并获取整数
System.out.printf("Hi, %s, you are %d\n", name, age); // 格式化输出
}
}
- 需要
import
语句导入java.util.Scanner
,创建Scanner
对象并传入System.in
。 - 当中的
nextLine
用于接收字符串,nextInt
用于接收整形数据,除此之外还有nextBollen
,nextShort
,nextLong
,nextFloat
,nextDouble
,分别对应不同的数据类型。
if判断
- 大致都与c中的一样,看到一个不同的地方
- equals函数用来比较值是否相同,==用于比较地址是否相同。
堆和栈的区别
- 对象是存放在堆里面的,变量是存放在栈里面的
- 堆里面的一般都是地址的
- 栈里面的一般都是取值的
switch多重选择
public class Main {
public static void main(String[] args) {
String fruit = "apple";
switch (fruit) {
case "apple" -> System.out.println("Selected apple");
case "pear" -> System.out.println("Selected pear");
case "mango" -> {
System.out.println("Selected mango");
System.out.println("Good choice!");
}
default -> System.out.println("No fruit selected");
}
}
}
- 新语法使用
->
,如果有多条语句,需要用{}
括起来。不要写break
语句. - 如果需要复杂的语句,我们也可以写很多语句,放到
{...}
里,然后,用yield
返回一个值作为switch
语句的返回值。
数组操作
遍历数组
- 除c语言方法之外的另外遍历数组的方法
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 4, 9, 16, 25 };
for (int n : ns) {
System.out.println(n);
}
}
}
- 在
for (int n : ns)
循环中,变量n
直接拿到ns
数组的元素,而不是索引
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 1, 2, 3, 5, 8 };
System.out.println(Arrays.toString(ns));
}
}
- 也可以利用
Arrays.toString()
来打印数组内容。
数组排序
- 冒泡排序
- Java的标准库已经内置了排序功能,我们只需要调用JDK提供的
Arrays.sort()
就可以排序
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
Arrays.sort(ns);
System.out.println(Arrays.toString(ns));
}
}
多维数组
- 打印多维数组可以用俩个for循环的形式
for (int[] arr : ns) {
for (int n : arr) {
System.out.print(n);
System.out.print(', ');
}
System.out.println();
}
- 使用Java标准库的
Arrays.deepToString():
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[][] ns = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
System.out.println(Arrays.deepToString(ns));
}
}