https://www.cnblogs.com/swiftma/p/5631311.html

    1. 任何一个语言中的小数(浮点数)运算,尤其是乘除,都会出现精度问题,这是因为数据的二进制存储方式导致的。
    2. 编码问题
      1. ascii 128个字符,1 bytes,用 7 bits 表示字符值,最高位置为0
      2. gb2312 是中文标准,包括七千个常见字符,用2 Byte = 16 bits 表示。与ascii 区分开来,两个字节最高位都是1
      3. gbk 向下兼容 gb2312,也用 2 Bytes 表示;gb18030 向下兼容 gbk 包含更多字符
      4. unicode 为世界上所有字符编码
        1. utf-32 由 4 bytes 表示
        2. utf-16 字符值大的用 4 bytes,字符值小的用2 bytes
        3. utf-8, 字符值小于128的与 ascii 相同,最高位为0;字符值大于128的高维为1(节省空间)
      5. 乱码:编码的方式与解析的方式不同
    3. switch-case 中的case不用排序,编译器会自动排序,然后用跳转映射表中高效进行二分查找;case较多的情况下,switch-case 比 if-else if-else 效率更高
    4. java 也有类似于 pythonfor i in alist: 的遍历元素的操作:java int[] arr = {1,2,3,4}; for (int element : arr) { System.out.println(element) }

    5. 数组和对象有两块空间,1. 存储数据(存放在堆中),2. 存储地址(存放在栈上)。在方法中,修改数组元素会修改调用者中地址指向的数据,原数组被修改;而基本类型传参后,在内部修改不会影响其本身的值

    6. 方法/函数 return 的变量只能有一个,需要返回多个值可以用数组、类的对象
    7. java 修饰符
      1. public, 可被外部访问
      2. private, 仅可在内部访问
      3. static, 修饰类变量、类方法,仅可被类函数调用
      4. final, 修饰类变量、实例变量,仅可被赋值一次
      5. synchronized,线程锁,多次调用一个方法之后需要等待之前的进行完
      6. abstract
    8. StackOverFlow 栈溢出
      1. 调用函数的时候,参数、函数内变量都会被压入栈,调用结束之后会被释放
      2. 迭代函数中,每次迭代都会为新的参数、函数内定义变量分配栈空间,栈的空间有限,压入内容太多会出现栈溢出
      3. 尝试用循环代替迭代
    9. 用修饰符 private 避免方法、变量在类外被误调或修改(private 数据 可通过类方法、实例方法进行修改)
    10. 方法不能嵌套方法,但是类可以嵌套类
    11. 类方法 v.s. 实例方法 (markdown中表格的前一行必须空出,否则不会编译成表格)| 特点 | 类方法 | 实例方法 | | —- | —- | —- | | 标志 | 方法名前有static | 无static修饰符 | | 内存分配 | 类被加载到内存中时分配内存 | 对象创建后分配内存 | | 访问内容 | 只能访问static类型的类变量、类方法 | 可对类变量、实例变量进行操作;可调用类方法、实例方法 |
    1. Java 中用static 标志/声明类属性;
    2. python中只要写在类下、方法外的属性都是类属性,用self.attribute = ?定义的都是实例属性,创建了实例之后才可用;python中未创建实例时,不可访问实例属性,但可访问类属性
    3. java 中用this.attribute = ?来修

      1. 创建一个类实例java Point p; // 声明类实例,仅为类的存储地址和类变量分配内存 p = Point(); // 实例化一个类,为实例变量分配空间
    4. python中构造方法是def __init__(self, args),而java中使用 public ClassName(args) {}方法来实现,构造方法的名字类名相同,不要有返回值

    5. python中用 self 代表当前类,而java用 this
    6. 调用实例方法、为实例变量赋值的操作,与python相似
      1. 生命周期
    7. 调用方法时,为变量内存空间,方法返回时回收
    8. 类(类静态变量、类方法等)加载入内存之后不会被释放
    9. java对象和数组地址保存在占中,内容分配在堆里(栈自动管理——入栈分配出栈释放;堆用垃圾回收机制,没有活跃变量指向对象时自动释放)
      1. 自定义数据类型,将该类型数据所有的操作、属性封装起来,隐藏实现细节,使得能够在更高的层次上考虑操作数据(看类和对象,而非着眼于基本数据结构和函数)——分解概念,厘清概念之间的关系
      2. 继承
    10. 子类可以继承父类的非private的方法、重写父类的方法,也可以增加特有的方法
    11. java 中用extends关键字来表示继承关系;用关键词super来指代父类,用this指代自己
    12. java 中的在子类的构造方法中调用父类的构造方法时,需要写在子类的构造方法第一行。
      1. 多态
    13. 用父类类型名声明,而实际类型却是子类;
    14. 一种类型的引用变量可对应多种实际类型对象;
    15. assign instances of child class to Reference variable of base class;用子类实例为父类引用变量赋值