第1章 基本的编程结构

1.1 第一个程序

HelloWorld.java

public class HelloWorld{
    public static void main(String[] args){
        System.out.println("Hello,World!");
    }
}

Java是面向对象的语言
对象是类的实例
所有代码都在类中被定义

1.1.2 编译和运行Java程序

javac命令将源代码编译为中间代码字节码)并保存到类文件
java命令启动虚拟机,虚拟机加载类文件并执行字节码
字节码可以在任何Java虚拟机上运行“编写一次 到处运行”

1.1.3 方法调用

System.out是PrintStream类的实例
PrintStream类有println,print等方法,称为实例方法
使用点符号调用对象上的实例方法
对象可以储存在变量中,以便调用多个方法

1.1.4 JShell

JShell提供 读取-评估-打印 模式

1.2 基本类型

有些值属于基本类型

1.2.1 有符号整型

类型储存 (字节)
byte1个
short2个
int4个
long8个

数字添加下划线方便阅读,Java会直接删除
1_000_000

1.2.2 浮点类型

类型储存(字节)
float4个
double8个

Double.POSITIVE_INFINITY 代表正无穷
Double.NaN代表 非数值
所有 非数值 被认为是彼此不同
检查非数值使用 if(Double.isNaN)

若需要精确计算(金融),使用BigDecimal类

1.2.3 char型

\n 换行
\r 回车
\t tab
\b 退格

1.2.4 布尔型

true和false
与整数1和0没有关系

1.3 变量

1.3.1 变量的声明

Java是强类型语言,变量值只能是某个具体类型的值,但初始值可选
例如 int total = 0;
可以一次声明多个
int total = 0, count;

1.3.2 名称

不能有空格 保留字
变量和方法以小写字母开始,后面单词首字母大写
的名称第一个字母大写

1.3.3 初始化

变量需要初始化

尽可能在需要时再声明变量

1.3.4 常量

final 表示一个值,赋值后不能改变
final int DAYS_PER_WEEK = 7;
常量使用大写字母
final变量初始化可以延迟在使用前

1.4 算术操作

&& 逻辑与
|| 逻辑或
? : 条件语句

1.4.1 赋值

x = expression;

1.4.2 基本运算

/ 两个数均为整型则为整除
整数除以0会导致异常 浮点数除以0 会产生NaN或者无限值,不会异常

n++在递增前产生结果
++n在递增后产生结果

1.4.3 数学方法

Math.pow(x,y) 数的次方
Math.sqrt(x) 数的平方根

1.4.4 数字类型转换

运算前
有double变double
有float变float
有long变long
否则两个变为int

若没有信息损失,则转换合法

int到float
long到浮点型
合法但损失信息

使用()进行强制转换

1.4.5 关系和逻辑操作符

注意“捷径”评估

1.4.6 大数

BigInteger和BigDecimal
对位数没有限制

BigInteger n = BigInteger.valueOf(1231231231312312313L);

BigInteger r = BigInteger.valueOf(5).nultiply(n.add(k);

1.5 字符串

1.5.1 字符串的链接

使用 + 可以将字符串链接
字符串与值连接时,值转为字符串

分隔符链接 String.join(链接符, 字符串)

1.5.2 子字符串

substring方法
split方法

1.5.3 字符串比较

equals方法
equalsIgnoreCase方法:不区分大小写比较
不能使用==进行字符串比较

可以使用==测试字符串是否为null

compareTo方法:字典序比较,返回正负或者0

1.5.4 数字与字符串转换

Integer.toString方法

Integer.parseInt方法

1.5.5 String类API

boolean startsWith
boolean endsWith
boolean contains

int indexOf
int lastIndexOf
int indexOf(String str,int fromIndex)

String replace(CharSequence oldString, CharSequence newString)

String toUpperCase()
String toLowerCase()

String trim()删除前后空白

String类型是不可变的,任何String方法都不能修改自己的字符串,而是返回一个新的字符串

1.6 输入和输出

1.6.1 读取输入

System.in对象只有读取单个字节的方法,需要构建Scanner
Scanner in = new Scanner(System.in);

System.out.println(“name?”);
String name = in.nextLine();//读取一行
String firstName = in.next();//读取一个单词
int age = in.nextInt();读取整数

1.6.2 格式化输出

System.out.printf(“%d”,100);

转换字符用途
d十进制整数
f定点浮点数
s字符串
c字符
b布尔值

1.7 控制流

1.7.1 分支

if(){

}else

if(){

}else if(){

}

1.7.2 循环

while(){

}

先执行再循环

do{
}while();
for(int i = 0;i <= 20; i++){
}

若省略条件判断,则默认总为真

1.7.3 跳出与继续循环

break 退出循环
continue 跳过本次循环

1.7.4 局部变量作用域

局部变量:方法内(包括在方法的参数变量内)声明的任何变量
变量的作用域:可以访问变量的地方

局部变量的作用域从声明变量出延伸到封闭块的结束

while(){
	System.out.print;n(...);
	String input = in.next();//作用域开始
	...
	//作用域结束
}

对于for循环,变量作用域扩展到循环的结束,包括条件测试和更新声明
重叠的作用域范围内不能有同名的局部变量

1.8 数组和数组列表

1.8.1 使用数组

所有类型都有相应的数组类型

int[]
String[]
String[] names;
names = new String[100];
String[] names = new String[100];
names.length//获取长度

1.8.2 构造数组

使用new构造数组,会以默认值填充
数字类型使用0
boolean使用false
对象数组使用null

int primes = {2,3,5,7,11,13};
String[] authors = {
	"a",
	"b",
	"c"
};

primes = new int[] {1,2,3,4}

1.8.3 数组列表

数组长度无法改变
使用ArrayList
ArrayList为泛型类

ArrayList<String> friends;
friends = new ArrayList<>();
friends.add(0,"Peter");
friends.remove(1);

String first = friends.get(0);//访问元素使用方法调用
friends.set(1,"Mary");

1.8.4 基本类型包装类

泛型类无法使用基本类型作为类型参数,故要使用基本类型的包装类
Integer
Byte
Short
Long
Character
Float
Double
Boolean

ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(42);
int first = numbers.get(0);

1.8.5 增强for循环

另一种for循环
循环变量被赋值为numbers[0], numbers[1]等

int sum = 0;
for(int n : numbers){
	sum += n;
}

1.8.6 数组与数组列表的复制

普通复制会使得变量共用数组

int[] numbers = primes;
numbers[5] = 42;//primes[5]也变成42

真正的复制使用Arrays.copyOf

int[] copiedPrimes = Array.copyOf(primes,primes.length);

数组列表也是同样原理

ArrayList<String> people = friends;
ArrayList<String> copiedFriends = new ArrayList<>(friends);

String[] name = ...;
ArrayList<String> friends = new ArrayList<>(List.of(names));

1.8.7 数组算法

Array.fill(numbers, 0);//int[] 数组
Collections.fill(friends,"");// ArrayList<String>

Array.sort(numbers);
Collections.sort(friends);

System.out.println(Arrays.toString(primes));//产生数组的字符串表示
String element = friends.toString();//数组列表的字符串表示方法
System.out.println(friends)

Collections.reverse(names);
Collections.shuffle(names);

1.8.8 命令行参数

命令行中的参数赋值给args
public static void main(String[] args);

1.8.9 多维数组

Java中多维数组是数组的数组

int[][] square = new int[4][4];//行在前,列在后

1.9 功能分解

1.9.1 静态方法的声明与调用

public static double average(double x, double y){
	double sum = x + y;
	return sum/2;
}
public static void main(String[] args){
	double a = ...;
	double b = ...;
	double result = average(a,b);
}

1.9.2 数组参数与返回值

数组传递给方法,方法收到数组的引用,通过引用可以修改数组

//交换元素
public static void swap(int[] values, int i, int j){
	int temp = values[i];
	values[i] = values[j];
	values[j] = temp;
}

1.9.3 可变参数

类型之后加上…声明可变参数

//可变参数相当于数组
public static double average(double... values){
	double sum = 0;
	for (double v : values) sum += v;
	return values.length == 0 ? 0: sum/ values.length;
}

可变参数必须为方法的最后一个参数

  • 26
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值