赖展达
第一章 初识java与面向对象程序设计
java是面向对象的:面向对象程序设计的思维方式是一种更符合人们思考习惯的思想。面向对象具有抽象、封装、继承、多态的特性,更符合程序设计中“高内聚、低耦合”的主旨,其编写的代码的可维护性、可读性、复用性、可扩展性远比面向过程高,但是性能相比面向过程偏低一些。
java的基础语法:


第二章 java基础编程
1. 变量与常量:变量本质是一个“可操作的存储空间” ,变量必须先声明再使用。常量与变量语法类似,只在变量声明加上final关键字即可
2. 运算符:计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:算术运算符、关系运算符、位运算符、逻辑运算符、赋值运算符等。 算术运算符:它主要提供了数值的加减乘除以及求余的功能 关系运算符:比较两数大小可以使用关系运算符 逻辑运算符:它主要提供了数值的加减乘除以及求余的功能 3. 赋值运算符:

3.条件语句和循环结构
Java 条件语句
if...else:用于在代码中做一些逻辑判断,满足条件时,执行某代码

switch语句:它也是选择结构,一般用来做一些精确值的判断

while语句:只要条件表达式的值为ture,就会执行循环体,直到表达式的值为false才退出循环

for语句:虽然所有循环结构都可以用 while 或者 do...while表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。for循环执行的次数是在执行前就确定的。


4. 方法
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合,方法包含于类或对象中,方法在程序中被创建,在其他地方被引用
方法包含一个方法头和一个方法体。下面是一个方法的所有部分:
修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
方法体:方法体包含具体的语句,定义该方法的功能。

方法的重载:在同一个类中,允许存放一个以上的同名方法,只要他们的参数个数或者参数类型不同即可,这种叫方法的重载

数组:是一种能够存放相同数据类型的有序集合。

小结:
变量、运算符、条件语句、循环结构和方法是构建任何Java程序的基本构件。通过不断练习和应用这些概念,可以逐步提高编程能力,编写出更复杂和高效的代码。
第三章 面向对象
类的定义:java使用class关键字定义一个类。一个java文件中可以有多个类,但最多只能有一个oublic修饰的类,这个类的类名必须与文件名完全一致。示例:public class Car { ... }
对象的创建必须先有一个类,然后通过new关键字创建一个对象。示例:Car myCar = new Car();
构造方法:是用于创建类的对象的特殊方法。
当使用 new 关键字创建对象时,构造方法会自动调用,用来初始化对象的属性。
构造方法具有以下几个特点:
与类名相同:构造方法的名称必须与类名完全一致,包括大小写。这是构造方法的一个基本要求。
没有返回类型:构造方法没有返回类型声明,即使是 void 也不写。这使得它与普通方法区分开来。
自动调用:每次使用 new 创建对象时,构造方法会自动调用,以初始化对象的属性和状态。
不能直接调用:构造方法只能通过 new 关键字在创建对象时调用,不能像普通方法那样直接调用。
支持重载:可以为一个类定义多个构造方法,只要它们的参数列表不同。通过重载,可以创建不同的构造方法以适应不同的初始化需求。
默认构造方法:如果没有定义任何构造方法,Java 会提供一个无参的默认构造方法。但一旦定义了任何其他构造方法,Java 不再提供默认构造方法。
this 关键字的使用:在构造方法中可以使用 this 来引用当前对象的属性、方法,或调用另一个构造方法(必须是构造方法的第一行),以避免重复代码。

不能被继承,但可以被调用:构造方法不能被子类继承,但子类可以使用 super() 来调用父类的构造方法,以便初始化继承的属性。
对象初始化保障:构造方法的主要作用是初始化对象的属性和状态,保证对象在创建时处于一个合法的初始状态。
静态变量:java 中的静态变量是指在类中定义的一个变量,它与类相关而不是与实例相关,即无论创建多少个类实例,静态变量在内存中只有一份拷贝,被所有实例共享。静态变量在类加载时被创建,在整个程序运行期间都存在。
定义方式:静态变量的定义方式是在类中使用 static 关键字修饰变量,通常也称为类变量。

小结:类的定义:类是Java中的基本构建块,用于封装数据和行为。一个Java文件可以包含多个类,但只有一个public类,且其名称必须与文件名一致。
对象的创建:对象是类的实例,通过new关键字创建。每个对象都有自己的状态和行为。
构造方法:构造方法用于初始化对象的状态。它没有返回类型,且名称必须与类名相同。构造方法支持重载,可以根据不同的参数列表提供不同的初始化方式。
静态变量:静态变量属于类而不是实例,所有实例共享同一个静态变量。静态变量在类加载时初始化,并在程序运行期间一直存在。
第四章 面向对象程序设计
封装:在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
get()/set()方法:是面向对象编程中用于访问和修改对象属性的常见方法。它们通常用于封装类的属性,以确保对属性的访问和修改是可控的,同时隐藏内部实现细节。

继承:是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
类的继承格式:在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:

super 与 this 关键字
super 关键字:我们可以通过 super 关键字来实现对父类成员的访问,用来引用当前对象的父类。
this 关键字:指向自己的引用,引用当前对象,即它所在的方法或构造函数所属的对象实例。。


final关键字:final是一个关键字,可以用于修饰类,成员变量,成员方法。
特点:它修饰的类不能被继承。
它修饰的成员变量是一个常量。
它修饰的成员方法是不能被子类重写的。
Java Object 类:是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。
显式继承:public class Runoob extends Object{}
隐式继承:public class Runoob {}
多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。
多态存在的三个必要条件:继承、重写、父类引用指向子类对象:Parent p = new Child();
向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口。
向下转型:与向上转型相对应的就是向下转型了。向下转型是把父类对象转为子类对象
抽象类:在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。抽象类的关键字是abstract。
接口:在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
抽象类和接口的区别
1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
Interface关键字用来声明一个接口:

接口的实现:当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。
实现一个接口的语法,可以使用这个公式:...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...
接口的继承:一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。
下面的Sports接口被Hockey和Football接口继承:

内部类基础:在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。
1.成员内部类:成员内部类是最普通的内部类,它的定义为位于另一个类的内部。
2.局部内部类:局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
3.匿名内部类:匿名内部类应该是平时我们编写代码时用得最多的,在编写事件监听的代码时使用匿名内部类不但方便,而且使代码更加容易维护。
4.静态内部类:静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。
小结:
封装是给类的内部数据加上保护,外部只能通过特定方法(如 getter/setter)访问或修改数据,防止误用或破坏。继承是子类继承父类的特性,减少代码重复,提高复用性。super 和 this 分别指向父类和当前对象,帮助在子类中调用父类方法或访问自身成员。final 表示不可更改,用于类、变量或方法,表示不能被修改。多态是一个接口多种实现,使程序更灵活,根据不同对象调用不同方法。抽象类和接口都定义规范,抽象类侧重类的层次结构,接口侧重行为定义,且接口可多实现,更灵活。
第五章 异常
在 Java 中,异常处理是一种重要的编程概念,用于处理程序执行过程中可能出现的错误或异常情况。
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这些异常在编译时强制要求程序员处理。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
运行时异常: 这些异常在编译时不强制要求处理,通常是由程序中的错误引起的,例如 NullPointerException、ArrayIndexOutOfBoundsException 等,这类异常可以选择处理,但并非强制要求。
错误: 错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
Exception 类的层次:所有的异常类是从 java.lang.Exception 类继承的子类。
Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。
Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。
捕获异常:使用 try 和 catch 关键字可以捕获异常。

在Java中, throw 和 throws 关键字是用于处理异常的。
throw 关键字用于在代码中抛出异常,而 throws 关键字用于在方法声明中指定可能会抛出的异常类型。
throw 关键字:throw 关键字用于在当前方法中抛出一个异常。
通常情况下,当代码执行到某个条件下无法继续正常执行时,可以使用 throw 关键字抛出异常,以告知调用者当前代码的执行状态。
throws 关键字:用于在方法声明中指定该方法可能抛出的异常。当方法内部抛出指定类型的异常时,该异常会被传递给调用该方法的代码,并在该代码中处理异常。
小结:
Java 中的异常处理机制是处理程序运行时可能出现的错误或异常情况的重要工具。异常可以分为以下几类:检查性异常,运行时异常,错误(Errors)。使用 try/catch 块可以有效地捕获和处理异常,避免程序因未处理的异常而崩溃。throw 和 throws 关键字则提供了在方法中抛出异常和声明可能抛出异常的能力,使得异常可以在调用链中传递,直到被合适的处理代码捕获。
第六章 Java常用类
String类:string(字符串)是一种数据类型,用于表示文本数据。String类对象代表不可变的Unicode字符序列,内部使用了一个用final的字符数组存储数据,一旦string确认,就不能改变。
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
String 类有 11 种构造方法,这些方法提供不同的参数来初始化字符串,比如提供一个字符数组参数:

Java StringBuffer 和 StringBuilder 类:当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuffer 主要方法:

StringBuilder 类在 Java 5 中被提出,StringBuilder和StringBuffer一摸一样,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
Date类:java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。
random() 方法:用于返回一个随机数,随机数范围为 0.0 =< Math.random < 1.0。
Java 枚举:Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。
小结:
java中有很多不同的类,包括包装类,字符串,时间日期等。包装类使得基本数据类型可以作为对象使用,字符串处理提供了不可变的String类和可变的StringBuilder类。