JAVA基础(二)

前言:我们接着复习java基础知识

一、运算符

在java中有算术运算符+、*、/、当参与/是注意操作数都是整数时,表示除法,反之就是浮点除法。
在整数被0除将会产生一个异常,而浮点数被0除将会得到无群大或者NaN结果
stricfp和transient都是不常用的关键字。如果将类标记为stricfp则严格按照浮点计算。

1. 数学函与常量

在java中没有幂运算必须借助Math类的pow方法 》 double y = Math.pow(x, a)表示x的a次幂
Math类中也提供了常用的三角函数,还有一些函数和反函数,还有Math.PI Math.E

2. 数值之间的转换

如果两个操作数有一个是double类型,另一个操作数就会转换为double类型
反之,如果其中一个操作数float类型,另一个操作数就会转换为float类型
反之,如果其中一个操作数long类型,另一个操作数就会转换为类型long类型
反之,两个操作数都将转换为int类型
JAVA基础(二)

3. 强势类型的转换

在java中可以允许double类型转换为int,但是需要强制类型转换来实现
double x = 9.997;
int nx = (int)x;
如果想对浮点数进行舍入运算,那就需要Math.round方法
注意:如果试图将一个数值从一个类型强制转换为另一个类型,而又超出了目标类型的表示范围,结果就截断成一个完全不同的值。
列如:(byte)300的实际值是44,另外Boolean值与任何数值类型之间不能转换,这样可以防止发生错误,只有极少数可以这样转。

4. 自增和自减运算符,这种在真实中的开发中是不建议使用,因为很容易带来烦人的bug

5. 关系和booean运算符

Java中延用了c++的用法,使用&&表示逻辑与运算,使用||表示或运算符:如果第一个已经能够确定值,第二个操作数就不必计算了

6.位运算符

应用在布尔值时,&和|运算也会得到一个布尔值,和上面的很类似,不过&和|不"短路”的方式求值
还有>>和<<运算符表示位模式的左移和右移
最后>>>运算符会用0填补高位,这与>>不同,他会用符号位填充高位,不存在<<<运算符
JAVA基础(二)

7.枚举类型

变量取值只限制在一个有限的集合中,具体我们在后面会学习到

二、字符串

Java没有内置的字符串类型,而是在标准Java类库中提供了一个与定义类,很自然叫做string,每个用双引号括起来的字符串都是string类的一个实列

1. 字串

String类的tubstring提供了从一个较大的字符串提取出一个字串。
列如:String greeting = “Hello”
String s = greeting.substring(0, 3);
表示创建了一个“hel”字符串它还可以计算字串的长度,字符串s.substring(a, b)的长度位b-a

2. 拼接

Java语言允许使用+号连接(拼接)两个字符串
注意如果需要把多个字符串放在一起,用一个定界分隔符,可以使用静态join方法;

3. 检验字符串是否相等

可以使用equals方法检测两个字符串是否相等,对于表达式:s.equals(t)
如果相等则返回true反之false,s可以是字符串变量也可以是字符串字面量
如果要检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法
注意:千万不要使用==运算符测试字符串的相等性,以免造成糟糕的bug

4. 空串和Null串

空串“”是长度位0的字符串,是一个Java对象,有自己的串长度(0)和内容(空),String变量还可以存放一个特殊值名位Null,表示目前没有任何对象和该变量关联

5. 格式化输出

System.out.printf("%8.2f", x);表示用8个字符宽度和小数点后面两个字符精度打印x
可以使用String.format方法创建一个格式化的字符串,而不打印输出

三、控制流程

1、 程序和语句
1- java文件编写结构
class(类)是最外层的结构
class包含变量和方法
方法中包含语句
2- 程序的三种逻辑结构
顺序
从上到下按照顺序执行
选择(分支)
if分支结构
if(判断句)
{ 语句a;}
  JAVA基础(二)

if(判断句)
{ 语句a;}
else
{语句b;}
  JAVA基础(二)
if(判断句)
{语句a;}
else if(判断句)
{语句b;}
else
{语句c;}

2.switch分支语句
利用if...else可以实现多条件的验证,而switch只能进行多数值的判断,而且switch支持的判断数据类型(一直在发展):
最初:int JDK1.5:加入枚举类型 JDK1.7:加入String类型
语法:
switch (表达式){
case 值1 :
语句1 break;
case 值2 :
语句2 break;
...
default :
语句n break;
}

循环
1.while循环

while(boolean表达式){
循环体语句;

先判断后执行

2.do...while循环

do{
循环体语句;
}while(boolean表达式);
先执行一遍再判断,至少会执行一遍

3.for循环

for(表达式1;表达式2;表达式3){
循环体语句;
};
表达式1:初始表达式,表达式2;boolean表达式,表达式3:增量表达式

跳转结构:
1.return;会跳出整个方法
2.continue;跳过后面的语句直接进行下一次循环
3.break;跳出当前整个循环,执行循环后面的语句
2、 java中的方法
语句的集合就是方法
方法定义包括方法头和方法体。
方法头:
修饰符 返回值类型 方法名称(参数)
方法体:{ }之中的内容
3、 递归调用
递归就是方法自己调用自己
递归也是一种重复运算
可以递归的问题判断:可以划分为一个或多个子问题,而处理子问题的规则与处理原问题的规则是一样的。
递归需要满足两个条件才会使用
1- 有反复执行的过程(调用自身)
2- 有跳出反复执行的条件(递归出口)
递归算法设计时,需要首先考虑以下两个问题:
1- 确定递归公式。把规模大的、较难解决的问题变成规模较小、易解决的具有重复性同一问题,这是递归问题的难点。
2- 确定边界(终了)条件。在什么情况下需要停止递归?就是问题的边界条件及边界值的确定。
递归的效率要低于普通循环,所以设计程序的时候优先考虑使用循环结构,实在没有更好的办法时再使用递归
4、 Scanner类的用法
从键盘输入信息并保存需要如下几步:
第一步: 在程序开头输入
“import java.util.Scanner;”
表示导入键盘输入功能,系统已经写好了,只需要拿到程序中使用就可以了;
第二步: 在程序执行体中输入:
“Scanner input =new Scanner(System.in);”;
第三步:
表示输入功能初始化,
如果要接受一个整型的数据就要定义一个整型的变量来接收,
如:
“int num1=input.nextInt();”,
如果是其他类型的变量, 则“=input.next***();”中的***也要改成相应的类型, 如
“String num2=input.nextString();”、
“double num3=input.nextDouble);”等。