**本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接 **
java的核心思想是面向对象
OO:Object Oriented 面向对象
OOP:面向对象编程
OOD:面向对象设计
OOA:面向对象分析
1.对象:
a.对象:用来描述客观事物存在的一个实体,对象由一组属性和方法构成
b.组成:
属性: 对象特征描述,静态描述
方法: 对象的执行操作,动态描述
2.类:
a.what: 将实际存在的对象的共同属性和方法进行抽象得到的概念为类
类 是模子,定义对象将会拥有的特征(属性)和行为(方法)
3.类和对象的关系:
类是对象的抽象,对象是类的具体实现
4.java面向对象编程:
a. 所有java程序都是以类 class作为组成单元
关键字class其实就是自定义数据类型
b.语法:
public class 类名{
//属性定义
属性类型1 属性1;
属性类型2,属性2;
...
//方法定义
方法1;
方法2;
...
}
c.具体使用:
步骤: 编写类名-编写属性-编写方法
对象类包命名规则: .vo/.entity/.pojo
d.对象的创建和调用:
创建:
类名 对象名 = new 类名();
new表示创建对象
使用:
对象名.属性 如果直接调用表示将该对象的属性获取,如果添加参数则表示给该对象属性赋值
对象名.方法 执行该对象的方法
e.对象调用注意事项:
属性在类中创建不进行赋值--定义在类中的变量为全局变量,全局变量系统会自动将默认值进行赋值;
int---0
double---0.0
char ---Unicode
boolean---false
String---null
如果在定义类属性时直接赋值,则表示进行初始化,通过该类创建的对象均使用该值(后期不更改)
5、类的方法
a.定义语法:
<权限修饰符> 返回值类型 方法名(<参数列表>){
方法体
<return 返回值>
}
权限修饰符: public指定类与类之间的调用范围,可省略
返回值类型: 指定返回值的具体数据类型,void为无返回值的返回值类型
方法名: 指定当前方法的名称,用于后期调用,严格按照命名规则
参数列表: 参数个数和类型,可省略
**return : ** 如果有返回值,表示指定返回值,return 只能出现在该方法体的最后一句
b.返回值:
return只能放在方法的最后一句
c.方法调用:
方法之间允许相互调用,不需要知道方法的具体实现,实现重用,提高效率
场景一:
当前类自己方法调用自己方法
public void a(){
b();
}
场景二:
当前类方法调用其他类方法
public void a(){
B b=new B();
b.b();
}
6.全局变量和局部变量
a.作用域不同:
全局变量: 在类中定义的变量为全局变量,作用域为整个类
局部变量: 在方法体或特定内容中的变量,作用域为方法体或特定区域,如for{}
b.对比
全局变量使用时可以不赋值,系统直接提供默认值,局部变量使用前一定要先赋值;
局部变量中不允许重名,但是全局变量和局部变量可以重名,重名使用局部变量中的内容,内容进行覆盖;
注意:
在同一个方法中,不允许有同名局部变量,在不同的方法中,可以有同名局部变量在同一个类中,成员变量和局部变量同名时,局部变量具有更高的优先级
7.带参方法:
a.why: 在很多场合,需要执行相似操作,将相似操作作为一个方法编写,不同的内容作为参数传入执行,从而达到一个方法体输出不同结果
b.语法:
<权限修饰符> 返回值类型 方法名 (<形式参数列表>){
方法体
}
**修饰符: ** 指定该方法的执行范围:当前类,子类,同包,不同包;
返回值类型: void:无返回值类型;String...根据实际需求指定返回值类型;
方法名: 指定方法名称,驼峰命名规则;
参数列表: 参数个数和参数类型统称为参数列表;
方法的参数列表没有实际值,为 形参,
在调用执行该方法的时候传入的参数才有实际值,为 实参;
注意:
在调用方法的时候实参列表要一一对应;
多个参数传递时一定注意顺序问题
思考问题:
参数传递是否可以使用对象?
返回值是否可以返回对象?
数组是否可以存储对象?
补充:
包的命名规范问题:
"." 作为连接符号,但是不能为开头和结尾;
包名 是域名的倒装加上项目名等组成;
8、类图:
a. 属性前 "+"表示public, "-"表示private
方法参数列表需要指定类型
b.绘制工具
9、构造方法:
a.what: 特殊的方法
b.语法:
修饰符 方法名(参数列表){
方法体
}
构造方法没有返回值类型;
构造方法的方法名同所在的类名一致;
构造方法在同一个类中可以同时出现多个,但是每一个与其他之间的参数列表是不同--- 重载;
**重点: ** 每一个类都有构造方法,如果人为给出指定构造方法该无参构造方法消失
**建议: ** 以后创建类的时候人为指定构造方法,即使是无参构造方法
c.作用: 完成初始化,可以使用该功能进行创建对象的时候直接给属性赋值
10、方法重载:
在同一个类中,方法名相同,参数列表(参数个数,参数类型,类型顺序)不同都为重载,和返回值与修饰符无关;
使用方便,一般方法重载在构造函数的使用体现最广;
public class Demo {
//一个普通得方法,不带参数,无返回值
public void add(){
//method body
}
//重载上面的方法,并且带了一个整形参数,无返回值
public void add(int a){
//method body
}
//重载上面的方法,并且带了两个整型参数,返回值为int型
public int add(int a,int b){
//method body
return 0;
}
}
11、this关键字:
a.调用属性
this.属性
在构造函数的赋值中使用广泛
b.调用方法:
this.方法();
c.调用构造函数
this(); 表示该对象的无参构造方法
this(name); 表示该对象的该参数的构造方法;
12、static关键字:
static修饰的变量为静态变量;
static修饰的方法为静态方法;
静态方法只能调用静态方法和静态变量;
动态方法可以调用静态方法和动态方法,也可以调用静态变量和动态变量;
在其他类中调用:
- 类名.静态方法;
- 对象.静态方法;
- 对象.动态方法;
13、方法执行:
- 静态块: 类加载是执行,该方法只执行一次;
- **动态块: ** 在创建对象的时候初始化,该方法只要创建一个对象执行一次
- 构造方法: 在创建对象的时候初始化,该方法只要创建一个对应的对象是执行一次;
- 静态方法: 类和对象都可以调用,调用的时候执行一次;
- 动态方法: 对象可以调用,调用的时候执行一次;
- **eg: ** 对象的id依次递增
14、封装:
**重点: ** 对象的三大特征之一 (抽象)、封装、继承、多态
a. 属性的权限为public表示公共的,任何类都可以直接进行操作,安全性不高?
-封装
b.what: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 (将属性私有化,并提供公共的访问方法)
c.语法:
- private 属性
- public void set属性(参数列表){} //设值方法
- publci 返回值
- get属性(){} //获取方法
public class Person{
private String name; private int age; public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
}
d.好处:
隐藏类的实现细节,只能通过规定的方法去获取数据,安全性高
方法控制流程加入和修改实现
15、继承:
java中类为单继承
a.why: 多个类有重复相同的属性和方法,代码冗余,如何解决? --继承:
b.what: 子类继承类的所有属性和方法,并提供自己的特定属性和方法
c.语法:
父类 : class 父类{ 封装 }
子类 : class 子类 extends 父类{ 封装}
d.使用:
1).子类对象创建方式:
方式一:Student student=new Student();
方式二:Person student2=new Student(); //父类引用指向子类对象
2).子类可以调用子类的,也可以调用父类
16、super: 同this使用效果
- super.属性:子类调用父类的属性,注意权限问题,哪些权限可以?
- super.方法():子类调用父类的公共方法;
- super()/super(属性):子类调用父类的构造方法;
- super()只能放在第一句
17、权限修饰符:
| 同类 | 同包 | 子类 | 其他 | |
|---|---|---|---|---|
| private私有的 | √ | |||
| 默认(不写) | √ | √ | ||
| protected受保护的 | √ | √ | √ | |
| public公共的 | √ | √ | √ | √ |
18、方法重写:
a.why: 在某些场合,需要子类将父类的同名方法去进行补充扩展?
b.what: 子类将父类的同名方法重写编写的过程;
c.注意事项:
-
方法名相同
-
参数列表相同
-
返回值类型相同或者是其子类
-
访问权限不能严于父类
-
构造方法不能被继承,所以不能被重写
-
或者说
1.方法重写时, 方法名与形参列表必须一致。 2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。 3.方法重写时,子类的返回值类型必须要小于或者 等于父类的返回值类型。 4.方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。
d.how:
实际生活中,如果两个对象的属性值完全一样,则表示两个对象指定的是一个对象
-java代码中equals表示比较的是内容应该结果为true,但是实际为false?
-问题:equals哪来的?
---Object类
-问题2:如果Object提供的equals无法满足实际需求?
equals方法重写