Java 基础(复习版)

​ 为什么开始复习Java基础呢?有一天在验证一个字符串的问题时,发现数组的定义已经混乱了!!!

定下目标@me。


Java 基础(复习版)


  • 每天面对代码4小时(●’◡’●)
  • 目标(浅浅一想) :阿里,美团,滴滴,网易
img
基本语法
  • 首先,回想一下一些基本的概念:

  • :是一个模板,把一类事物的共性(行为和状态)描述出来。(人类,动物类)

  • 对象:对象是类的一个实例(类的具体化,比如老师,学生;小狗,小猫),有状态和行为(状态也可以说属性,比如颜色,名字,爱好;行为就可以理解成功能,动作)。

  • 方法:方法就是行为(或者动作),一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的(这样说的比较模糊,举个例子,人类实例化出一个学生对象,学生的学习)。

  • 实例变量:每个对象的状态怎么表示呢?比如学生的名字是不可能一样的,所以实例变量就可以来描述不同对象的不同状态。

  • Java程序的入口main方法

a

public是访问修饰符,表示该class是公开的(访问权限)。不写public,也能正确编译,但是这个类将无法从命令行执行。在class内部,可以定义若干方法,方法就是一串可执行语句,在被调用时,内部的代码会被依次执行。

static是表示静态方法,Java入口程序规定的方法必须是静态方法,方法名也必须是main,参数也必须是String数组。

void定义方法的返回值类型 ,void为没有任何返回值。

编写 Java 程序时,应注意以下几点

  • 大小写敏感:Java 是大小写敏感的,这就意味着标识符

    Hello 与 hello 是不同的。

  • 类名:对于所有的类来说,类名的首字母应该大写,后接字母,数字和下划线的组合。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 classs MyFirstJavaClass

  • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写,例如void getName(){}

  • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。

  • 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。

变量和数据类型

  • 在Java中,变量分为两种:基本类型的变量和引用类型的变量。变量必须先定义后使用,参与运算时,需要赋初始值。
  • Java 基本数据类型初始值(默认值)
类型默认值
charfalse
boolean‘/u0000’(null)
byte(byte)0
short(short)0
int0
long0L
float0.0f
double0.0d
  • 变量的作用范围:在定义变量的语句块有个作用域,一般控制语句都以{}为自身的范围。

运算

  • 整数运算结果永远是整数(注:整数的除法对于除数为零运行报错但是编译不会报错)。求运算使用%。

  • 如果结果超过了接收数值的类型的范围就会产生溢出不会报错,但是结果会出错,是因为二进制的最高位代表负,这时只要把接收的类型由小的改为大的就避免了溢出。

  • 还有一些自增、位运算和移位运算。

  • 运算符的优先级:

    • ()
    • ! ~ ++ --
    • * / %
    • + -
    • << >> >>>
    • &
    • |
    • += -= *= /=
  • 类型转换:shortint计算,结果总是int,原因是short首先自动被转型为int。也可以将结果强制转型,即将大范围的整数转型为小范围的整数。强制转型使用(类型)。(注意:如果强转超出范围将会得到错误的结果)

  • 类型提升:参与运算的两个数的最终类型会变成范围最大的那个数的类型。

  • 浮点数的运算不会出现整数那样的运行报错,会返回特殊值

    • NaN表示Not a Number
    • Infinity表示无穷大
    • -Infinity表示负无穷大

    (浮点数强转成整数如果超出了整数的最大值。

  • 关系运算符的优先级

    • !
    • >>=<<=
    • ==!=
    • &&
    • ||
  • 三目运算符和短路运算

  • 总结Java运算符的优先级:

    • 单算移关与,异或逻条赋

      括号级别最高,逗号级别最低,单目 > 算术 > 位移 > 关系 > 逻辑 > 三目 > 赋值。

    • 运算符优先级一图掌握

      • 优先级运算符结合性
        1( ) [ ]  .从左到右
        2!  ~  ++  –从右到左
        3*  /  %从左到右
        4+  -从左到右
        5<<  >>  >>>从左到右
        6<  <=  >  >=  instanceof从左到右
        7==  !=从左到右
        8&从左到右
        9^从左到右
        10|从左到右
        11&&从左到右
        12||从左到右
        13? :从左到右
        14=  +=  -=  *=  /=  %=  &=  |= ^=  ~=  <<=  >>=  >>>=从右到左
        15从右到左
  • 字符串类型: 也就是String型(默认值是null),是引用数据类型。

    • 转义字符\(反斜杠)。

      • \" 表示字符"
      • \' 表示字符'
      • \\ 表示字符\
      • \n 表示换行符
      • \r 表示回车符
      • \t 表示Tab
      • \u#### 表示一个Unicode编码的字符
    • 字符串有不可变的特点,并不是无法多次赋值,而是由于字符串是引用数据类型所以赋值过的字符串会一直保留,只是变量的指向变了。

    • 区分null和空字符串,空字符串也是一个有效的字符串。

数组

  • 先来定义格式:int [] a=new int [2];``a[0]=12;int[] b = new int[] {0,1};OR int [] c={0,1}
    • 数组类型+[],new int[2]表示创建一个可以容纳两个元素的数组。(注意:new int [2]代表2个元素即`a[0],a[1])
    • 数组初始化所有元素的默认值和数组类型的默认值一致。
    • 要获取数组的大小a.length,
    • 数组是引用类型如果访问时索引越界会报错。
    • 一旦创建数组大小就固定了(指元素数)。但是如果对上面的a重新赋值int [] a={1,2,3,4,5},数组不就变了吗?其实由于数组是引用数据类型所以只是指向了新的元素,只是通过a查询不到原来的数组了。

流程控制

  • 首先是Java提供的输出语句,print(),println(),printf(),前两个都已经很熟悉了,重点说一下格式化输出,通过使用占位符%?来格式化输出参数(连续的两个%%表示%自身):

    • 占位符说明
      %d格式化输出整数
      %x格式化输出十六进制数
      %f格式化输出浮点数
      %e格式化输出科学计数法表示的浮点数
      %s格式化字符串
  • 输入比输出复杂得多,创建Scanner对象并传入System.in。使用scanner.nextLine()来接收用户输入的字符串scanner.nextInt接收用户输入的整数,scanner会自动识别并转换数据类型。

  • if语句以及if else的嵌套。(if else if...的判断执行顺序是从上到下的)

  • 判断值类型相等可以用==,而判断引用类型数据相等用它则表示引用是否相等,所以判断引用类型数据的内容是否相等应该使用equals()方法,在s2.equals(s1)如果s2为null则会报NullPointerException,如果是这里的s1为null则不会。

  • switch多重选择:

    • switch语句会根据表达式计算的结果匹配对应的case执行其语句,直到遇到`break;;为止。
    • switch语句具有穿透性,通过丢掉break;来实现。
    • 默认执行语句要记得写。
  • 区分while(){},do{} while()for{}循环的不同点,熟练使用。

    • while循环先判断循环条件是否满足,再执行循环语句;

      while循环可能一次都不执行;

    • do while循环先执行循环,再判断条件;

      do while循环会至少执行一次。

    • for通过计数器可以实现复杂循环;

      for each可以直接遍历数组的每个元素;

      计数器变量定义在for循环内部,循环体内部不修改计数器;

    • breakcontinue:

      • break语句可以跳出当前整个循环;

        break语句总是跳出最近的一层循环;

        continue语句可以提前结束本次循环;

数组操作

  • 遍历和排序:

    • 遍历数组可以使用for循环,for循环可以访问数组索引,for each循环直接迭代每个数组元素,但无法获取索引;

    • 使用Arrays.toString()可以快速获取数组内容。

    • 冒泡排序的特点是,每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以“刨除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。

    • Java内置了排序api,Arrays.sort()

  • 多维数组:

    • 二维数组就是数组的数组,三维数组就是二维数组的数组;
    • 多维数组的每个数组元素长度都不要求相同;
    • 打印多维数组可以使用Arrays.deepToString()
    • 最常见的多维数组是二维数组,访问二维数组的一个元素使用array[row][col]
  • 命令行参数:

    • Java程序的入口是main方法,而main方法可以接受一个命令行参数,它是一个String[]数组。可以接收用户输入并传给main方法,可以利用接收到的命令行参数,根据不同的参数执行不同的代码。例如,实现一个-version参数,打印程序版本号。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上小云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值