【摘要一】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中,实际上是
对象的存储地址
。