【Java】步入OOP 面向对象
面向对象编程 OOP Object Oriented Programming
面向过程编程 POP Procedure Oriented Programming
是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。
面向对象的几个重要特性
- 封装 Encaosulation 隐藏具体的实现细节,提供一个可访问的途径
- 继承 Inheritic 提高代码可重用性,抽取事物的共性
- 多态 Polymorphism 具体可实现的实例多样化
- 抽象 Abstract 对类的本身也抽象化了
面向对象程序设计的重点是对类的设计
设计类,就是设计类的成员
类和对象的关系?
什么是类? 类是对一类事物的描述,是概念的定义
理解类,对自然事物的归类,所具有的共性,就可归为一类
例如,人,猫,狗,就是对这些实际存在的动物进行归类,这只是笼统的描述,不是具体的实例 instance
就像说吃水果,只是描述,并没有具体指出是什么水果
对象,即描述的具体展现,是实际存在的事物,因此称为实例,
对象由类产生,具有类所描述的一切特性,主要包括特征和行为
特征即是对象的属性,行为即是对象的方法
package cn.dai; public class Person {
// 类的主要部分 // 属性 == 字段 == 成员变量 == 域 == field
int age;
String name; // 行为 == 方法 == 成员方法 == 函数 == method == function
public void walk(){
System.out.println("行走,散步");
} public void talk(){
System.out.println("交流,谈吐");
}
}
实例化与调用
package cn.dai; public class Create {
public static void main(String[] args) { // 创建我们定义的类的实例 // 类名 引用名 引用指向 类实例
Person person = new Person(); // 引用可以访问我们的属性 .引用
person.name = "张三"; person.age = 22; // 还可以是我们的方法
person.talk();
person.walk();
}
}
1 创建类,设计类成员
2 创建类的实例
3 调用实例的属性或者方法
类的多个对象的关系
- 每个创建出来的实例,在内存空间都有独立的存储空间 ,new 即代表新的意思
- 所以每个对象的属性和方法,是独立存在,而不是公用的
- 修改对象A的属性不会影响对象B的属性
关于new 关键字的解释:
https://blog.csdn.net/yanyuan904/article/details/80022647
https://blog.csdn.net/topdeveloperr/article/details/81194654
- 为对象开辟内存空间。
- 调用类的构造方法。
- 将生成的对象的地址返回。
属性与局部变量
成员变量和局部变量的区别?
https://www.cnblogs.com/huangminwen/p/5935130.html
- 属性定义在类体当中
- 属性可以只声明不初始化赋值,当实例创建时,赋值为默认缺省值
- 属性的作用域可以在类中的所有成员方法中
- 局部变量 只声明在方法中
- 局部变量 声明必须要在方法中赋值
- 局部变量的作用域只作用在这个方法之内
- 属性加载在堆空间中,而局部变量加载在栈空间
访问权限的设置
- private 修饰的方法和属性或者内部类 只能作用在本类之内,外部无法访问
- default 默认不写的,允许在同一个包下访问
- protected 所继承的子类可以访问,子类可以不同包
- public 可以被任意访问
访问修饰级别的解释
https://blog.csdn.net/qq_41174684/article/details/90677921
方法/函数的用法
https://www.cnblogs.com/lavender-li/p/5681790.html
- 状态修饰 访问修饰
- 返回类型
- 方法名称
- 参数列表
- 返回值
- return 表示方法的结束,在方法体return之后写下的代码都不再执行,第二时携带返回值,要注意的是 return 不能声明执行语句
- 方法可以递归,但不能在方法中声明方法
package cn.dai; public class Person { // [状态类型][访问级别] 返回类型 方法名称(参数列表) { 方法体 }
public int summation(int ...args){ // 参数列表,可以是一个或者多个参数,没有类型限制,参数就是要执行方法前必需注入的数据,这里采用了一个可变参数 // 具体执行实现的细节 也就是方法体
int sum = 0;
for (int param : args){
sum += param;
}
return sum; // 方法的返回值,定义的int返回类型,所以值也必须是int类型的值,void 表示空,所以可不写return
}
}
递归算法
https://blog.csdn.net/f5465245/article/details/77946468
构造方法 / 构造器 Constructor
https://blog.csdn.net/qiuzhongweiwei/article/details/78965788
https://blog.csdn.net/zqixiao_09/article/details/50550035
构造重载 在初始化的同时注入参数
对象 / 实例 instance 的内存解析
匿名对象的介绍
https://blog.csdn.net/lxxiang1/article/details/82085271
- 匿名对象没有声明引用指向
- 匿名对象可以调用属性和方法
- 因为没有引用指向,在不是建造者模式的情况下,只能调用一次方法或者属性;
重载 Overload
https://www.cnblogs.com/xdp-gacl/p/3637321.html
- 在本类中允许一个以上的同名方法 但是此参数的个数和参数的类型不能相同
- 重载允许不同的返回类型和权限访问
可变参数 Variable Number Of Arguments
https://blog.csdn.net/lxxiang1/article/details/82312799
- 可变参数的本质是一个Object数组
- 可变指的是这个参数的个数可变
- 要注入多个参数,可变参数必须放在参数列表的最后一个
- 单个参数和同类型可变参数符合重载的规定
- 最多只允许声明一个可变参数
实参的值传递机制
- 当形参是基本类型时,是注入实参的数据值传递给形参【给的字面值】
- 当形参是引用类型时,是注入实参的地址值传递给形参【给的内存地址】
final关键字的解释:
- 可修饰类、方法、属性、
- 修饰类 被修饰的类不能被洽谈类所继承
- 修饰方法 被修饰的方法不能被重写
- 修饰变量
被修饰的属性,有且只有一次赋值的机会 可以 1 显示初始化声明、2 代码块中初始化赋值、3 构造器中初始化
被修饰的局部变量 表示是一个常量
- static final 表示为全局常量
https://www.cnblogs.com/dolphin0520/p/3736238.html
static关键字的解释:
- 表示静态的,常态的
- 用来修饰 属性、方法、代码块、内部类
- 类创建的实例共享静态变量
- 静态变量随类的加载而加载
- 静态修饰的类成员优先实例加载,类只会加载一次,静态成员再内存中只存在一个,再方法区的静态域中
- 所以静态的,也可以称为是类的
- 静态方法 只能调用静态属性和静态方法
- 成员方法,静态非静态皆可
- 不能使用this,super
https://www.cnblogs.com/dolphin0520/p/10651845.html
静态代码块与非静态代码块
- 都是用来初始化类或者对象
- 静态的代码块,随着类加载而加载,可以设置加载信息,优先非静态代码块加载
- 非静态代码块,随着对象加载而加载,可以对属性注入
- 代码块按照编写顺序执行,不论是否静态
属性注入的位置;
- 声明即赋值 显示初始化
- 默认缺省
- 构造器注入
- setter注入
- 对象访问属性赋值
最新文章
- MongoDB学习笔记~批量插入方法的实现
- 关于反射率(reflectance)
- Office OneNote 自动打开问题
- spring的事务操作
- 搭建 Windows Server 2012 FTP 服务器
- C语言范例学习02
- CNAPS Code 查询(招商银行)
- 关于JAVA那点事---i++和++i
- WIN7 64位系统安装JDK并配置环境变量
- struts2_20140720
- HttpClient-传入url得到json字符串( PostMethod method = new PostMethod(url)是个好方法)
- jdk1.8源码Synchronized及其实现原理
- ubuntu 12.04 上网体验
- 简单又好用的聊天室技术——WebSocket
- 接雨水12 · Trapping Rain Water12
- 【EF】EF Code First Migrations数据库迁移
- 两个线程与stringbuffer和stringbuiler以及lock synchronized线程测试
- IDEA设置与快捷键记录
- Go语言的切片slice基本操作
- Effective C++:条款22:将成员变量声明为private
热门文章
- CSS实现垂直居中布局
- [最短路,floyd] Codeforces 1202B You Are Given a Decimal String...
- Mybatis详解系列(一)--持久层框架解决了什么及如何使用Mybatis
- Python第五章-内置数据结构01-字符串
- OpenCV-Python 霍夫圈变换 | 三十三
- 1+1>2:MIT&IBM提出结合符号主义和连接主义的高效、准确新模型
- 面试指南」JS 模块化、组件化、工程化相关的 15 道面试题
- Python基础 | pandas中dataframe的整合与形变(merge &; reshape)
- cut-trailing-bytes:二进制尾部去0小工具
- 基于 HTML5 WebGL 的楼宇智能化集成系统(一)