标签:use 方法返回值 允许 分析 import jdk html user 计算机
第一章 类和对象
假设要编程解决一个很大的问题,需要写几万行代码,如果按照以前的做法,将这些代码放一个Java文件中,可以想象这个文件会非常冗长,而且很难维护。
因此,出现了面向对象的设计。
面向对象程序设计,英语缩写为 OOP。面向对象程序设计是一个里程碑,Alan Kay 因为设计了世界上第一个面向对象语言 Smalltalk 而获得图灵奖。
Java之父 James Gosling 结合 Internet 背景设计了完全面向对象的Java 语言。
1、对象
现实世界中客观存在的事物就称为对象。在Java的世界中,“万物皆对象”。
对象可以是有形的,如一辆汽车;也可以是无形的,如一项计划。
Java是一种面向对象的编程语言(Object Oriented Programming Language, OOPL),因此,我们要学会用面向对象的思想考虑问题和编写程序。在面向对象中,对象是用来描述客观事物的一个实体,用面向对象的方法解决问题时,首先要对现实中的对象进行分析与归纳,找出哪些对象与要解决的问题是相关的。
每一个对象都有自己的特征,包括静态特征和动态特征。静态特征是可以用某些数据来描述的特征,如人的姓名、年龄等。动态特征是对象所表现的行为或对象所具有的功能,如购物、收款等。
1.1、对象的属性和方法
在面向对象的编程思想中,把对象的静态特征和动态特征分别称为对象的属性和方法,它们是构成对象的两个主要因素。其中属性是用来描述对象静态特征的一个数据项,该数据项的值即是属性值。
解释:对象:用来描述客观事物的一个实体,由一组属性和方法构成。
1.2、封装
封装(Encapsulation)就是把一个事物包装起来,并尽可能隐藏内部细节。
对象的属性和方法是相辅相成、不可分割的,它们共同组成了实体对象。因此,对象具有封装性。
2、类
类定义了对象将会拥有的特征(属性)和行为(方法)。
类的属性:对象所拥有的静态特征在类中表示时称为类的属性。
类的方法:对象执行的操作称为类的方法。
2.1、类和对象的关系
在Java面向对象编程中,就用这个类创建出类的一个实例,即创建类的一个对象。
一个类为它的全部对象给出了一个统一的定义,而它的每个对象则是符合这种定义的一个实体。因此类和对象的关系就是抽象和具体的关系。
类时多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例。
类是对象的类型。
3、Java是面向对象的语言
在面向对象程序设计中,类是程序的基本单元。Java是完全面向对象的编程语言,所有程序都是以类为组织单元的。
命名规则:
Camel (骆驼)命名法:方法或者变量的第一个单词的首字母小写,后面每个单词的首字母大写,如 showCenter、userName等。
Pascal (帕斯卡) 命名法:每一个单词的首字母都大写,如类名School等。
在Java中,定义类的属性和方法使用骆驼命名法,定义类使用帕斯卡命名法。
3.1、创建和使用对象
类的用作就是创建对象。由类生成对象,称为类的实例化过程。一个实例也就是一个对象,一个类可以生成多个对象。
语法: 类名 对象名 = new 类名();
面向对象的优点:
(1)与人类的思维习惯一致:面向对象的思维方式从人类考虑问题的角度出发,把人类解决问题的思维过程转变为程序能够理解的过程。面向对象程序设计能够让我们使用“类”来模拟现实世界中的抽取概念,用“对象”来模拟现实世界中的实体,从而计算机解决现实问题。
(2)信息隐藏,提高了程序的可维护性和安全性:封装实现了模块化和信息隐藏,即将类的属性和行为封装在类中,这保证了对它们的修改不会影响到其他对象,有利于维护。同时封装使得在对象外部不能随意访问对象的属性和方法,避免了外部错误对它的影响,提高了安全性。
(3)提高了程序的可重用性:一个类可以创建多个对象实例,增加了重用性。
本章总结:
第二章 类的无参、带参方法
1、成员变量和局部变量
成员部门:在类中定义的变量称为类的成员变量。如果其它类的方法要访问它,必须首先创建该类的对象,然后才能通过操作符 “.” 来引用。
局部变量:在方法中定义的变量称为局部变量。它的作用域仅仅在定义该变量的方法内,因此只有在这个方法中能够使用。
局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级。
2、JavaDoc注释
/**
* <p>Title: ESPModelConvert</p>
* <p>Description: 模型转换</p>
* @author liyh
* @version 1.0
*/
称为JavaDoc注释
标签 | 含义 | 标签 | 含义 |
@author | 作者名 | @version | 版本标识 |
@parameter |
参数及其意义 | @since | 最早使用该方法/类/接口的JDK版本 |
@return | 返回值 | @throws | 异常类及抛出条件 |
3、在定义方法和调用方法时,把参数分别称为形式参数和实际参数,简称形参和实参。
形参是在定义方法时对参数的称呼,目的是定义方法需要传入的参数个数和类型。
实参是调用方法时传递给方法处理的实际的值。
调用方法时,需要注意以下两点:
4、深入理解带参方法
数组作为参数的方法
对象作为参数的方法
5、包名
package 包名;
5.1、导入包
import 包名.类名;
第三章 对象和封装
面向过程的核心是函数,以功能为中心,实现了函数级别的代码重用。
面向对象的核心是封装了属性和方法(行为)的类,以数据为中心,实现了类级别的代码重用,面向对象因为采用了类,所以具有继承和多态特性,可以进一步重用代码和简化编程,而面向过程中没有继承和多态特性。
1、构造方法及其重载
构造方法的名称和类名相同,没有返回值类型。构造方法的主要作用就是在创建对象时执行一些初始化操作,如给成员属性赋值。
重载:方法名相同、参数列表不同,称为构造方法的重载。
如果同一个类中包含了两个或两个以上的方法,他们的方法名相同,方法参数的个数或者参数类型不同,则称为方法被重载了,这个过程称为方法重载。
成员方法和构造方法都可以进行重载。
注意:方法重载的判断依据如下:
在使用 this 调用 自身的其他构造方法时,只能作为第一条语句。
2、static 修饰符
static 可以用来修饰属性、方法和代码块。static修饰的变量属于这个类所有,即由这个类创建的所有对象共用同一个static 变量。通常把static 修饰符的属性和方法称为类属性(类变量)和类方法。
不使用static修饰的属性和方法属于单个对象,通常称为实例属性(实例变量)和实例方法。
注意:
静态方法中不能使用this 和 super 关键字。
在方法中不可以定义static变量,也就是说,类变量不能是局部变量。
结论:构造方法没有返回值类型,如果有,则不是构造方法,而是和构造方法同名的成员方法。
成员变量和局部变量同名时,必须使用 this。
this.name = name;
注意:this不能调用类变量和类方法,也不能调用局部变量。
3、封装
封装的具体步骤:修改属性的可见性来限制对属性的访问;为每一个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的存取;在赋值方法中,加入对属性的存取控制语句。
封装的好处:隐藏类的实现细节;让使用者只能通过程序规定的方法来访问数据;可以方便地加入存取控制语句,限制不合理的操作。
封装时会用到多个权限控制符来修改成员变量和方法,区别如下。
第四章 继承
1、语法
修饰符 SubClass extend SuperClass {
// 类定义部分
}
继承是面向对象的三大特性之一,是Java中实现代码重用的重要手段之一。Java中支持单继承,即每个类智能有一个直接父类。继承表达的是is a的关系,或者说是一种特殊和一般的关系。
在Java中,子类可以从父类中继承到哪些“财产”呢?
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
private | √ | |||
默认 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
2、重写和继承关系中的构造方法
在子类中可以根据需求对从父类继承的方法进行重新编写,称为方法的重写或者方法的覆盖(overriding).
方法重写必须满足如下要求:
2.1、Object 类的重写
Object 类是所有类的父类。是所有Java类的祖先。
方法 | 说明 |
toString() | 返回当前对象本身的有关信息,按字符串对象返回 |
equals() | 比较两个对象是否是同一个对象,若是,返回true |
clone() | 生成当前对象的一个副本,并返回 |
hashCode() | 返回该对象的哈希代码值 |
getClass() | 获取当前对象所属的类信息,返回Class对象 |
Object类中的equals() 方法用来比较两个对象是否是同一对象,若是,返回true。
而字符串对象的equals() 方法用来比较两个字符串的值是否相等。java.lang.String类重写了Object类中的equals()方法。
继承条件下构造方法的调用规则如下:
3、抽象类
3.1、抽象类和抽象方法
可以使用Java中的抽象类来实现,用abstract 来修饰类,抽象类不能通过new 实例化。
用abstract来修饰print() 方法,则子类必须重写该方法。
抽象类和抽象方法的特点如下:
注意:abstract可以用来修饰类和方法,但不能用来修饰属性和构造方法。
4、final 修饰符
用final 修饰的变量(包括成员变量和局部变量)将变成常亮,只能赋值一次。
注意:
一定要区分对象的引用值和对象的属性值两个概念。使用final 修饰引用型变量,变量不可以再指向另外的对象,但是所指对象的内容却是可以改变的。
结论:
使用final修饰引用型变量时,变量的值是固定不变的,而变量所指向的对象的属性值是可变的。
abstract 不能和private 同时修饰一个方法。
abstract 不能和static 同时修饰一个方法。
abstract 不能和final 同时修饰一个方法或类。
本章总结:
第五章 多态
简单来说,多态(Polymorphism) 是具有表现多种形态能力的特征。更专业化的说法,同一个实现接口,使用不同的实例而执行不同的操作。
1、子类到父类的转换(向上转型)
1.1、使用父类作为方法形参实现多态
使用父类作为方法的形参,是Java中实现和使用多态的主要方式之一。
1.2、使用父类作为方法返回值实现多态
使用父类作为方法的返回值,是Java中实现和使用多态的另一种方式。
总结:总结出实现多态的三个条件
2、父类到子类的转换(向下转型)
将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行进行强制类型转换。
3、instanceof 运算符
进行向下转型时,如果没有转换为真是子类类型,就会出现类型转换异常。如何有效避免出现这种异常?Java提供了instanceof 运算符来进行类型的判断。
语法: 对象 instanceof 类或接口
该运算符用来判断一个对象是否属于一个类或者实现了一个接口。结果为true 或 false。 在强制类型转换之前通过instanceof 运算符检查对象的真实类型,再进行相应的强制类型转换,这样就可以避免类型转换异常,从而提高代码的健壮性。
资料:
本章总结
第六章 接口
·1、语法(定义接口类)
[修饰符] interface 接口名 extends 父接口1,父接口2,...{
// 敞亮定义
// 方法定义
}
class 类名 extends 父类名 implements 接口1,接口与2,...{
//类成员
}
说明:
public static final int PI = 3.14;
int PI = 3.14; // 在接口中,这两个定义语句效果完全相同
int PI;// 错误!在接口中必须指定初始值,在类中会有默认值
一个类只能有一个直接父类,但可以通过implements 实现多个接口。当类在继承父类的同时又实现了多个接口时,extends 关键字必须位于implements 关键字之前。
本章总结:
第七章 异常
目前流行的用于记录日志的开源框架——log4j 并使用 log4j 记录异常日志。
Java的异常处理是通过五个关键字——try、catch、finally、throw、throws来实现的。
Exceotion | 异常层次结构的根类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问null 对象成员 |
ClassNotFoundException | 不能加载所需的类 |
InputMinsmatchException | 欲得到的数据类型与实际输入的类型不匹配 |
IllegaArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把“abc转换成数字” |
1、在try——catch 语句块后加入finally 块,把该语句放入finally 块。无论是否发生异常,finally 块中的代码总能被执行。
try——catch——finally 结构中try块是必需的,catch和finally块为可选,但两者至少须出现其中之一。
需要特别注意的是,即使在try块和catch块中存在return语句,finally块中语句也会被执行。发生异常时的执行顺序,执行try块或catch中return之前的语句,执行finally块中的语句,执行try块或catch中return语句退出。
finally块中语句不被执行的唯一情况:在异常处理代码中执行System.exit(1) ,将退出Java虚拟机。
例如:在catch块中执行System.exit(1); //finally块中语句不被执行的唯一情况
2、多个catch块
当运行时,系统从上到下分别对每个catch语句块语句处理的异常类型进行检测,并执行第一个与异常类型匹配的catch 语句。执行其中的一条catch语句之后,其后的catch语句都将被忽略。
注意:在使用多重catch块时,catch块排列顺序必须是子类到父类,最后一个一般都是Exception 类。
3、声明异常——throws
通过throws继续声明异常,如果调用者不打算处理该异常,则可以继续通过throws声明异常,让上一级调用者处理异常。
4、抛出异常——throw
在方法内通过throw抛出异常,把问题交给调用者去解决。
对比:throw 和 throws 的区别表现在以下三个方面
5、开源日志记录工具 log4j
创建log4j.properties 文件。使用log4j 需要创建log4j.properties 文件,该文件专门用来配置日志信息。如输出级别、输出目的地、输出格式等。
### 设置Logger 输出级别和输出目的地 ###
log4j.rootLogger = debug, stdout,logfile
### 把日志信息输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.err
log4j.appender.stdout.layout = org.apache.log4jSimpleLayout
### 把日志信息输出到文件:jbit.log ###
log4j.appender.logfile = org.apache.log4j.FileAppender
log4j.appender.logfile.File = jbit.log
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %1 %F%p %m%n
5.1、输出级别
log4j.rootLogger = debug, stdout,logfile
其中,debug指的是日志记录器(Logger)的输出级别,主要输出级别及含义如下。
各个输出级别优先级:
fatal > error > warn > info > debug
日志记录器(Logger) 将只输出那些级别高于或等于它的信息。例如,级别为debug,将输出fatal、error、warn、info、debug级别的日志信息;而级别为error,将只输出fatal、error级别的日志信息。
5.2、日志输出目的地 Appender
log4j.rootLogger = debug, stdout,logfile
其中,stdout、logfile 指的是日志输出目的地的名字。
log4j允许记录日志到多个输出目的地,一个输出目的地被称为一个Appender。log4j中最常用的Appender有以下两种。
5.3 日志布局类型Layout
Appender 必须使用一个与之相关联的布局类型 Layout,用来指定它的输出样式。log4j 中最常用的 Layout 有以下三种。
示例中的第一个Appender 是stdout,使用了SimpleLayout;第二个Appender 是logfile,使用了PatternLayout,需要配置layout.ConversionPattern 属性来自定义输出格式。
5.4 转换模式 ConversionPattern
对于PatternLayout,需要配置layout.ConversionPattern属性,常用的配置参数及含义如下。
本章总结:
本文为课程书本知识记录,如有遗漏错误,请大佬指出,谢谢谢谢。
标签:use 方法返回值 允许 分析 import jdk html user 计算机
原文地址:https://www.cnblogs.com/liyh321/p/13999453.html