视频出处
讲的很基础 同时也十分适合无基础的人学习这个视频
随看随记
- 负十进制数转补码 +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 当方法遇到异常无法处理时 向上级抛出异常
- 异常的书写逻辑如下图所示
- try{监控区域} catch(该异常类型的对象){ 捕获异常} 异常对象可以用所有异常的超类 throwable
- 创建自定义异常类的步骤
- 在方法中通过throw关键字抛出异常对象。 该类继承exception类后就是一个异常类了。
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
- 在出现异常方法的调用者中捕获并处理异常。
- 异常注意点
- 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
- 在多重catch块后面,可以加一个catch (Exception) 来处理可能会被遗漏的异常
- 对于不确定的代码,也可以加上try-catch,处理潜在的异常
- 尽量去处理异常,切忌只是简单地调用printStackTrace()去打印输出
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量添加finally语句块去释放占用的资源