03_Java的基本程序设计结构

HelloWorld

一个简单的示例

public class FirstSample 
{
    public static void main(String[] args)
    {
        System.out.println("Hello world");
    }
}

基本语言规范

命名规则

区分大小写

组成:字母、数字、_ 、$、某种语言中表示字母的任何Unicode字符

必须以字母开头,类名以大写字母开头

不能使用单独的 _

$ 仅用在有编译器生成的名字中

源代码文件名与公共类名相同

骆驼命名法

main方法

虚拟机从main方法的代码开始执行

类的源文件必须包含一个main方法

main方法必须声明为public static

main方法正常退出,则程序的退出码为0(使用System.exit方法返回其他的退出码)

main方法接受一个String数组类型的命令行参数,在控制台输入 java FirstSample 命令行以接收

注释

//这是一个注释,直到本行结尾
/*
这是一个注释
*/
/**
这是一个注释,同时自动生成文档
*/

添加任意多的注释,不必担心可执行代码膨胀

其他

使用 {}划分代码块

所有语句以 结束

Java的全部内容必须放置在类中

所有函数都是某个类的方法

数据类型

java是一种强类型语言,每个变量声明一种类型

数据类型的范围与运行Java代码的机器无关

Java没有任何无符号数据类型

基本数据类型

整型

类型字节大小取值范围数值表示
byte1-128~127
short2-32768~32767
int4-2147483648~2147483647
long8-9223372036854775808~9223372036854775807数值L
进制数值表示
二进制0B数值
十进制
八进制0数值
十六进制0X数值

浮点型

类型字节大小取值范围数值表示
float4±3.40282347E+38F数值F
double8±1.79769313486231570E+308数值D
进制数值表示
二进制0B基数p指数
十进制基数p指数
八进制0基数p指数
十六进制0X基数e指数

浮点数值计算遵循 IEEE 754 规范

常量Double.POSITIVE_INFINITY(正无穷大)、Double.NEGATIVE_INFINITY(负无穷大)、Double.POSITIVE_NaN(不是一个数)

任何数不等于NaN,提供Double.isNaN(x)判断一个数x是否为NaN

使用浮点型计算会有舍入误差,使用BigDecimal类避免

char类型

表示方法’字面量值’或十六进制值\u0000 – \uFFFF

转义序列名称Unicode值
\u (可出现在引号外)
\b退格\u0008
\t制表\u0009
\n换行\u000a
\r回车\u000d
\"双引号\u0022
\’单引号\u0027
\\反斜杠\u005c
字符编码
Unicode码点长度固定,分为17个代码平面,1个基本多语言平面码点为U+0000U+FFFF,其余16个平面码点为U+10000U+10FFFF并包括辅助字符
UTF-16采用不同长度的编码,基本多语言平面中由16位表示的字符作为代码单元,一个码点编码为多个代码单元

char类型描述了UTF-16编码中的一个代码单元

变量与常量

变量声明

 类名  变量名1,变量名2...

变量初始化

必须用赋值语句对变量进行显式初始化
不能使用未初始化的变量
可将变量的声明和初始化放在同一行,同时可用var代替可由初始化语句推断出的类型

变量名=;
类名 变量名=;
var 变量名=;

常量

使用关键字final定义一个常量
使用static final定义一个类常量,定义在main方法的外部,可在一个类的多个方法中使用
使用public static final定义的常量可在其他类的方法中使用

枚举类型

使用enum关键字自定义枚举类型 ,将变量的取值限定在一个有限的集合内,否则为null

enum 枚举类名 {枚举值1,枚举值2,枚举值3};\\自定义枚举类型
枚举类名 变量名=枚举类名.枚举值1;\\定义一个值为枚举值的枚举变量

运算符

算数运算符

+ :加

- :减

* :乘

/ :除 ,当两个操作数为整数是表示整数除法,否则表示浮点除法

%:取余,符号与第一个操作数保持一致

没有幂运算符

对于浮点数的算术运算,实现可移植性相当困难

允许不同的浮点寄存器对中间过程采用不同的计算精度拓展指数,但不允许拓展尾数,不会产生溢出

使用strictfp关键字标记的方法或类必须使用严格的浮点计算,会产生溢出

数学函数与常量

Math类

  • 幂运算:pow方法

  • 模运算:floormod方法,符号与第二个操作数保持一致

  • 三角函数:sin方法、cos方法、tan方法、atan方法、atan2方法

  • 指数运算:exp方法、log方法、log10方法

  • 舍入运算:round方法

  • 安全的运算:mutiplyExact方法、addExact方法、subtractExact方法、incrementExact方法、decrementExact方法、negateExact方法,可以正确地处理int或long参数,否则生成一个异常

  • 数学常量:Math.PI、Math.E

对于严格的浮点计算,使用StrictMath类

数值之间的转换

当用一个二元运算符连接两个基本数据类型的值时,先要将两个操作数转换为同一类型

一个为double,另一个转为double

否则,一个为float,另一个转为float

否则,一个为long,另一个转为long

否则,两个都转为int

强制类型转换

可能会损失信息,产生截断

(目标类型)变量名;

结合赋值运算符

变量 +=;
变量 -=;
变量 *=;
变量 /=;
变量 %=;

自增与自减运算符

前缀形式:++变量 、- - 变量 ,先自增或自减,再进行其他运算

后缀形式:变量++ 、变量 - - ,先进行其他运算,再自增或自减

关系和boolean运算符

关系运算符:== != > < >=<=

布尔运算符:&& ||

三元运算符:条件 ? 表达式 : 表达式

位运算符

与:&,或:| ,异或:^ ,非:~

算术左移:>> (使用符号为填充高位)、逻辑左移>>> (使用0填充高位)、右移:<<

移位运算的有操作符要先完成模32运算,除非左操作数为long要完成模64运算

括号与运算符级别

运算符结合性
[] . ()
! ~ ++ – - () new右到左
* / %
+ -
<< >> >>>
< <= > >= instanceof
== !=
&
^
|
&&
||
?:右到左
= += *= /= %= |= ^= <<= >>= >>>=右到左

字符串

子串

substring方法

拼接

+ 自动调用toString方法,将两个Java对象转换为字符串,然后拼接在一起

静态join方法

repeat方法(Java11)

字符串特性

String不是内置的基本类型,而是在标准Java库中定义的一个类

字符串是不可变的,可以通过操作子串,再重新赋值,以达到修改的效果

字符串字面量是共享的,存放在公共的存储池中,引用相同字符串的String变量指向存储池的同一地址

通过+或substring等操作得到的字符串并不共享

检测字符串是否相等

equals方法

equalsIgnoreCase方法

==只能检测指向同一共享存储池地址的字符串

空串与Null串

空串:"" ,即长度为0的字符串

null串:表示目前没有任何对象与该String变量关联

注意先检查不为null,以免在一个null值上调用方法

码点与代码单元

length方法:返回代码单元数量

charAt方法:返回指定索引处的代码单元的值

codePointCount方法:返回码点数量

offsetByCodePoints方法:返回指定索引处码点所在的代码单元的索引

codePointAt方法:返回指定代码单元索引处的码点的值

codePoints方法:返回一个int值的流,每个int值对应一个码点。

再通过对codePoints方法的返回值调用toArray方法转换成一个数组。反之可以将这个数组交给String的构造器构造一个字符串

构建字符串

对于使用较短的字符串构建字符串的情况,如果使用String类拼接每次都会构建一个String对象

Stringbuilder类可以避免对短字符串拼接时的资源浪费,它通过append方法添加字符串。再通过toString方法得到String对象

输入与输出

读取输入

System.in是一个标准输入流

通过Scanner构造器将一个Scanner对象与System.in关联,就可以使用Scanner类的方法读取标准输入流中的输入

Scanner类定义在Java.util包中

nextLine方法:读取一行字符串

next方法:读取一个单词

nextInt方法:读取一个整数

Java6中引入的Console类有专门用于从控制台读取密码的readPassword方法,它将输入放于一个数组中,处理完成后可以方面将这个数组覆盖掉

格式化输出

使用标准输出流的print方法进行输出

沿用了C语言的printf方法,可以进行格式化输出

也可使用String类的format方法创建一个格式化字符串,再进行输出

文件输入与输出

文件的读取同样需要一个Scanner对象,需要在构造函数中提供文件的路径(路径可由Path类的of方法将包含路径的字符串转换为Path对象)和编码方式(如StandardCharsets.UTF_8),如果只提供字符串将会把它解释为数据而不是文件名

想要写入或创建文件需要一个PrintWriter对象,提供包含文件路径的字符串和编码方式

控制流程

块作用域

{}表示块的范围,块确定了变量的作用域

块可嵌套在另一块中,但不能在嵌套的两个块中声明同名的变量

条件语句

if(条件1){表达式1;}
else if(条件2){表达式2;}
else {表达式3;}

循环

while(条件){表达式;}

do{表达式;}while(条件)

确定循环

for(定义迭代变量;条件;更新迭代变量){表达式;}

switch语句

switch(变量)
{
case1:表达式;
case2:表达式;
default:表达式;
}

将从与选项值匹配的case标签开始执行,直到switch语句结束。可以在匹配的case标签后使用break语句跳出switch语句

case标签可以是char、byte、short、int、枚举常量、字符串字面量(Java7)

中断控制流程的语句

break;//用于跳出循环
标签:			//标签必须在希望跳出的循环之前
while()
{
	...
	break 标签;//用于跳出多层嵌套的循环语句,跳到与标签匹配的循环的尾部
	...
}
continue;//跳过循环体的剩余部分
标签:			//标签必须在希望跳出的循环之前
while()
{
	...
	continue 标签;//用于跳出多层嵌套的循环语句,跳到与标签匹配的循环的首部
	...
}

大数

BigInteger类、BigDecimal类:用于处理包含任意长度采用任意精度的数字序列的数值

包含于java.math包中

使用valueOf方法将普通的数值转换为大数

对于更大的数可以将字符串传递给大数的构造器

包含了常量:BigInteger.ZERO、BigInteger.ONE、BigInteger.TEN

使用add方法、subtract方法、mutiply方法、divide方法、compareTo方法处理大数

数组

声明数组

元素类型[] 变量名;
元素类型[] 变量名=new 元素类型[元素个数];
元素类型[] 变量名={1,2,3};
new 元素类型[]{1,2,3};

可以声明长度为0的数组

访问数组元素

通过索引访问,索引从0~元素个数-1

不能通过对数组变量+1访问下一个元素,因为Java没有指针运算

数字数组元素默认初始化为0,boolean数组元素默认初始化为false,对象数组元素默认初始化为null

array.length是数组元素个数

for each循环

for(声明变量:数组或集合)表达式;\\变量用于暂是引用集合中的每一个元素,对每个元素应用表达式

使用迭代器遍历整个集合,因此必须实现Iterable接口

数组拷贝

Arrays类的copyOf方法,可以将一个数组的所有值拷贝到一个新的指定大小的数组中,能达到增加数组大小的功能

数组排序

Arrays类的sort方法,使用快速排序法排序

多维数组

元素类型[][] 变量名;
元素类型[][] 变量名=new 元素类型[一维元素个数][二维元素个数];
元素类型[] 变量名={{1,2,3},{1,2,3},{1,2,3}};

for each循环不能自动处理二维数组的每一个元素

Arrays类的deepToString方法返回一个字符串,传递给print方法,打印出每一个元素

不规则数组

Java实际上没有多维数组,多维数组被解释为一维数组的元素是一个数组,而存放在不同元素中的数组大小可以不同

只需为一个一维数组的每个元素单独使用构造器

元素类型[][] 变量名=new 元素类型[元素个数][];
for (int i=0;i<MAX;i++)
{变量名[i]=new 元素类型[元素个数];}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值