面向对象基础知识

一、面向对象(客观存在)
1. 面向对象:是相对面向过程而言更注重对象自有的功能的编程语言,将功能封装进对象,强调具备了功能的对象。是基于面向过程的
面向过程: 注重的是一种行为过程
面向对象和面向过程都是一种思想
2.特点:比较适合人的思考习惯
将复杂的事情简单化
将程序员由执行者变为指挥者
3.先要去找具有所需的功能的对象来用。
如果该对象不存在,那么创建一个具有所需功能的对象。
这样简化开发并提高复用。
4.开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。
5.设计的过程:其实就是在管理和维护对象之间的关系。
6.面向对象的特征:封装(encapsulation)继承(inheritance)多态(polymorphism)
7.方法:对象执行的操作

二、类(抽象)
1.定义:类是确定对象将会拥有的特征(属性)和行为(方法)
类和对象是相对的( 把人类当成一个类的话,那老师和学生就是对象,把老师当成类的话,那数学老师,英语老师就是它的对象)
2.特点:类是对象的类型
具有相同属性和方法的一组对象的集合
引用类型,地址
2. 类名 变量名 = new 类名();
3.每new 一次就在堆内存开辟一个内存空间
4. 成员变量(有默认初始值) 堆内存(特征),生命周期长
一般情况下,不会给成员变量赋值
适用于整个类
5 .局部变量(不会默认初始值)栈内存(功能)
同一个方法不允许有同名的局部变量
在不同方法中个,可以有同名局部变量
两类变量同名时,局部变量更有优先级(就近原则)
*两者区别:
1.作用范围
成员变量作用于整个类
局部变量只作用于当前函数

2.初始化区别
成员变量默认有初始值null
局部变量默认没有初始值. 定义/初始化/使用

3.存储区
成员变量是存储在堆内存中,跟对象在一起,对象初始化的时候 成员属性也被初始化,对象消失时成员属性也会消失.
局部变量是在栈内存中,随着方法被初始而存在.方法运行结束时 局部变量也跟着消失.
6. 所有new出来的,成员属性,成员变量都在堆内存中;引用类型的变量在占内存当中,所有的方法存在方法区。引用类型的变量会给一个默认初始值null
地址一般都是以十六进制来标记的
类在内存中是对象的集合
7.一个类可以创建多个对象
三、匿名对象(new 类名()
1.匿名对象是对象的简化形式
2.匿名对象两种使用情况
*当对对象方法或方法仅进行一次调用的时
*匿名对象可以作为实际参数进行传递

四、封装
1.封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式 (通过该类提供的方法来实现访问和操作)
2.私有权限标识符: private(在当前类下可以使用)用于修饰成员(成员变量和成员函数)
被私有化的成员只在本类中有效。
将成员变量私有化,对外提供对应的set ,get方法对其进行访问。提高对数据访问的安全性。
3.最大权限修饰符: public (在任何地方(不同包也可以)都可以使用)
4.默认修饰符: protective(在同一个包下使用)
5.原则:将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对其访问。
6.好处:只能通过规定的方法访问数据
隐藏类的实例细节,方便修改和实现
将变化隔离。
便于使用。
提高重用性。
提高安全性。
封装的实现步骤: 修改属性的可见性:设为private
创建getter/setter方法:用于属性的读写
在getter/setter方法中加入属性控制语句:对属性值的合法性进行判断
8.成员属性私有化,外部访问的方式:this .对象
set get 提供公共方法
9.高内聚,低耦合
高内聚:类的内部数据操作细节自己完成,不允许外部干涉
低耦合:仅暴露少量的方法给外部使用
10.属性的处理:
*一般使用private(除非本属性确定会让子类继承)
*提供相应的get/set方法来访问相关属性,这些方法通常是public,从而提供对属性的读取操作
*一些只用于本类的辅助方法可以用private
*希望其他类调用的方法用public

五、构造函数(初始化对象,创建对象时(new)就使用了)
1.特点: 函数名与类名相同
不用定义返回值类型
没有具体的返回值。
使用new + 构造方法 创建一个新的对象
2.作用:给对象进行初始化。
3.注意点:
1.初始化对象时调用构造函数,我们没有写构造函数,实际上系统默认给类写一个空参的 构造函数.
2.如果我们自己写上有参构造函数,那么系统就不会有空参数构造函数.如果我们想保留空参数的构造方式,就必须手动添加空参数构造函数.
3.构造函数可以是多个,但是参数个数不一致.。 多个构造函数是以重载(方法名相同,参数类型不同)的形式存在的
4.构造器不能放在普通方法中
4.格式: 权限修饰符(public/private) 类名(){初始化代码 }
5. 构造函数和普通函数区别:
1.格式不一样:普通方法可能有返回类型,构造方法不需要指定返回类型.构造方法的方法名必须和类名一致
2.用途:构造方法是用于对象初始化时候执行
普通方法是用于封装某种功能,然后在对象中调用的.
3.调用不同:构造方式是对象初始化到时候被调用的
普通方法是被对象调用的.

7.没有指定构造方法时,系统会自动添加无参的构造方法
当有指定构造方法时,无论有参还是无参的构造方法,都不会自动添加无参的构造方法
8.构造方法的重载:方法名相同,但参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法

六、this 关键字(调用这个方法的对象,区分局部变量中隐含的全局变量
1. this 表示的是当前对象本身,确切地说,this代表了当前对象的一个引用(调用 当前类的当前对象, 当在函数内需要用到调用该函数的对象时,就用this
2.用法
*用于区分局部变量中隐含的全局变量
*用于构造方法(构造函数可以调用构造函数,但this 调用的构造函数必须是第一行,可以调用空参)
this.属性 操作当前对象的属性
this.方法 调用当前对象的方法
3.当方法中没有声明变量时,该变量默认将this. 变量名代表的是全局变量
4. this引用的3种用法:
1.在实例方法(注意不是static方法)中作为本类当前对象将其引用作为自变量传递给其他方法。
如: en =new Event(this);
 2.在实例方法(注意不是static方法)中引用本类当前对象的成员变量和成员方法。通过this可以引用当前对象的成员    变量,调用当前对象的成员方法。语法格式如下:
     this.成员变量
     this.成员方法([参数列表])
3.调用本类重载的构造方法。this还可用在重载的构造方法(注意此处不能是别的方法中),调用本类已定义的构造 方法 
     this([参数列表]);
5.特点:this代表其所在函数所属对象的引用。换言之:this代本类对象的引用。
6.局部变量隐藏全局变量 比较人年龄的大小 构造函数中用

七、static关键字
1. 该类所有的对象共享同一个成员
2. Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。
3. 可以修饰变量、方法和代码块。
4. 静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收
5.   静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。
如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。
6. 普通成员方法中 ,则可以直接访问同类的非静态变量和静态变量
7. 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法
8.静态初始化块
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。

八、接口
1.含义: 一种特殊的类,由全局常量和公共方法所组成
定义了某一些类需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。
2.定义: interface 关键字
3.基本语法: [修饰符] abstract interface 接口名 [ extends 父接口1,父接口2...]{
零到多个常量定义
零到多个抽象方法的定义...
}
接口就是用来继承、被实现的,修饰符一般建议用 public,不能使用private 和protected 修饰接口
abstract 关键字如果不写,系统会默认添上
接口可以多继承[] 表示可以继承父接口,也可以不继承,是可选的。
4.常量: 接口定义的属性是常量, 即使定义时不添加 public static final 修饰符,系统也会自动加上
5.方法: 接口中的方法只能是抽象方法,总是使用,即使定义时不添加 public abstract 修饰符,系统也会自动加上。 接口中方法不能有方法体
6.使用接口:
a. 一个类可以实现一个或多个接口,实现接口使用 implements 关键字。
Java中一个类只能继承一个父类,不够灵活,通过实现多个接口可以做补充。
b.与匿名内部类配合使用
匿名内部类: 使用类时,不关心类的名字 只在使用时定义,关注于实现
interface i = Interface (){
public void method(){
System.out.println("匿名内部类实现接口的方式");
}
};

7.继承父类实现接口的语法规则:
[ 修饰符 ] class 类名 extends 父类 implements 接口1,接口2...{
类体部分 //如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法
}
如果要继承父类,继承父类必须实现在接口前(extends 在implements 前)
8.命名: 接口名前加 I 以区分 类名,驼峰命名法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值