Java基础复习

Wesley13
• 阅读 434

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 进制对照

二进制

八进制

十六进制

十进制

0000

0

0

0

0001

1

1

1

0010

2

2

2

0011

3

3

3

0100

4

4

4

0101

5

5

5

0110

6

6

6

0111

7

7

7

1000

10

8

8

1001

11

9

9

1010

12

A

10

1011

13

B

11

1100

14

C

12

1101

15

D

13

1110

16

E

14

1111

17

F

15

10000

20

F1

16

10001

21

F2

17

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 (左移两位 3_2_2)

>>

右移(保留符号位)

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 == 1

true

所有数据

!=

不等于

1 != 1

false

所有数据

<

小于

2<3

true

基本数据

>

大于

2>3

false

基本数据

<=

小等于

2<=3

true

基本数据

>=

大等于

2>3

false

基本数据

instanceof

2.5 逻辑运算符

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

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

a

b

a&b

a|b

!a

a&&b

a^b

a||b

true

fase

true

true

fase

true

fase

true

true

fase

fase

true

fase

fase

true

true

fase

true

fase

true

true

fase

true

true

fase

true

fase

fase

true

fase

fase

fase

示例:
    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 方法栈原理

Java基础复习

说明:

  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()
    }
 }
点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
2年前
Python 练手 &quot;小例子&quot; 闯关60题!
一、数字1求绝对值绝对值或复数的模In1:abs(6)Out1:62进制转化十进制转换为二进制:In2:bin(10)Out2:'0b1010'十进制转换为八进制:In3:oct(9)Out3:'0o11'十进制转换为十六进制:In4:hex(15)Out4:'0xf'3整数和ASCII互
半臻 半臻
2年前
Python基础1——变量、判断、循环、字符串、列表
1认识python1.1认识python计算机识别机器语言,机器语言由二进制0和1组成计算机要执行高级语言,转换方式1.编译:C语言、C、java。一次性编译成可执行文件2.解释:一行一行地解释python是解释型语言python解释器、pycharm编辑器举个例子:要给工地煮饭编译:把饭菜都做好,做成盒饭(.exe,.class
Wesley13 Wesley13
2年前
java 二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
一.二进制,位运算,移位运算1.二进制对于原码,反码,补码而言,需要注意以下几点:(1).Java中没有无符号数,换言之,Java中的数都是有符号的;(2).二进制的最高位是符号位,0表示正数,1表示负数;(3).正数的原码,反码,补码都一样;(4).负数的反码它的原码符号位不变,其他位取反;(5).
Wesley13 Wesley13
2年前
java复习(1)
这几天开学,很多知识点还很生疏,这两天先把java基础复习一下,有段时间没有写博客了,今天就先谈谈进制转换吧。  1.二进制数的原码,补码和反码    1):对于正数的原码,补码和反码均是相同的,这里不讨论了。    2)接下来我们讨论负数的二进制的原码、反码和补码    负数二进制的原码:先
Easter79 Easter79
2年前
TypeScript 基本类型(一)
1、boolean布尔值true/falseletisDone:booleanfalse;2、number数字:和JavaScript一样,TypeScript里的所有数字都是浮点数。另外支持二进制,八进制,十进制,十六进制。letdecLiteral:number6;lethex
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Stella981 Stella981
2年前
20180109Java位运算
一,Java位运算1.表示方法:  在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。 (1)正数的最高位为0,其余各位代表数值本身(二进制数)。 (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。 2.位运算符位运算表达式由
可莉 可莉
2年前
20180109Java位运算
一,Java位运算1.表示方法:  在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。 (1)正数的最高位为0,其余各位代表数值本身(二进制数)。 (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。 2.位运算符位运算表达式由
Wesley13 Wesley13
2年前
10进制转二进制字符串输出
importjava.util.Scanner;/Createdbylongforuson9:10PM5/9/2016.IDEATest.输入10进制输出二进制字符串先计算该数包含最大的2次方结果每减去一个该数该位二进制就记1
Wesley13 Wesley13
2年前
C语言基础之ASCII编码(3)
什么是字符集和字符编码?前面我们已经讲到,计算机是以二进制的形式来存储数据的,它只认识0和1两个数字,我们在屏幕上看到的文字,在存储之前都被转换成了二进制(0和1序列),在显示时也要根据二进制找到对应的字符。可想而知,特定的文字必然对应着固定的二进制,否则在转换时将发生混乱。那么,怎样将文字与二进制对应起来