Loading... **Java基础** ### **一、JDK与JRE** * **JDK: java development kit (java开发工具)** * **JRE: java runtime enviroment(java运行时环境)** * **JVM:java virtual machine(java虚拟机)** **1.JDK:** **第一部分是Java运行时环境, JVM** **第二部分是JAVA的基础类库,** **第三部分是Java的开发工具** ### **二、Java语言的五大特性** * **万物皆对象** * **程序就是多个对象彼此调用方法的过程** * **从内存角度而言,每个对象都是有其他更基础的对象组成的** * **每一个对象都有类型,都可以进行实例化** * **同一类型的对象可以接收相同的消息** **面向对象变成的最大挑战就是如何在问题空间的元素和解决方案空间的对象之间建立一对一的关联.** ### **三、对象间的四种关系** **1.依赖** **依赖关系表示一个类依赖于另一个类的定义。一般而言,依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。** **2.关联** **关联关系是类与类之间的联接,他使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。在Java语言中,关联关系一般使用成员变量来实现。** **3.聚合** **聚合关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其他的零件类之间的关系,便整体和个体的关系。与关联关系一样。聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处于不平等层次上的,一个代表整体,另一个代表部分。** **4.组合** **组合关系是关联关系的一种,是比聚合关系强的关系。他要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下降负责代表部分的对象湮灭调。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他的负责生命周期。部分和整体的生命周期一样。** ### **四、封装、继承、多态** **1.封装** **封装就是把对象的属性和行为结合为一个独立的整体,并尽可能多的隐藏对象的内部实现细节。** **2.继承** **对象用来封装数据和功能,但我们要创建一个新类,然后他又与已存在的类具有部分相同的属性或功能,此时,为了代码复用原则,可以使用继承来实现。** **继承通过基类和子类的概念来表达,基类的所有特征和行为都可以与子类共享。也就是说,你可以通过基类呈现核心思想,从基类继承的子类则为核心思想提供不同的实现方式。** **又是基类和子类的方法都是一样的,这是就可以用子类的对象代替基类的对象,这种纯的替代关系通常叫做替换原则。** **又是,子类会添加一些新的方法,此时就是不完美替换。** **3.多态** **通过将子类对象引用赋给父类对象引用来实现动态方法调用。如:** ``` List<String> list = new ArrayList<String>(); ``` ### **五、八种基本数据类型** **1.整数类型** **注意事项:int i = 8;这里的8叫做直接量或者字面量,就是直接写出来的常数。整数字面量默认都是int类型,所以在定义的long类型后面要加上L或l。小于32位的变量都是按照int结果去计算的。特别提醒的是强转符比数学运算符优先级要高。** | **数据类型** | **内存** | **取值范围** | **占用存储空间** | | -------------- | ---------- | --------------------------------- | ------------------ | | **byte** | **8位** | **-128~127** | **1字节** | | **short** | **16位** | **-2^15~2^15-1 (-32768-32767)** | **2字节** | | **int** | **32位** | **-2^31~2^31-1 (21亿)** | **4字节** | | **long** | **64位** | **-2^63~2^63-1** | **8字节** | **2.浮点数类型** **java浮点型默认为double型,要声明一个变量为float型时,需要再数字后面加F或者f;** | **数据类型** | **内存** | **取值范围** | **占用存储空间** | | -------------- | ---------- | ----------------------------------------- | ------------------ | | **float** | **32位** | **-3.403E38~3.403E38 (23位有效尾数)** | **4字节** | | **double** | **64位** | **-1.798E308~1.798E308 (52位有效尾数)** | **8字节** | **3.字符类型** | **数据类型** | **内存** | **取值范围** | **占用存储空间** | | -------------- | ---------- | -------------- | ------------------ | | **char** | **16位** | | | **4.布尔类型** **boolean: true/ false** **5.基本数据类型间的转换:** **byte,short,char->int->long->float->double** * **低级到高级自动类型转换** ``` byte b; int i=b;long l=b;float f=b;double d=b; ``` * **高级到低级的强制类型转换** ``` int i=99; byte b=(byte)i;char c=(char)i;float f=(float)i; #精度会下降 ``` * **包装类过渡类型能够转换** ### **六、类、接口、抽象类** **1.普通类和抽象类** * **抽象类不能实例化;** * **抽象类可以有抽象方法,只需申明,无需实现;** * **有抽象方法的类,一定是抽象类;** * **抽象类的子类必须实现抽象类中的所有抽象方法,否则子类仍然是抽象类;** * **抽象方法不能生命为静态、不能被static、final修饰** **2.接口和抽象类** | **-** | **接口** | **抽象类** | | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | | **类修饰符** | **interface** | **abstract** | | **能否实例化** | **否** | **否** | | **继承与实现** | **类可以实现多个接口** | **类只能继承单个抽象类** | | **方法** | **java8之前,接口中的方法都是抽象方法,省略了public abstract; ****java8之后,接口中可以定义静态方法,静态方法必须有方法体,普通方法没有方法体,需要被实现;** | **可以包含抽象方法和非抽象方法** | ### **七、成员变量和局部变量** | | **成员变量** | **局部变量** | | ---------------- | ----------------------------------------------- | --------------------------------------------------- | | **类中位置** | **类中方法外** | **方法定义中或者方法声明上** | | **内存中位置** | **堆** | **栈** | | **生命周期** | **随着对象的创建而存在,随着对象的消失而消失** | **随着方法的调用而存在,随着方法的调用完毕而消失** | | **初始值** | **有默认值** | **没有默认值,必须定义,赋值** | ### **八、重写与重载** **1.重写** * **参数列表必须完全与被重写方法相同;** * **返回类型必须完全与被重写方法的返回类型相同** * **访问权限不能比父类中北重写的方法的访问权限更低;** * **final方法不能重写** * **static方法不能重写,但是能够被再次声明;** * **构造方法不能被重写** * **子类和父类在同一个包中,name子类可以重写父类所有除了声明为private和final的方法;** * **如果不能继承一个方法,则不能重写这个方法;** * **子类和父类不在同一个包中,那么子类只能够重写父类的生命为public和protected的非final方法;** * **重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常.但是重写的方法不能抛出新的强制性异常,或者比原方法声明的更广泛的异常.** **2.重载** * **重载是多态的击中体现,在类中,要以统一的方式处理不同类型数据的时候,用重载.** * **重载要求方法名一致,参数列表不一致** ### **九、克隆** **1.如何实现对象克隆?** * **实现Cloneable接口,重写clone方法** * **实现Serializable接口,通过对象的序列化和反序列化实现克隆** * **通过工具类,BeanUtils等** **2.深拷贝和浅拷贝区别** * **浅拷贝:仅仅克隆基本类型变量,不克隆引用类型变量;** * **深拷贝:既克隆基本类型变量,又克隆引用类型变量;** ### **十、异常** **1.异常分类** **(1)未受检异常:派生于Error类或者RuntimeException类的所有异常** * **Error异常: 一般无法通过程序解决,源于程序的bug或者环境问题,如:内存耗尽** * **RuntimeException:运行时异常,如:** * **ILLegalArgumentException** * **ILLEgalStateException** * **NullPointerException** * **ArrayIndexOutOfBoundsException** * **ClassCastException** **(2)已受检异常:程序正确,但因为外在的环境条件不满足引发.** **如:IOException,Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能编译.** **2.try...catch语句块** * **try...catch语句块可以捕获多个异常,使用多个catch块,对不同异常类型进行捕获** * **finally子句无论异常是否抛出都会执行,常用于关闭资源** **3.自定义异常** * **Java提供的异常体系不可能预见所有期望加以报告的错误,就需要自定义异常** * **必须从已有的异常继承** **4.使用异常机制的技巧** * **异常处理不能代替简单的测试;** * **不要过分细化异常** * **不要压制异常** * **检查错误时,尽量严谨** * **不要羞于传递异常,早抛出,晚捕获.** ### **十一、泛型中的通配符** **T、E、k、V、?这些的含义** * **?表示不确定的java类型** * **T(type)表示具体的一个java类型** * **K V(key、value)分别代表java键值对中的Key、Value** * **E(element)代表Element** **1.无界通配符** **2.上届通配符 ? extends E** **表示E类的任何一个子类** **3.下届通配符? super E** **表示E类的任何一个父类,包括Object** © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 If you think my article is useful to you, please feel free to appreciate