Java 学习(06)--面向对象
Java 学习(06)--面向对象
1.什么叫面向对象?
面向对象(Object-Oriented,简称 OO)就是一种常见的程序结构设计方法。
面向对象思想的基础是将相关的数据和方法放在一起,组合成一种新的复合数据类型,然后使用新创建的复合数据类型作为项目的基础。
面向对象是一个很抽象的概念,它相对面向过程而言。过程与对象都是一种解决问题的思想。
面向过程:强调的是功能行为 ,一种过程,先干啥,再干啥;
面向对象:将功能封装到对象里,强调的是具备某功能的对象 ;
按照面向对象的思想,可以把任何的东西看做对象!面向对象的三个特征:
封装 (Encapsulation);
继承 (Inheritance);
多态 (Polymorphism)
我的总结:
面向过程:强调的是具体的功能实现;(执行者)
面向对象:强调的是具备功能的对象。(管理者)
2.类和对象
类(class)是 Java 语言的最小编程单位, 也是设计和实现 Java 程序的基础,本部分将深入介绍类的相关知识。
类:类是一组事物共有特征和功能的描述。 类是对于一组事物的总体描述, 是按照面向对象技术进行设计时最小的单位, 也是组成项目的最基本的模块。 类的概念是抽象的, 类似于建筑设计中的图纸, 是对于现实需要代表的具体内容的抽象。 类只包含框架结构, 而不包含具体的数据。所以类代表的是总体,而不代表某个特定的个体。
对象:是该类事物的具体存在,是一个具体的实例。 (对象 )
举例:
学生:类
小明:对象
1.属性 :事物的基本描述(名词)
行为 :事物的功能(动词)
2.Java语言中最基本的单位是类。所以,我们要用类来体现事物
3.成员变量:事物属性(名词)
成员方法:事物行为(动词)
3 .成员变量和局部变量的区别
(1)在类中的位置不同
成员变量:类里面;方法外面
局部变量:方法定义里面;方法声明上
输出: null 0
输出: ls 10
int a int b 是形参,调用时传真实数据(个数、数据类型必须相同)
输出:ls 12
输出:guojing 18
输出:
a 中的数组有一个地址,调用show 方法压栈,里面也有一个 a(与前面不同),重新产生一个栈帧,拷贝前a的地址给 a ,两个a 指向同一个地址,改变后面 a 的值前后都会改变
创建对象方法:
修饰符 返回值类型 方法名(参数列表){
方法体
}
java 中有四个访问修饰符:1.public 2.protected 3.private (私有的,只能在自己类中访问)4.default(默认的)
(2)在内存中的位置不同
成员变量:在堆中;
局部变量:在栈中
(3)生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
(4)初始化值不同
成员变量:有默认值
局部变量:没有默认值,必须定义,赋值,然后才能使用
示例:
public class test2{ public static void main(String[] args){ Test test = new Test(); test.show(); int a = 1; System.out.println(a); test.show1(1); test.show2("hello"); int[] b = new int[]{1,2,3}; test.show3(b); System.out.println(b[0]); } } class Test{ public void show(){ System.out.println("helloworld"); } public void show1(int a){ //int a 为行参 System.out.println(a); a++; } public void show2(String s){ System.out.println(s); } public void show3(int[] b){ for(int i = 0;i < b.length;i++){ System.out.println(b[i]); } b[0] = 10; } }
运行:
a均为 1:test.show1(1)中的1复制一份给a,a++后a变了,但 1 不变
数组 b[0]=1;b[0]=10;b 中的数组有一个地址,调用show 方法压栈,里面也有一个 b(与前面不同),重新产生一个栈帧,拷贝前 b 的地址给 b ,两个 b 指向同一个地址,改变后面前面也会改变。
4.匿名对象 ( 理解 )
(1)没有名字的对象(2)应用场景
A:调用方法,仅仅只调用一次的时候。
b:可以作为实际参数传递。 (3)类作为形式参数的问题 ?(理解)
如果你看到一个方法需要的参数是一个类名, 就应该知道这里实际需要的是一个具
体的对象 ,调用方法时可用匿名对象。
5.封装
(1)定义:隐藏实现细节,对外只暴露方法名,不关心内部实现细节
(2)好处:1:隐藏实现细节,提供公共的访问方式 2.提高代码的复用性 3.提高代码的安全性
(3)设计原则:把不想让外界知道的实现细节给隐藏起来,提供公共的访问方式
private 是封装的一种体现。
私有的意义,可以修饰成员变量和成员方法特点:被 private 修饰的后的成员只能在本类中被访问
示例:
public class phoneDemo{ public static void main(String[] args){ phone phone1= new phone(); phone1.setName("小米"); phone1.setSize(7); phone1.setCost(3200); System.out.println(phone1.getName()); System.out.println(phone1.getSize()); System.out.println(phone1.getCost()); } } class phone{ private String name; private int size; private int cost; public void setName(String n){ name = n; } public void setSize(int s){ size = s; } public void setCost(int c){ cost = c; } public String getName(){ return name; } public int getSize(){ return size; } public int getCost(){ return cost; } }
运行:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何用 Python 可视化《三国》人物与兵器出现频率?(视频教程)
咱们以《三国演义》人名和兵器谱为例,尝试读取不同结构的文本文件,并且对其中的信息进行统计分析和可视化。 入门 如何帮助学生高效入门 Python ,一直是困扰我的问题。 总结经验后,我写下了《如何高效学Python?》一文。 文中按照自律能力,我把学生分成了3个类别。 自律能力最高的,看书就行。文中推荐了我认为最好的 Python 书籍,有中文译本; 自律能力中等的,可以学各种轻量级课程组合。除了我当时推荐的课程平台外,最近我发现 Udemy 上的某些课程,也很不错; 自律能力较低的,可以学一门比较完整的专项课程。我推荐了经典 Python 入门课“Programming for Everybody”。 这篇文章很受欢迎,多个平台上阅读量都数以万计。 可是,有一个统计规律,我写作时,似乎没有考虑到。 直到后来,我收到了多名读者的留言反馈,才恍然大悟。 这个统计规律是: 自律能力,和英文能力,是显著正相关的。 仔细诼磨一下这句话,是不是能品出些滋味来? 如果一个学生自律能力较低,去尝试 “Programming for Everybody”,结果会发现英文听不懂,于是放弃…… 读者的反馈...
- 下一篇
深入理解建造者模式 ——组装复杂的实例
历史文章回顾: 设计模式专栏 深入理解单例模式 深入理解工厂模式 历史优质文章推荐: 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节. 一 建造者模式介绍 1.1 定义 建造者模式(Builder Pattern) 又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。 1.2 为什么要用建...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池