Java基础复习

Java基础复习

1 进制

世界上又两种人,认识二进制的和不认识二进制的人

1.1 常见进制

283975 #按照权值进行分型
    2 * 10^5 #该位置数字乘以权值
+     8 *10^
+       3*10^3
+           9*10^2
+               7*10^1
+                   5*10^0
    # 权值 = 10^N 十进制数
  • 十进制:逢10进1,计算权值时以10为底的n次幂
  • 二进制:逢2进1,计算权值时以2为底的n次幂
  • 八进制:逢8进1,计算权值时以8为底的n次幂
  • 十六进制:逢16进1,计算权值时以16为底的n次幂(1..9、A...F)

0xffff 使用前缀ox表示该数字为十六进制数 07使用0前缀表示八进制 0b二进制

示例:00110110转换为十进制数
2^1 + 2^2 + 2^4 + 2^5 = 2+4+16+32 = 54

示例:0x2371转换为十进制数
1*16^0 + 7*16^1 + 3*16^2 + 2*16^3 = 1+112+768+8192 = 9073

1.2 进制对照

二进制八进制十六进制十进制
0000000
0001111
0010222
0011333
0100444
0101555
0110666
0111777
10001088
10011199
101012A10
101113B11
110014C12
110115D13
111016E14
111117F15
1000020F116
1000121F217

ps. 0b1111 1111 = 0x ff ps.计算机底层存储数据使用二进制

示例:将十六进制数 0x2B3C7F82转换为二进制
 2     B   3    C    7    F    8    2
0010 1011 0011 1100 0111 1111 1000 0010

示例:将二进制数 01111010111010101010110010101100转十六进制
0111 1010 1110 1010 1010 1100 1010 1100
 6    A    E    A    A    C    A    C
 结果为:0x6AEAACAC

1.3 符号位

​ 正数的补码是其原码,负数的补码为其反码加一

ps.反码即该编码各位上的数依次取反的结果

示例:
    0000 0111 byte型整数:十六进制 0x07 十进制 7
    
    1110 0110 byte型负数:十六进制 0x1A 十进制 26
    减一:1110 0110 - 1 = 1110 0101    取反:0001 1010 
byte型
最大值:1111 1111 : -1
最小值:1000 1000 : -128

short型
最大值:0111 1111 1111 1111 = 0x7FFFF = 32767
最小值:1000 0000 0000 0000 = 0x8000  = -32768

int型
最大值:0111 1111 1111... = 0x7FFFFFFF
最小值:1000 0000 0000... = 0x80000000

long型
最大值:0x7FFFFFFFFFFFFFFF
最小值:0x8000000000000000

char型
最大值:0xFFFF
最小值:0x0000

2 运算符

2.1 位运算符

位运算运算示例
<<左移(保留符号位)3<<2 = 12 (左移两位 322)
>>右移(保留符号位)3>>1=1 (0011 => 0001)
>>>无符号右移3>>>1
&与运算6 & 3 = 2
|或运算6 | 3 = 7
^异或运算6 ^ 3 = 5
~取反~ 6 = -7
示例:
public class BinaryTest{
  public static void main(String[] args){ 
    byte b = (byte)0xC2; // 0x000000C2
    System.out.println(b);
    System.out.println(b << 2); //-248
  }
}

ps.位运算是直接对二进制进行运算

public class BinaryTest{
  public static void main(String[] args){ 
    int n1 = 0xd7;
        int n2 = 0xc5;
    //  int n1 = 0x7a;
    //  int n2 = 0x9c;
    /*  d7:1101 0111
            c5:1100 0101
        &: 1100 0101   
        |: 1101 0111
        ^: 0001 0110
        ni:0011 1010
        n2:0011 1010
    */   
        // 0111 1010
        // 1001 1100
        // 0001 1000 = 24
    System.out.println(n1 & n2);
        // 0111 1010
        // 1001 1100
        // 1111 1110 = 254
        System.out.println(n1 | n2);
        // 0111 1010
        // 1000 0101 = -123
        System.out.println(~n1);
        // 1001 1100
        // 0110 0011 = -157
        System.out.println(~n2);
        // 0111 1010
        // 1001 1100
        // 1110 0110 = 230
        System.out.println(n1 ^ n2);
  }
}

2.2 自增注意事项

int n = 10;
n = n++;
system.out.println("n="+n);
//n的值为10 赋值语句从右至左 
// 右n的值为10待赋值给左
// 右n自增为11
// 将待赋值的10赋值给左侧
//结束

2.3 += 和 + 的区别

short s =3;
s = s+2; //发生了类型变化 右侧为int型
s+=2;       // 未发生类型变化

2.4 比较运算符

运算符运算范例结果适用范围
==相等于1 == 1true所有数据
!=不等于1 != 1false所有数据
<小于2<3true基本数据
>大于2>3false基本数据
<=小等于2<=3true基本数据
>=大等于2>3false基本数据
instanceof

2.5 逻辑运算符

  • &逻辑与
  • |逻辑或
  • !逻辑非
  • && 短路与
  • ||短路或
  • ^逻辑异或

ps. & 运算两边都会参与运算 不会短路 && 运算会短路

aba&ba|b!aa&&ba^ba||b
truefasetruetruefasetruefasetrue
truefasefasetruefasefasetruetrue
fasetruefasetruetruefasetruetrue
fasetruefasefasetruefasefasefase
示例:
    3<x<6  //错误写法
    x>3 & x<6
 
  int x = 1;
    int y = 1;
if(x++ == 2 & ++ y =2) System.out.println("判断为真!");
//此处 x最终为2 y最终为2

  int x = 1;
    int y = 1;
if(x++ == 2 && ++ y =2) System.out.println("判断为真!");
//此处 x最终为2 y最终为1 发生了运算短路

2.5 三目运算符

​ (条件表达式)?表达式1:表达式2

  • 表示式为ture取表达式1的值
  • 表达式为fals取表达式2的值
变量如下:
    int n = 10;
    int m = 20;
    int k = 40;
    int max;
示例:取两个数中较大的数
    max = (n>m)?n:m;
示例:取出三个数中的较大数
    max = (n>m)?(n>k)?n:k:(m>k)?m:k

2.6 运算符优先级

​ 从左到右,搞优先级优先进行运算

3 流程控制

  • 顺序结构:程序按顺序从上到下执行
  • 分支结构:根据判断条件选择分支进行执行
  • 循环结构:按照循环条件进行循环执行

3.1 分支结构

3.1.1 基本if语句

​ 当括号中的条件为真时执行后面的分支内容。

ps.java中分支结构括号中的内容必须时布尔型

if(a == 0) System.out.println("a等于0");

if(a != 0 ){
        System.out.println("a不等于0");
        System.out.println("请重新输入!");
}
3.1.2 if-else语句

​ 当括号中的条件为真时,执行if后的分支内容,括号条件为假时,执行else后的分支内容。

if(a == 0)  System.out.println("a等于0");
  else{
      System.out.println("a不等于0");
      System.out.println("请重新输入!");
  }
3.1.3 if-else嵌套

​ 判断规则与if-else相同,将if-else进行嵌套。

if(a == 0) System.out.println("a等于0");
    else if(a == 1)  System.out.println("a等于0");
                else { 
          if (a==3) System.out.println("a等于3");
          System.out.println("a不等于1或者0");
        }           
3.1.4 switch分支结构
选择变量

​ 变量的数据类型:byte,int,char,short,String,枚举型

基本结构
switch(变量){
    case 常量1:
      ...
      break;
    case 常量2:
      ...
      break;
        case 常量3:
      ...
      break;
    case 常量4:
      ...
      break; 
    case 常量5:
      ...
      break; 
    default:
        ...
      break;
}

3.2 循环结构

​ 在某些条件满足的情况下,反复执行特定代码的功能,包含一下四个部分。

  • 初始化部分(init_statement)
  • 循环条件部分(test_exp)
  • 循环体部分(body_statement)
  • 迭代部分(alter_statement)

ps.while循环、do/while循环、for循环

while循环

语法格式

while(布尔型测试表达式){
  ...
  循环条件修改语句;
}
示例:
  public void testWhile(){  
    int count;
    //初始化语句
    int i = 1;
    //循环因子
    while(i<10){  //循环条件
        count += i;
        //循环体语句
        i++;
        //迭代语句
    }
    System.out.println("count:"+count);
  }
do-while循环

语法格式

do{
  ...
  循环条件修改语句;
}while(布尔型测试表达式)
示例:
public void testDoWhile{
    int result = 0,i=1;
    //初始化语句及循环因子    
    do{
    result+=i
    //循环体语句
    i++
    //迭代语句
  }while(i<=5)//循环条件
    System.out.println("result:"+result);
}
for循环

语法格式

for(初始化语句;布尔测试表达式;循环条件修改语句){        
  ...       
}
    int count;
    for(int i=1; i<100; i++) count+=i;
    System.out.println("count:"+count);
无限循环

​ 当循环次数不确定时,优选while循环。

示例:
    boolean flag = true;
    while(flag){ ... }
    do{...}while(flag)//至少循环一次
示例:
    boolean flag = true;
    for(;;;){...}
    for(;flag;){...}

3.3 特殊流程控制

3.3.1 break 语句

​ break语句用于终止某个语句块的执行。

示例:
    for(int i=0; i<10; i++)
        if( i==3 ) break;

  label:for(int i=0; i<10; i++){
          for(int i=0; i<10; i++)
            if( i==3 ) break lable;
            }
3.3.2 countinue语句

​ 只能用于循环语句,跳过某次循环。

3.3.3 return语句

​ 结束方法,方法执行的返回。

4 方法

某种功能的封装 方法 = 方法签名 + 方法体

​ 方法是类或对象行为特征的抽象,也成为函数。Java中方法不能独立存在,必须在类中定义。

语法格式

权限修饰符  返回值类型  方法名(参数类型 参数1,参数类型 形参2,...){
  ...
  return 返回值;
}
示例:
    public String printHello(int name){//方法签名
            Stirng hello = "Hello! "+ name;
            return hello;
    }
  public static void main(String args[]){
        //方法调用
        String welcome = printHello();
        //int a = printHello(); ×
  }
  • 形式参数:在方法被调用时用于接收外部传入的数据的变量

  • 参数类型:形式参数的数据类型

  • 返回值:方法在执行完毕后返还给调用它的程序的数据

  • 返回值类型:方法要返回的结构的数据类型

  • 实际参数:调用方法时实际穿个函数形式参数的数据

    ps. 返回值为void的方法表示无返回值

4.1 重载

重载让方法调用变得简单

​ 在同一个类中,方法名相同,参数不同就形成重载。参数不同体现在类型不同、顺序不同、参数个数不同。

示例:
    public class OverLoadTest{

    public static int add(int a, int b){
      return a+b;
    }

    public static int add(int a, byte b){
      return a+b;
    }

    public static int add(int a, double b){
      return (int)a+b;
    }
  }

4.2 方法的参数传递

​ java中只有值传递,形参是实参的一个复制品。

4.3 方法调用的原理

4.3.1 栈帧

​ 方法栈中的组成单元,包括了方法及其局部变量。

4.3.2 方法栈

​ 一个先进后出的结构,用于存放方法,其单元由栈帧组成。

4.3.3 方法栈原理

1481652-20190418140711770-1717518798.png

说明:

  1. main函数中调用add方法
  2. main函数调用参数传递后压栈
  3. 开始add方法的方法体执行
  4. add方法中又调用test方法
  5. add方法入栈
  6. 进行test方法执行
  7. test执行完成出栈
  8. add执行完成出栈 (将返回值拷贝到临时空间)
  9. main方法执行 (从临时取获得返回值继续执行)

4.4 跨类调用方法

​ 通过类名大写加上.的方式可以访问该类的静态方法。

  public class Method{
    public static String getMethod(){
      return "Method";
    }
  }

  public class Test{
    public static void main(String[] args){
      String method = Method.getMethod;
      Sysem.out.println()
    }
 }

转载于:https://www.cnblogs.com/Wu-Zang/p/10729259.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值