zoukankan      html  css  js  c++  java
  • Java基础知识点1

    运算符

    运算符的分类:

    算术运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 三目运算符

    自增自减运算符++ii先自加,再做其他运算;i++先运算再自加;

    --i先自减再做其他运算;i--先运算再自减;

    赋值运算符

    = : 这个等于号在Java中表示赋值的意思,真正数学意义上的相等是 == JavaScript当中还有 ===,表示类型和数值都相等

     

    扩展赋值运算符:

    +=   -=   *=   /=   %= (使用扩展赋值运算符系统会自动帮我们强制类型转换)

    *关系运算符的结果是boolean类型

    逻辑运算符     作用: 连接多个boolean类型的表达式

     boolean类型的表达式1 逻辑运算符 boolean类型的表达式2逻辑运算符 boolean类型的表达式3 逻辑运算符 boolean类型的表达式n

    &: 有一个为false结果为false如果都为true结果才为true

    |: 有一个为true结果为true如果两个都为false结果才为false

    异或(^ : 相同为false,不同为true  (相同为0,不同为1)

    非(! : 取反

    !的个数是奇数个的时候,结果相反

    !的个数是偶数个的时候,结果不变

    面试题: & && 的区别

    1& 表示按位与,无论什么情况都会同时计算运算符两边的表达式

    2&& 表示短路与, 如果前面的表达式为false,那么无论后面结果如何,都不会去计算后面表达式的值

    3&&开发中使用,&基本不用

    4&常用于位运算,位运算的效率比普通运算要高很多

     

    条件运算符(三目运算符(?:))

    格式: X ? Y : ZX表达式必须是boolean类型的表达式

    Xture,则输出Y,为false,输出Z

    表达式: 符合一定语法规则的运算符和操作数的式子。

     

    使用Scanner对象一些小技巧:

    1.使用键盘输入获取数据之前建议加入提示性语句

    2.next系列的方法是阻塞方法,会等待用户的输入,用户输入结束,程序继续执行

    注意事项:异常名称: 输入不匹配异常

      产生原因: 输入的类型和接收的类型不匹配

      解决办法: 类型匹配即可

     

    位运算符: 用来计算二进制的运算符

       例如System.out.println(3 & 4); // 0

    00000000 00000000 00000000 000000113

    &00000000 00000000 00000000 000001004

    -----------------------------------------

    00000000 00000000 00000000 000000000

     

    原码、反码、补码的运用

    在计算机中,负数可以用原码、反码、补码表示

    但计算机只有表达一种方式:补码

    计算机中只要是运算都是用补码来操作

     

    原码:最高位是符号位,0表示正数,1表示负数

    反码:正数的反码和原码相同,负数的反码是除了符号位不变,各位按位取反

    补码:正数的补码和原码相同,负数补码是在反码末位加1

    例如:10001001

      1  0001001 原码

      1  1110110 反码

      1  1110111 补码

     

    移位运算符

    <<  >>  >>>

    << 左移 : 左边最高位丢弃,右边补0

    >> 右移 :

    最高位是0,左边补0

    最高位是1,左边补1

    >>> 无符号右移: 无论最高位是0还是1,左边补0

    System.out.println(-24 >> 2);

    计算出24的二进制 11000

    原码 : 10000000 00000000 00000000 00011000

    反码 : 11111111 11111111 11111111 11100111

    补码 : 11111111 11111111 11111111 11101000

     

    1111111111 11111111 11111111 111010 补码

    1111111111 11111111 11111111 111001 反码

    1000000000 00000000 00000000 000110 原码

     

    结果 -6

     

    System.out.println(-24 >>> 2);

    计算出24的二进制

    原码 : 10000000 00000000 00000000 00011000

    反码 : 11111111 11111111 11111111 11100111

    补码 : 11111111 11111111 11111111 11101000

    补码: 0011111111 11111111 11111111 111010

    反码: 0011111111 11111111 11111111 111001

    原码: 0100000000 00000000 00000000 000110

     

    *面试题:

    1.请用计算机执行效率最快方式计算 2 乘以 16

    2 << 4

    2.使用最有效率的方式交换两个数的位置两个数对调

    方式一:

    int temp ;

    int a = 10;

    int b = 20;

    temp = a;

    a = b;

    b = temp;

    方式二

    利用异或的特点: 一个数值对另外一个数值进行异或两次,那么数值本身不做任何改变

    int  a,b;     a=a^b; b=a^b; a=a^b;(相同为0,不同为1)

     

     

    分支语句

    If语句

    格式:   if(条件表达式){

        语句体;

        }

    执行流程: 如果条件表达式为true,执行if语句体,否则不做任何操作

    注意事项:

     *   1.当语句体中只有一条语句的时候,大括号可以省略,但是建议不省略,但是如果有多条语句必须使用大括号包裹

     *   2.注意if(score >= 90)  ;  {} 这种会永远执行

     *   3.if语句可以使用三目运算符改进,建议使用三目

     *   4.条件表达式必须是boolean类型的值

     

    if-else语句

    格式:执行流程:如果条件表达式的结果为

     if(条件表达式){true执行语句体1;

      语句体1;

      } else {false执行语句体2;

      语句体2;

      }

    注意:

    1.比较基本类型是否相等使用 ==,比较引用类型是否相等暂时使用equals

    2.能用三目运算符尽量使用三目运算符

    能够使用三目改进的就一定能够使用if语句,但是能用if语句实现的不一定可以使用三目运算符

     

    多重if语句

    格式:

    if(条件表达式1){

     语句体1;

     } else if(条件表达式2){

     语句体2;

     } else if(条件表达式3){

     语句体3;

     } ...else if(条件表达式n){

     语句体n;

     } else {

      语句体n+1;

      }

    注意事项:

      1.这种语句一般作用于区间判断

      2.else if可以有多个,else最多只有一个

     

    嵌套if语句

    格式:

      if(条件表达式1){

    语句体1;

     if(条件表达式1){

    语句体2;       嵌套if--else

     } else {

     语句体3;

     if(条件表达式1)嵌套if

     {语句体3;}

    }

    } else {

     if(条件表达式1){嵌套多重if--else

     语句体1;

     } else if(条件表达式2){

     语句体2;

     } else if(条件表达式3){

    语句体3;

     } ...else if(条件表达式n){

     语句体n;

    } else {

    语句体n+1;

     }

    }

    注意!嵌套if语句一般可读性差

     

    swicth语句格式

    switch (表达式)  {

    case 1 :

    语句序列;

    break;

    case 2:

     语句序列;

    break ;

    default:

     break ;

    }

    switch语句的特点:

    1.表达式的类型可以是以下几种数据类型byte short int char

    注意: 表达式的类型本质还是整数类型 (byte short int char) 他们之间换算还是会转化成int类型来计算

    2.case子句的取值必须是常量表达式,case子句可以有多个,case子句的值不能重复

    3.default子句类似于if语句中的else,default子句可以出现在switch语句中的任何位置,建议放在最后面

    4.break子句表示退出switch语句体,如果case或者default子句中没有break子句,会出现break穿透现象如果都没有break子句,程序会从上至下依次执行

    ---------------------------------------------------------------------------------------------------------

    if语句和Switch语句的选择

    if选择结构

    基本if选择结构: 处理单一或组合条件的情况

    if-else选择结构:处理简单的条件分支情况,建议使用三目运算符改进

    多重if选择结构:处理复杂的条件分支情况

    嵌套if选择结构:用于较为复杂的流程控制

    switch选择结构

    多重分支并且条件判断是等值判断的情况

     

    if语句和switch语句的区别

    if语句

    表达式的结果是boolean类型

    常用于区间判断

    switch语句

    表达式类型不能是boolean类型,可以是byte short int char String 枚举

    常用于等值判断

    选择语句的选取:

    能用switch语句实现的就一定可以使用if实现,但是反之不一定

    如果是区间范围采用if,如果是等值判断使用switch

    循环语句

          for循环

        while循环

      do-while循环 特点是:先执行一次循环体,再判断条件

    循环语句总结

    forwhile循环是先判断再执行;do-while循环是先执行,再判断,并且一定会执行一次循环体。

    在循环结束后,还希望能使用作为循环条件判断使用的变量,使用While循环,否则使用for循环。for循环的变量 i 只作用于循环体。

    如果循环条件是一个区间范围的,使用for循环。如果循环次数不明确,使用while循环。

     

    for while do-while循环三者的区别和选取

     1.for while do-while比较

     a.for循环针对循环次数确定的情况,whiledo-while针对循环次数不确定的情况

     b.for循环里面的循环变量只在循环体内有效,while循环放在循环体外,作用于全局

     2.while do - while的比较

     while循环是先判断条件是否成立,再执行循环体

     do-while实现执行一次循环体,再来判断条件是否成立

    break语句

    break作用: 终止某个语句块的执行退出循环体或者switch语句体

    注意:break + 标签名的写法不建议书写,因为会大大降低程序的刻度性,慎用

     

    continue语句

    continue只能够作用在循环体内

    continue的作用

    1.表示退出本次循环,执行下一次循环

    2.退出本次循环,直接执行控制条件语句(for循环)

    3.一旦碰到continue关键字,无论continue下面有多少行代码都不会被执行

    循环

    单层循环

    表示退出本次循环,执行下一次循环

    多层循环

    continue + 标签名: 直接执行标签名所对应的循环的控制条件语句(for)

    例如:outLoop:for (int i = 0; i < 3; i++) {

    innerLoop:for (int j = 0; j < 7; j++) {

    if (j == 3) {

    continue outLoop;

    }

    System.out.print("*");

    }

    =============================================================================================================================================================================================================================================

    *方法:

    为什么需要学习方法?

    1.简化了代码

    2.提高了代码的扩展性和可维护性

    3.我们从一个方法的实现者转而成为了一个方法的调用者指挥者,这也是面向对象思想的心基础

     

    方法概念: 完成特定功能的代码片段

  • 相关阅读:
    《逆向工程核心原理》——通过调试方式hook Api
    《逆向工程核心原理》——代码注入
    《逆向工程核心原理》——DLL注入与卸载
    《逆向工程核心原理》Windows消息钩取
    windows回收站无法设置
    windbg安装pykd记录
    博客园添加萝莉小人
    ImportError: No module named site
    *CTF——Re复现
    ida远程调试Linux文件
  • 原文地址:https://www.cnblogs.com/wdss/p/10742327.html
Copyright © 2011-2022 走看看