javaSE复习(1) (面向过程、面向对象、异常)

视频出处
讲的很基础 同时也十分适合无基础的人学习这个视频

随看随记

  • 负十进制数转补码 +1取反(符号位置不取反) 补码转十进制 -1取反
  • jdk7后支持switch 比较字符串
  • for循环在循环的初始化表达式中声明的变量 ,会在循环结束时释放。
  • 堆和栈的主要区别
  • java内存
  • idea快捷键
    • alt+insert 快速生成构造函数等
    • ctrl+h 继承树
    • ctrl+alt+t 生成异常等快捷键
  • 字符串等常量池 在方法区中 string 是一个 final修饰的char 数组

常用快捷键

windows快捷键

  • alt+f4 关闭窗口
  • ctrl+a 全选
  • ctrl+shift+esc 任务管理器

DOS快捷键

  • 盘符切换 d:
  • 查看当前目录下的所有文件 dir
  • 切换目录 /d 可以直接进入到目标地点
  • 清理命令行 cls
  • 退出终端 exit
  • 查看电脑ip ipconfig linux里是ifconfig
  • 新建文件夹 md 删除目录 rd
  • 新建文件 cd>a.txt 删除文件 del

java基础

  • 文件名和类名必须保持一样
  • psvm 或 main 可以直接打出主函数
  • sout 可以直接打出输出函数

Java里的关键字

  • 在这里插入图片描述

基本数据类型

  • bit 位
  • byte 字节-128——127 一个字节是8个二进制位
  • short 两个字节
  • int 四个字节
  • long (int) 八个字节 指定该类型一般在数字后加一个大写的L
  • float 四个字节 指定为该类型在数字后面要加一个F float 的有效位数只有6到7位
  • double 八个字节
  • char 两个字节
  • boolean 只占一个
  • string 不是关键字 不是基本数据类型 是一个引用类型 是一个类
  • 一个字母,汉字,数字,符号占一个字符 两个字节

数据类型拓展

  • 二进制前面加0b 八进制前加0 十六进制前加0x
  • 浮点数不要直接用等于比较 后面会有BigDecimal类 浮点数扩展类进行使用
  • 强制转换是按照Unicode表进行对照转换 从u0000到uffff 使用十六进制表示的
  • string 类比较时如果比较两个 一个是字符串的地址 另一个是字符串的内容 当string new一个新的空间时 地址不同 ==比较输出false 当没有new时会比较字符串的内容 其比较的时字符池中的字符串内容 如果内容一样 则输出false
  • float溢出
  • float精度丢失问题 对阶的时候,会让较小数的小数点右移,从而使小数点对齐,因为float的有效精度为6-7十进制位 当位数差距过大时 较小数会被加到23二进制位后面 从而被忽略。

类型转换

在定义一个long类型的数据时 尽量写大写的L 因为小写的l长的很像1 不容易分辨

  • 类型的优先级
    • byte->char->short->int->long->float->double
    • 不能对char变量类型进项强制转换
    • 类型转换注意精度问题
  • 数字之间可以使用下划线进行位数分割 10_0000_0000 可以方便数字的阶数的分辨
  • 当数字之间进行计算的时候,是先进行计算,计算结果的数据类型是原来的数据类型,如图。
  • 浮点数向整形转换 是浮点数会计算到整数部分,并对整数部分进行输出
    在这里插入图片描述

变量

  • 类变量 在类中有statics修饰的变量
  • 实例变量 在一个大类中定义的变量 可没有初始值
    • 整数的初始值的0 浮点数是0.0 char是u0000(什么都没有) 布尔是false 引用类型包括string都是null
  • 局部变量 {中的变量} 必须有初始值的变量名

常量

  • 用final修饰的变量是常量

命名规则

  • 所有的类成员变量、局部变量、方法名遵循小写字母开头的驼峰原则
  • 类名遵循大写字母开头的驼峰原则
  • 常量名遵循全部大写的原则
  • 包名全小写

运算符

  • short和char运算符运算以后 其结果会被自动转换成int类型
  • int a=10; a=a++结果是 a=10 简单解释 专业解释
  • (a<b)||(c<d) 当a<b为真时 后面不会计算 (&&同理)(短路定理)
  • & | ^ ~ 按位与 或 异或 取反
  • 字符串连接符 运算顺序问题 第一个输出1020 第二个输出30
    在这里插入图片描述
  • 运算符优先级 一般通过加() 来避免优先级的混淆

java流程控制

Scanner

定义一个扫描器 Scanner scanner = new Scanner(System.in);
io流使用完一定要关掉 输入的内容一定要及时取走,否则不会进行下一步询问

  • 通过Scanner类的hasNext() 和hasNextLine() 判断是否有输入的数据
  • 通过Scanner类的Next() 和NextLine() 获取输入的数据
  • next 和 nextLine 的区别
    • 有效数据前的空格next 会将其忽略掉 nextLine会显示出来
    • next 把空格识别为停止符 nextLine把enter识别为停止
  • 当输入小数时,输出不会等待第二个输入 没找到原因 我认为是可能是在缓存区有了内容之后会把flag置为true 只有在该内容被取走之后 才会置为false 只有在询问第二步是不是小数时 把内容取走后 才会进行下一个询问
  • 在这里插入图片描述

增强for循环

java: for (int x : array) 遍历数组 没有下标 更适用于打印输出 for一次只能 剖开一层 对于多维数组需要一层一层输出
javascript: for(x in array) 遍历数组
javascript : arroy.forEach(Function) 调用数组中所有的内容 执行方法并返回在这里插入图片描述

可变参数(不定向参数)

书写形式 (int… a )

  • 本质上是一个数组
  • 只能是参数列表中最后一个参数,成为可变参数

Arrays 类

  • Arrays.tostring(arrays) 把数组转化成字符串
  • Arrays.sort(arrays) 数组升序排序
  • Arrays.fill(arrays, a) 用a填充数组
  • Arrays.equals(arrays1,arrays2) 比较数组中的元素中是否相等
  • Arrays.binarySearcht(arrays,a) 对排序好的数组进行二分法查找

稀疏数组

练习路径 E:\javaLearn\java_practice\javalearm\src\Dome01\Demo02.java
在这里插入图片描述

  • 稀疏数组也是一个二维数组
  • 记录数组有几行激烈,有多少的不同值
  • 把具有不同值的元素和行列及值记录在一个小规模数组中,从而减小数组的规模
  • 稀疏数组只有三列int[] [] xiShuArray= new int [ sum+1 ] [ 3 ] sum表示原数组中有多少个不同的数字 sum+1是因为第一排要放置原矩阵的行数和列数。

面向对象

jvm虚拟机

  • 先在方法区放置类、方法、static和常量池
  • 然后 在new对象时 先在堆中开辟一个内存 进行隐式初始化 方法不进行初始化
  • 然后 栈中创建对象变量 指向堆中的变量 进行显式初始化
  • 后面对对象中的方法进行 调用时 是堆中的对象,引用方法区中的方法

封装、继承、多态

  • 封装(private): 属性私有 get/set
  • 继承(extends): 类只有单继承,接口可以有多继承
    • 子类继承父类的权限问题 与在不在同一个包中有关
    • 父类如果有参数 子类初始化父类构造函数是必须给参数 格式:super(value)
    • 子类可以被强制转化成父类 父类不能被强制转化成子类 (父类的属性 方法等可能会比子类少)
    • 方法重写
  • 多态 多态是方法的多态 属性没有多态
    • 一个对象的实际类型是确定的 但是指向的引用类型是不确定的 父类的引用可以指向子类的对象
    • 存在条件:继承关系,方法需要重写,父类引用指向子类对象
    • 无法多态的情况
      • static 其方法属于类
      • final 常变量方法
      • private 私有方法无法被继承
    • 引用类型的强制转换
      • 子类转父类 可能会丢失方法 可以自动转换 Father father = new Son();
      • 父类转子类 必须强制转换 ((Son)father).function
  • instanceof 用于检验能否两个类之间能否进行强制转换

static

  • static 和 类一起在方法区加载 属于类的方法和属性
  • 静态代码块 在类加载后就执行 只执行一次
  • 代码块执行顺序 静态代码块 匿名代码块 构造函数

抽象abstract 和 接口 interface

  • 抽象类的所有抽象方法必须要由继承了他的子类进行实现
  • 抽象类不能被new出来
  • 接口中的方法都是public 和 abstract的 属性默认是常量 public static final 进行修饰
  • 接口必须要有实现类 implements 实现 一个类实现 多个接口
  • 抽象类有构造方法 而接口没有

内部类

  • 一个java文件中可以有多个class但是只能有一个public class
  • 直接在创建引用接口对象时 new一个匿名内部类 并在匿名内部类中重写方法
  • 在这里插入图片描述

异常机制 exception

  • 异常的优先级在这里插入图片描述
  • 异常的关键词
    • try{监控区域} catch(该异常类型的对象){ 捕获异常} 异常对象可以用所有异常的超类 throwable
      • catch可以有多个 从上到下层层递进 当符合该异常类型时 之间跳转到 finally
    • finally 无论是否异常 其都会执行 主要负责一些善后工作 关闭io 资源等
    • throw 在方法体中抛出异常
    • throws 当方法遇到异常无法处理时 向上级抛出异常
    • 异常的书写逻辑如下图所示在这里插入图片描述
  • 创建自定义异常类的步骤
  1. 在方法中通过throw关键字抛出异常对象。 该类继承exception类后就是一个异常类了。
  2. 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
  3. 在出现异常方法的调用者中捕获并处理异常。
  • 异常注意点
  1. 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
  2. 在多重catch块后面,可以加一个catch (Exception) 来处理可能会被遗漏的异常
  3. 对于不确定的代码,也可以加上try-catch,处理潜在的异常
  4. 尽量去处理异常,切忌只是简单地调用printStackTrace()去打印输出
  5. 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  6. 尽量添加finally语句块去释放占用的资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值