【摘要一】Java基础知识

  • Java的面向对象,就是将重点放在教椐 ( 即对象)和对象的接口上。
  • Java 是一种强类型语言,因此定义变量之前,必须先声明其类型(Int,Long,Double等)
  • Java中的八种数据类型(4种整形(byte,short,int,long),2种浮点型(float和double),1 种表示 Unicode 编码的字符类型 char,和1 种表示真值的 boolean 类型)
  • 强烈建议不要在程序中使用 char 类型,除非确实需要处理 UTF-16 代码单元。最好将字符串作为抽象数据类型处理
  • Java 没有任何无符号(unsigned) 形式的 int、 long、short 或 byte 类型,但MySQL中有
  • 任何一个 Java 对象都可以转换成字符串,所以与字符串用“+”拼接,会直接转为字符串。
    在这里插入图片描述
  • Java程序的入口是main方法,入参是String arg[],表明 main方法将接收一个字符串数组, 也就是命令行参数 ------> String arg[]是什么
    在这里插入图片描述
  • Java 实际上没有多维数组,只有一维数组。多维数组被解释为“ 数组的数组。”
  • 类之间的关系 依赖(“ uses-a”)(一个类需要操作另一个类,有点类似 IOC 依赖注入), 聚合(“ has-a”)(包含关系,有可能是作为入参被构造出来), 继承(“ is-a”)(显而易见,不多说)。
    (订单类依赖账户类,完成扣款操作,同时订单类必定包含一个或多个商品类,而所有的手机,电脑,电视等商品都继承自家电类。)这么说,有点深奥,如果有UML类图,就会直观。
  • JVM是用C语言写的,还有非常少量的内嵌汇编。(我第一次看到也极为震惊,后来反而释然,要不然那么多的native方法怎么实现呢,难道就写个native就可以了吗,肯定需要JVM实现的啊。)
    在这里插入图片描述
  • final 修饰符大都应用于基本 (primitive ) 类型属性,或不可变(immutable) 类的属性(如果类
    中的方法都不会改变其对象, 该类就是不可变类,例如String类)。
  • 静态属性(static int countryId = 1),该属性被所有new的实例对象所共享,(100个对象共享同一个countryId ),静态属性属于类,在初始化的时候先于对象初始化。
  • 上面的countryId 是静态变量,比较少用,而用final修饰的静态常量更加常见(static final double PI = 3.1415926535)
  • 静态方法归属于类,而不属于对象,因此也就没有隐式参数(this.)
  • 静态方法不能访问实例属性(因为它不能操作对象),但是它可以访问类中的静态属性。
  • 将参数传递给方法有两种方式:1,按值调用 (call by value) 表示方法接收的是调用者提供的值。2,按引用调用 ( call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。“
  • Java 程序设计语言总是采用按值调用。也就是说, 方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。
  • 基本数据类型一旦确定就不可以改变,这个好理解,但是如果是对象,怎么还是值调用呢?其实入参的时候,会把指向对象的引用值进行拷贝,本质还是值调用。(入参的值永远不会改变,如果后续不再使用,会被GC回收,如果赋值,那也只是改变了引用的地址而已,原来的值还在。换言之,对象引用是按值传递)
  • 重载:同一个类,方法名相同,参数不同。重写:子类继承父类的方法,方法名和参数均一样。
  • 构造方法可以重载(一想不对,再想恍然大悟。)
  • 使用包的主要原因是确保类名的唯一性。(即便是相同的类,只要在不同的包,就不会冲突),事实上为了确保类型唯一,Sun 公司建议将公司的因特网域名(这显然是独一无二的) 以逆序的形式作为包名。
  • final可以阻止继承,如果在类上修饰,则类中方法自动成为final(不包括类中的属性(字段))。
  • equals 方法具有下面的特性:
    1 ) 自反性:对于任何非空引用 x, x.equals(x) 应该返回 true。
    2 ) 对称性: 对于任何引用 x 和 y, 当且仅当 y.equals(x) 返回 true , x.equals(y) 也应该返回 true
    3 ) 传递性: 对于任何引用 x、 y 和 z, 如果 x.equals(y) 返回true, y.equals(z) 返回 true, 那么x.equals(z) 也应该返回 true。
    4 ) 一致性: 如果 x 和 y 引用的对象没有发生变化,反复调用 x.eqimIS(y) 应该返回同样的结果。
    5 ) 对于任意非空引用 x, x.equals(null) 应该返回 false
  • 散列码( hash code ) 是由对象导出的,没有规律的一个整型值。如果 x 和 y 是两个不同的对象, x.hashCode( ) 与 y.hashCode( ) 基本上不会相同(有可能相同,比如字符串 s 与 t,都是2556)。
  • hashcode()定义在Object中,实际上是对象的存储地址
posted @ 2022-03-24 08:56  layman~  阅读(24)  评论(0编辑  收藏  举报