JavaSE 基础总结

  1. 浮点数之间不能相互比较,他们存在误差!
  2. 低 (byte、short、char) -> (int) -> (long) -> (float) -> (double) 高,从低到高的类型转换是自动。从高到低的要强制转换,如:type a = (type)b;注意:不能对布尔型的数据进行转换,不能把对象类型的转换为不相关的类型;高容量到低容量转换使用强制转换,注意存在精度问题。
  3. 在定义数值型变量的时候可以使用下划线来提高阅读性。long d = 9_223_372_036_854_775_807L;
  4. 常量是一种特殊的变量,其数值被设置后不能改变“final 常量名=值;”如 final double PI = 3.14;
  5. 变量命名原则:1 所有变量、方法、类名:见名知意;2 类成员变量:首字母小写的驼峰原则(monthSalary);3 局部变量:首字母小写的驼峰原则;4 常量大写字母和下划线(MAX_VALUE);5 类名:首字母大写的驼峰原则;6 方法名:首字母小写的驼峰原则。
  6. 注意短路与:&&具有短路的效果。左边是 false,右边就不执。同理短路或:|| 具有短路的效果,左边为 true,右边不执行。
  7. 三元运算: x ? y : z   表示x为TRUE时被赋值为y,否则被赋值为z。
  8. 运算优先符使用括号()。
  9. 包机制:一般用公司的域名倒置作为包名如com.xxxx。导入包使用import xxxx,import必须在package的下方。
  10. JavaDoc:@author作者名;@version版本号;@since指明最早使用的jdk版本号;@param参数名;@return返回值情况;@throws异常抛出情况。
  11. 使用IO流一定要记得关闭,否则会占用资源。
  12. 顺序结构:从上到下一次执行。有若干个一次执行的处理步骤,它是任何一个算法都离不开的基本结构。
  13. 选择结构:if单选、if双选、if多选、嵌套if、swich选择。
  14. Swich里面记得加break;不然会出现case穿透!JDK7以后swich里面可以支持String判断了。
  15. do-whle会先执行一次do里面的代码,然后执行while判断。与while不同的是while是先判断条件,而do-while是先执行do然后判断条件。
  16. for循环使用idea可以输入  100.for  来快速写for语句。for语句是最有效、最灵活的循环结构。for循最先执行初始化结构,也可以是空语句;然后检测布尔表达式,如果为true就执行循环体,如果false就循环终止,循环体执行完后就更新循环控制变量。然后就是再检测布尔表达式‘’‘’重复以上。
  17. System.out.print()和System.out.println()的区别:前者输出后不会换行,后者输出后会自动换行
  18. break在循环控制流程中用于强行退出循环,不执行循环剩余语句;continue用于终止某一循环过程,但是会接着执行下一次的循环判断。
  19. 通过continue或break加上标签可以实现goto的效果,但是前期不推荐使用。
  20. 如果两个方法名字相同,参数列表不同(个数不同、类型不同、参数的排序不同),返回类型可以不同也可以相同,参数类型不同,这个叫方法重载(overload)
  21. 命令行传参:运行一个程序的时候再传参给他,靠命令行参数给main()。
  22. 可变参数:用...表示,同时一定要放在形参的最后一位。
  23. 递归:自己调用自己的方法。递归必须包含递归头(什么时候不调用自身)和递归体(什么时候需要调用自己)。单基数很大的情况递归的时间复杂度会很大。
  24. 申明数组推荐 int[] a;  不推荐使用Int a[]; 前者是java首选。定义数组:int[] nums = new int[10];
  25. 面向对象:三大特性:封装、继承、多态
  26. 静态方法只能用静态方法,非静态方法实例化后可以使用静态方法。实例化的时候只用new一个即可。
  27. 静态方法不能访问非静态方法,原因是在内存中是先有静态内容,后有非静态内容。
  28. 类中的执行顺序:父类静态变量---父类静态块---子类静态变量---子类静态块---父类构造块---父类构造函数---子类成员变量---子类构造块---子类构造函数。
  29. 引用传递是传递的对象
  30. 一个类什么都不写也会存在一个方法,可以通过构造器给实例化初始值。如一个类为:public class A(){public A(){}},内层就是构造器,构造器可以同时存在有参构造和无参构造;调用的程序会根据new的这个对象是否传递参数自行判断。构造器是没有返回值的。
  31. 构造器的作用:使用new关键字来调用构造器
  32. 堆:存放new的对象和数组,可以被所有的线程共享,不会存放别的对象引用;  栈:存放基本变脸类型(包含基本类型的具体数值),引用对象的变量(存放这个引用再堆里面的具体地址)  方法区:包含所有的class和static变量,可以被所有的线程贡献。
  33. 类是一个模板:抽象;对象是一个具体的实例。静态属性,动态方法。方法用于调用。对应的引用:8个基本类型。属性:字段Field 成员变量;默认初始化:数字:0;char:u8888;boolean:false;引用:null。对象的创建和使用:必须使用new关键字创建对象,构造器 Person a = new Person();对象的方法:a.name();
  34. 封装:“高内聚,低耦合”:高类聚:类的内部数据操作细节自己完成,不允许外部干涉。低耦合:仅暴露少量的方法给外部使用。
  35. 封装可以提高程序的安全性,隐藏代码实现的细节,统一了接口,增加系统 的课维护性。
  36. Java中继承是单继承,没有多继承。继承分为子类和父类。不能直接访问private(java中所有的类都会继承Object类)。
  37. 继承this和super的区别:本身调用者的对象;super代表父类对象的应用。
  38. super注意点:super调用父类的构造方法,必须在构造方法的第一个;必须只能出现子类的方法或者构造器中;super和this不能同时调用构造方法。
  39. 方法重写:子类重写父类:方法名必须相同,方法列表也必须相同,不然就变成重载了;修饰符的范围可以扩大不能缩小:public > protected > default > private(注意:抛出异常的范围可以缩小不能扩大)
  40. 静态方法和非静态方法区别很大,重写和静态方法无关。static方法、final常量、private方法都不能重写。
  41. 为什么要重写:子类不一定需要或者不一定满足。
  42. 多态:可以实现动态编译。多态是方法的多态;父类和子类:有联系,注意类型转换异常;多态存在的必要条件:继承父类,方法需要重写,父类引用指向子类对象!
  43. 子类转父类可能会丢失一些自己存在的方法。
  44. instanceof:x instanceof y:x与y是否是一个父子关系
  45. 抽象类:在class前面添加abstract来实现抽闲类,抽象类只有方法名字,没有实现方法。抽闲类必须要由子类来实现,不能new出来。抽象类中可以写普通方法,抽象方法只能在抽象类中。
  46. 抽象类只能单继承,接口可以多继承。
  47. 普通类只有具体实现 ,抽象类有具体实现和规范(抽象的方法),接口只有规范。自己无法写方法,可以实现约束和实现分离。
  48. 接口是规范,定义的是一组规则。接口所有的定义都是抽象的,接口中定义的属性都是常量(通常不会使用)。接口都有实现类。类通过添加implement的关键字来实现接口,可以实现多个接口。
  49. 接口和抽象类都不能实例化,因为没有方法。
  50. 内部类
  51. 异常:error类对象由JVM虚拟机生成并抛出,大多数错误与代码的编写者所执行的操作无关。该异常发生时JVM直接自动选择线程终止。
  52. RuntimeException运行时异常,由逻辑错误引起。
  53. error是灾难性错误,是程序无法控制和处理,一旦出现JVM会直接选择终止线程。exception是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。
  54. 异常中 try-catch-finally,在try中执行代码,在catch中捕获异常,finally在任何情况下都执行。当要捕获多个异常的时候,catch中的异常等级应该又小到大来写。
  55. 可以通过throw来主动抛出异常

posted @ 2022-03-08 19:39  E-CorE  阅读(34)  评论(0)    收藏  举报