[Java基础]数据类型、运算符、控制语句、方法

基本数据类型

1.数值型
* 整形(保存范围从小到大) byte,short,int,long 默认值0
* 浮点型 float,double 默认值0.0
* 布尔型 boolean 默认值false
* 字符型 char 默认值’\u0000′
2.引用数据类型,与内存有关
包括数组,类,接口 默认值null
3.默认值问题
基本数据类型的默认值只有作为数组、成员变量(实例变量),静态变量(类变量) 时未初始化才取默认值,其中char数据类型默认值为空格
其他情况如 局部变量需要声明后初始化
final关键字修饰的变量必须初始化

整型数据

数字常量默认存储为int类型,强转 (long)变量变量L

浮点型数据

1.小数默认存储为double类型,强转 (float)变量变量F
2.整形除法运算时会向0取整,若保留小数将任一运算数转换为double

字符型数据

1.int和char可以相互转换
2.常用ASCII码
大写字母 65-90
小写字母 97-122
大小写之间差32
字符’0′ 48
字符’9′ 57
3.char可以保存中文汉字字符
4.多个字符构成的转义字符也是字符

char a = '\101'; // 8进制数字101表示的ASCII码65对应字符'A'
char b = '\u0025'; // 4位16进制数字表示的UNICODE编码对应字符'%'

5.java字符为Unicode编码,每个编码占用2bit

字符串

1.+号实现字符串的连接
2.+运算中如果有字符串,后续所有类型均转为字符串类型,加括号提升运算优先级

int a = 10;
int b = 20;
System.out.println("结果为"+ (a+b));
System.out.println(1+"10"+3+"2"); // 11032
System.out.println(1+2+"10"+3+"2"); // 31032
System.out.println(1+"10"+3+1+"2"); // 110312

3.字符串中的转义字符
\0 空字符
\n 换行
\t tab
\” 双引号
\’ 单引号
\ 反斜杠

数据类型转换

1.数据溢出问题 最大值 + 1 = 最小值 最小值 – 1 = 最大值
2.自动转型均为向上转型,数字运算所有数统一转为范围大的数据类型运算,运算结果同为范围大的数据类型,操作数为:byte、short、int 、char,两个数都会被转换成int类型,并且结果也是int类型,所有的浮点数参与运算均转为double型
3.范围大的数据类型转范围小的数据类型必须强制转换,由于数据溢出问题不推荐
4.直接输出计算结果时,由于println()方法的重载无需转型

byte a = 5;
byte b = 3;
final byte c = 5;

// 无需转换
a += b;
// 必须转换
int d = (int) 10.0 / 5; // 大范围转小范围
byte e = (byte) (a + b); // 向上转型后大范围转小范围
final byte e = (byte)(b + c);// b向上转型后计算结果为大范围转小范围
// 方法重载
System.out.println(10.0 / 5);
int a = 5;
int b = 3;
// double c = a / b;  // 计算后向上转型,结果为1.0
double c = (double) a / b;
System.out.println(c); // 计算中转型,结果为1.6666666666666667
short a = 128;
byte b = (byte) a; // 高位截断,计算结果10000000
System.out.println(b); // -128,-0指定-128

运算符

优先级

括号优先级最高
&& 优先级高于 ||
++ 优先级高于 =
== 优先级高于 三目运算符
赋值、三目运算符、单目运算符 从右向左 运算

%取余

0%任何数都为0

++自增

变量++,使用时为变量值,使用后+1
++变量,使用时已+1,使用后仍为使用时值
a = b++ 先赋值再自增
a = a++ a值始终为初始值,原理为下述代码

    temp = a;
    a = a + 1;
    a = temp;

a = ++a a正常自增
i = ++(i++) 编译错误,++符号应修饰变量

    int i=5;
    int s= (i++)  // 5
         + (++i)  // 7
         + (i--)  // 7
         + (--i); // 5
    a---b
    a-- - b
    (a--) - b
 
    a - --b
    a - (--b)

关系运算

关系运算返回的都是 boolean 类型的值
进行关系运算时数据类型应相同,有些类型之间可以进行自动转型

三目(赋值)运算符

关系运算 ? 关系满足内容 : 关系不满足内容;
三目运算符嵌套 int max = x > y ? (x > z ? x : z) : (y > z ? y : z);

位运算

&
|
^ 异或
~ 取反
<< 左移
>> 右移
>>> 无符号右移
&| 位运算的时候相当于二进制的与或计算
&| 逻辑运算的时候要执行所有的判断条件
&&|| 逻辑运算的时候,与只要有false,或只要有true,不再执行后续条件

逻辑控制语句

if、switch分支语句

if分支语句仅进入第一个满足条件分支
switch可以判断int,char,String,枚举类型,不可使用逻辑判断浮点型
注意冒号位置 case 数据:
break语句,在第一个匹配的case开始执行,一直到遇到break或者执行完所有代码

for、while循环语句

for语句可不指定其中的条件,初始语句只要可执行即可
for执行顺序,初始化语句 -> ( 判断 -> 循环体 -> 增加操作 )
while在循环体中修改循环条件以达到出口判断
do{}while();提前执行一遍才判断
break退出当前循环结构,多层嵌套循环退出最内层循环
continue结束当前循环且不执行continue之下代码而继续下次循环
正序递减情况循环可使用 n-循环数据形式

for和while

明确循环次数推荐for
明确结束条件但未知次数推荐while

    static boolean foo(char c) {
        System.out.print(c);
        return true;
    }

    public static void main(String[] args) throws InterruptedException {
        int i = 0;
        for (foo('A'); foo('B') && (i < 2); foo('C')) {
            i++;
            foo('D');
        }
    }
ABDCBDCB

方法

return返回

返回值可以直接输出
void用return停止整个方法调用

重载

方法名相同,参数类型、个数或顺序不同,与返回值类型和访问控制权限无关,推荐各重载函数的返回值类型相同

递归

三要素:递推式,结束条件,调用时修改传递参数
递归的内存开销很大,处理不当会导致内存溢出
【例】递归实现1!+2!+…+90!

public class Factorial {
    public static void main(String[] args) {
        System.out.println(sum(90));
    }
    // long无法容纳,需要用double
    public static double sum(int n) {
        if (n == 1)
            return 1;
        return fac(n) + sum(n - 1);
    }

    public static double fac(int n) {
        if (n == 1)
            return 1;
        return n * fac(n - 1);
    }
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

©2018-2024 Howell版权所有 备案号:冀ICP备19000576号