1.一个简单的Java应用程序
public class OneBlogs { public static void main(String[] args) { System.out.println("Hello world!"); } }
这个程序虽然简单,但是基本上所有的Java程序都是具有这种结构的。
下面逐一看这几行代码:
public是关键字,称为访问修饰符,用于控制程序的其他部分对这段代码的访问级别。
关键字class说明Java程序中的全部内容都包含在类中。
class后紧跟类名。类名采用大驼峰的命名方式,所有单词的首字母必须大写,但是不能使用Java保留字(public ,class等)作类名。例如:FirstSample就是一个合法的命名。
源代码的{ }划分程序的各个部分(通常称为块),任何方法的代码用 { 开始,用 } 结束。
我们先不用管static void ,暂时把它们当作编译程序的必要部分。每个程序都必须有一个main方法。格式如下:
public class OneBlogs { public static void main(String[] args) { program statements } }
下来看这个代码:
{ System.out.println("Hello world!"); }
一对大括号表示方法体的开始与结束,使用System.out对象调用它的println方法。注意:"."用于调用方法。Java使用的通用语法是object.method(parameters),这等价于函数调用。
2.注释
Java中有三种表示注释的方法:
1. // 注释内容从//开始到本行行尾 2. /* */注释界定符将一段较长的注释括起来
3.这种注释可以用来自动生成文档,/** */
警告:Java中注释不能嵌套。
3.数据类型
Java是一种强类型语言,必须为每一个变量声明一种类型。Java中一共有8中基本类型,其中包括4种整型,2种浮点类型,1种字符类型char(用于表示Unicode编码的代码单元),1种表示真值的布尔类型boolean。
数据类型 | 关键字 | 内存占用 | 范围 |
字节型 | byte | 1字节 | -128~127 |
短整型 | short | 2字节 | -32768~32767 |
整型 | int | 4字节 | -2^31~2^31-1 |
长整型 | long | 8字节 | -2^63~2^63-1 |
单精度浮点数 | float | 4字节 | |
双精度浮点数 | double | 8字节 | |
字符型 | char | 2字节 | 0~65535 |
布尔型 | boolean | 没有明确规定 | true和false |
注意:
·不论是16位系统还是32位系统int都占4个字节。不论是32位系统还是64位系统long占8字节
·整型和浮点型都是带有符号的
·整型默认为int型,浮点型默认为double型
什么是字节?字节是计算机中表示空间大小的基本单位
4.变量与常量
4.1 声明变量
格式:数据类型 变量名 例:
int age; double salary; long earthPopulation; boolean done;
从中可以看出,每个声明都以分号结束。声明是一条完整的语句,分号在这里是必须加的。
tip:$是一个合法的Java字符,但是不要在代码中使用这个字符,它只在Java编译器或其他工具生成的名字中。
可以在一行中声明多个变量:
int i ,j, k; //不提倡这种风格 逐一声明每个变量提高代码的可读性。
4.2 变量初始化
声明一个变量后必须使用赋值语句对变量进行显式初始化。不能使用未初始化的变量。
否则:
public static void main(String[] args) { int i; System.out.println(i); }
这段代码会出现如下错误:
要想对一个声明过的变量赋值就得把变量名放在 = 左边,值或者表达式放在 = 右边,例:
int age; age = 10000; int month; month = 8; int week = 6;
tip:在Java中,变量声明尽量靠近第一次使用的地方,这是一个比较好的编程习惯
4.3 常量
在Java中,利用关键字指示常量,例如:
public static void main(String[] args) { final double P_I_E = 3.14; System.out.println(P_I_E); }
tip : final表示的这个变量只能被赋值一次,一旦被赋值便不能再更改,习惯上,常量名全大写。
还有一种常量被称为类常量,这个常量可以在一个类的多个方法中使用,可以使用 static final 设置一个类常量,例如:
static final double P_I_E = 3.14; public static void main(String[] args) { System.out.println(P_I_E); }
注意:类常量定义于类方法的外部。
5.运算符
运算符用于连接值
5.1 算术运算符
+ - * / 分别表示加 减 乘 除运算。
整数的取余操作符用 % 表示。例:15 % 7 == 1
当参与 / 运算的两个操作数都是整数,表示整数除法,否则表示浮点除法。
例:15 / 2 ==7 ;15 / 2.0 == 7.5
5.2 数学函数与常量
在Math类中包含了各种各样的数学函数,使用前加上这样一句代码:
import static java.lang.Math.*;
sqrt :计算一个数的平方根 ,例:
import static java.lang.Math.*; public class OneBlogs { public static void main(String[] args) { double a = 25; double b = sqrt(a); System.out.println(b); } }
Math类中的sqrt方法不处理任何对象,这样的方法称为静态方法。
pow:表示幂运算 ,格式:pow(a , k)表示a的k次幂,例:
public static void main(String[] args) { double a = 2; double b = 3; double c = pow(a,b); System.out.println(c); }
Java还提供两个用于表示 π 和 e 常量最接近的近似值:Math.PI Math.E
5.3 数值类型之间的转换
图中有箭头实线表示无数据丢失的转换,无箭头的实线表示有数据丢失的转换
Java中,当使用一个二元运算符连接两个值时,会先将两个操作数转换成同一种类型,再计算。
·有一个操作数是double类型,另一个也会转换成double类型
·有一个操作数是float类型,另一个也会转换成float类型
·有一个操作数是long类型,另一个也会转换成long类型
·否则其余都将转换成int类型
5.4 强制类型转换
上面提到必要时,int会转换为double类型,Java中允许经过强制类型转换将double转换为int,例:
double a = 3.5678; int b = (int) a;
这样经过上述代码 b的值为3,因为强制类型转换通过截断小数部分将浮点值转化为整型。
如果想对浮点数进行舍入运算,得到最接近的整数,就需要Math.round方法,例:
double a = 9.999; int b = (int) Math.round(a);
注意:round方法的返回值为long类型,所以必须使用强制类型转换(int)。
5.5 结合赋值和运算符
+= -= *= /= %=
例:a+=2 等价于 a=a+2
如果运算得到一个值与左侧操作数类型不同,就会发生强制类型转换,例:
int a; //a是int类型 a+=2.2; //是合法的等价于(int)(a+2.2)
5.6 自增自减运算符
++ --
i++与++i的结果都会使i进行加1,但它俩的区别主要在给表达式赋值的地方体现,例:
int i = 1; int a = ++i; //先进行++再给a赋值,所以a是2 int b = i++; //先赋值再进行++,所以b还是1 -- 与 ++一样
5.7 逻辑运算符
逻辑与:&& 逻辑或:|| 逻辑非:! 这三个运算结果都是boolean类型,true或false
表达式1 && 表达式2,如果有一个表达式为假,结果就为假
表达式1 || 表达式2,如果有一个表达式为真,结果就为真
逻辑非!,假变真,真变假
5.8 位运算符
按位与 &:如果两个二进制位都是1,则结果为1,否则结果为0
1 0 1 1 0 1 0 1
1 1 0 0 1 1 0 1
1 0 0 0 0 1 0 1
按位或 |:如果两个二进制为都为0则结果为0,否则结果为1
按位取反 ~:如果该位为0则变为1,该位为1,则变为0
按位异或 ^:如果两个二进制位相同结果为0,不同为1
5.9 移位运算
左移<<:最左侧位不要了,右边补0
右移>>:最右侧位不要了,左边补符号位(正数补0,负数补1)
无符号右移>>>:最右侧位不要了,左侧补0
5.10 条件运算符
条件运算符也是Java中唯一一个三目运算符
表达式1?表达式2:表达式3 表达式1结果为真,则结果为表达式2,否则,为表达式3
代码示例:得到两个数的最大值 :
public static void main(String[] args) { int a = 12; int b = 23; int max = a > b ? a : b; System.out.println(max); }
6.字符串
从概念上Java字符串就是Unicode字符序列。Java没有内置的字符串类型,而是在Java类库中提供了一个预定义类,叫作String。用双引号括起来的字符串都是String类的实例:
String a = " "; String names = "huanghe";
6.1 子串
String类的substring方法可以从一个较大的字符串提取出一个子串,例如:
String str = "hello world"; String str1 = str.substring(0,3); //会创建"hel"这个字符串
注意:在substring中从0开始计数,这里从0开始到3结束(不包括3),也就是复制位置0,1,2
优点:容易计算子串的长度,上述例子中子串的长度为3-0=3。
6.2 拼接
Java允许使用 “+” 连接两个字符串,例:
String str1 = "hello"; String str2 = "world"; String str3 = str1 + str2; //str3 = "helloworld"
注意:单词之间没有空格,+号完全按照给定的次序将两个字符串拼接起来。
这种特性常常用于输出语句中,例:
System.out.println("your name is"+name);
6.3 检测字符串是否相等
使用equals方法检测两个字符串是否相等,格式:str1.equals(str2) , 其结果是布尔类型,可以定义一个布尔类型的变量接收结果,例:
public class OneBlogs { public static void main(String[] args) { String str1 = "hello"; String str2 = "world"; String str3 = "hello"; boolean a = str1.equals(str3); System.out.println(a); } }
运行结果:
6.4 空串与Null串
空串" "是字符长度为0的字符串,可以调用以下代码检查一个字符串是否为空串
if (str.length()==0) 或者 if(str.equals(""))
String还可以存放一个特殊值为null,表示目前没有任何对象与该变量关联,检查一个字符串是否为null使用如下代码:
if( str == null )
7.输入与输出
7.1 从键盘输入
使用Scanner读取字符串,整数,浮点数
首先需要导入util包:import java .util .Scanner;
还需构造一个与“标准输入流”System.in关联的Scanner对象:
Scanner sc = new Scanner(System.in);
例:
public static void main(String[] args) { Scanner sc = new Scanner(System.in); String name = sc.nextLine(); System.out.println(name); }
如果想要读取一个整数,可以调用nextInt 方法(这种用的最多)例:
Scanner sc = new Scanner(System.in); int age = sc.nextInt();
7.2 输出
在这里介绍三种输出方法:
int age = 20; System.out.println(age); //第一种:输出自动换行 System.out.print(age); //第二种:输出不换行 System.out.printf("%d",age); //第三种:格式化输出
格式说明符尾部的转换符指示要格式化的数值的类型:f表示浮点数,s表示字符串,d表示十进制数。
8.程序逻辑控制
8.1 if 语句
语法格式1:
if(布尔表达式){ 语句 }
如果布尔表达式结果为true,执行大括号中的语句,否则不执行。
语法格式2:
if(布尔表达式){ 语句1; }else{ 语句2; }
如果布尔表达式结果为true执行语句1,否则执行语句2。
语法格式3:
if(布尔表达式1){ 语句1; }else if(布尔表达式2){ 语句2; }else{ 语句3; }
表达式1成立执行语句1,表达式2成立执行语句2,否则执行语句3。
注意:if else 语句中可以不加大括号,但是只能写一条语句(不建议这样使用),else与和它最近的 if 相匹配。实际开放中建议加上大括号。
8.2 switch语句
基本语法:
switch(表达式){ case 1: 语句1; break; case 2: 语句2; break; case 3: 语句3; break; ...... default: 不满足执行此语句; break; }
执行流程:先计算表达式的值,然后与case比较,有对应的就执行对应的语句,遇到break结束,当表达式的值没有与之对应,就执行default下面的语句。
注意事项:· 多个case后的常量不可以重复
· switch的括号内只能是以下类型的表达式:
基本类型:byte,char,short,int
引用类型:String常量串,枚举类型
·break不要遗漏,否则会失去“多分支选择”的效果
·switch 虽然支持嵌套,但是不推荐
8.3 循环结构
8.3.1 while循环
语法格式:
while(循环条件){ 循环语句; }
循环条件为true,执行循环语句,否则结束循环
代码实例:计算1-100的和:
public class OneBlogs { public static void main(String[] args) { int sum = 0; int n = 1; while(n<=100){ sum+=n; n++; } System.out.println(sum); } }
注意事项:while下面的语句可以不写{},但只能写一条语句,建议加上{}
while后面的 { 建议和while写在同一行
while后面不要多写分号,否则导致循环不能正确执行
8.3.2 do while 循环
语法格式:
do{ 循环语句; }while(循环条件);
先执行循环语句,在判定循环条件,循环条件成立继续执行,否则循环结束
注意:while后面要加上分号
代码实例:打印1-10:
public class OneBlogs { public static void main(String[] args) { int i = 1; do{ System.out.println(i); i++; }while(i<=10); } }
8.3.3 for循环
基本语法:
for(表达式1;布尔表达式2;表达式3){ 循环语句; }
· 表达式1:用于初始化循环变量的初始值设置,再循环的最开始,只执行一次
· 布尔表达式2:循环条件,满足循环继续,否则循环结束
· 表达式3:循环变量的更新方式
代码示例:打印1-10:
public class OneBlogs { public static void main(String[] args) { for(int i=1;i<=10;i++){ System.out.print(i+" "); } } }
注意事项:·for下面的语句可以不加{},但是只能执行一条语句,建议加上
·for后面的 { 建议写在同一行
·for后面不要多写分号,否则导致循环不能正确执行
9.break与continue的区别
break:break语句是终止整个循环,不会再去判断循环条件是否满足
continue:continue是只终止本次循环,不是终止整个循环
举一个打印1-5的例子体会以下用法:
continue:
public class OneBlogs { public static void main(String[] args) { for(int i=1;i<=5;i++){ if(i==3){ continue; } System.out.println(i); } } }
打印结果:
break:
public class OneBlogs { public static void main(String[] args) { for(int i=1;i<=5;i++){ if(i==3){ break; } System.out.println(i); } } }
打印结果: