【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;
面向过程与面向对象:
1.面向过程思想的典型栗子是C语言,C语言实现一个程序的流程是:在主函数中一步一步地罗列代码(定义子函数来罗列也是一样的道理),以此来实现我们想要的效果;
2.面向对象思想的典型栗子是Java语言,Java是一种完全面向对象的语言,它实现一个程序的流程是:事先从我们创建的对象中挑选需要的对象,让他们做出各自的行为,以此来实现我们想要的效果;
3.两者的区别:面向过程思想的耦合性强,扩展性差,这样会导致用面向过程写出来的程序相对于面向对象写出来的程序适用范围小很多;但是对于小型项目来说,面向过程的效率可能会更高一些,因为它不需要像面向对象那样,先进行对象的提取,然后再开始编程,面向过程上来就是干,就是整;
类:
1.模板:
class 类名 { 变量;方法;}
2.概念:
类是我们程序员虚构出来的东西,比如说我们要创建车类,我们会将它的属性和行为以代码的方式提炼出来,属性就相当于变量,行为就相当于方法,把两者写到类体里,一个 class 车(车类)就创建好了;
3.使用:
一般我们通过在主方法将类实例化为对象进行使用;
对象:
1.对象创建:
对象是new出来的,eg:Student xiaoMing = new Student( ) ; // 等价于: 引用数据类型 变量名 = new 构造方法( ) ; // ” new Student ( ) “是用学生类创建出来的学生对象 小明;
new 是一个运算符,如上述栗子中 new作用就是:在堆内存中为Student( )构造方法中的每个实例变量分配空间,这些所有的实例变量都可以用一个地址来找到,这个地址就被存到了 s1 中,s1 属于引用数据类型的变量,他的引用数据类型就是Student;
2.类与对象的关系:
类( 实例化 )=对象,对象( 抽象化 )=类 ; 所以说对象其实就是一种特殊的类,它的模板就是类,只不过对象属于现实生活中实际存在的事物,而类是我们虚构的;
实例变量与引用:
1.实例变量其实就是我们在定义类时,对于现实事物进行属性提取,将其表达为变量的形式,这种变量就是实例变量;
2.实例变量格式: 在数据类型前没有 “ static ”修饰的变量都是实例变量;
3.引用好比做 C语言 中的指针变量,它储存了对象内存地址的变量;
如下图:

a 就是 Address(引用数据)类型的变量,其中储存了堆内存中的那个 Address 类型对象的地址;Address 是一个我们定义好的 Address 类的类名,它的类体中定义了三个 String 类型的变量,此时它被实例化为一个对象;所以此时就可以通过“ a . 属性( city/steet/zipcode) ”的方式来访问这三个实例变量中的数据( 北京/ 大兴区/ 121221)了;对于图中的 User(引用数据)类型的变量 u 也是同理,它指向了堆内存中的那个 User 对象;
注意:所有实例变量的访问必须通过” 引用 . “的方式访问;静态变量用” 类名 . “的方式访问,其实也可以用” 引用 . “的方式来访问,但是其实在运行阶段,它还是会被当作” 类名 . “来进行访问,所以没必要用” 引用 . ”的方式来访问静态变量( 程序员的一个好习惯 );
构造方法:
1.构造方法也属于方法的一种,方法分为普通方法与构造方法,每个类体中都必须至少有一个构造方法,如果没有的话,系统会自动提供一个无参的构造方法(缺省构造器)(为所有类体中的实例变量赋默认值);
2.构造方法的作用是为类体中的实例变量赋值,方法体中为空也可以,因为系统会在方法体中自动给实例变量赋默认值(在对象创建时),比如 int 类型的实例变量初始默认值就是0,boolean 类型的初始默认值是 false 等等,这也是为什么“实例变量不进行初始化也不会报错”的原因,因为在调用相应的构造方法时,如果实例变量咱们没有在此构造方法中手动赋值,系统就会赋默认值;
3.格式: public 方法名(有参/无参) { 方法体 }
注意: 访问权限修饰符必须用 public ;不要用 static 修饰方法 ;返回值类型不要写 ;
辅助理解代码:
public class A {
//源文件类名
int a;
String b;
public A() {
//a = 0;
//b = null;
// 方法体为空,系统为所有未赋值的实例变量赋默认值
}
public A(int a,String b){
this.a=a;
this.b=b;
//当然书写一个有参方法,一股脑儿的将所有实例变量赋值也不是必要的,根据程序员自己的需求,利用方法重载来书写多个构造方法,到时候用哪个调用哪个就行,如下代码:
}
public A(int a){
this.a=a;
//b 被系统赋默认值 null
}
public A(String b){
this.b=b;
//a 被系统赋默认值 0
}
}
上方代码还涉及到一个新的知识: “ this ” :
1.“ this ”等价于当前对象,比如说在 A 类中,“ this . ”就等价于“ A . ”;
2.在我看来 this 就一个用途:在类中,书写一个有参构造方法时,我们需要在方法名()的()中书写形参的数据类型以及变量名,而取名当然“ 见名知意 ”最好,所以干脆就为 形参 取 与之对应的实例变量的变量名,那么方法体中又怎样区分名字相同的 实例变量 和 形参 呢?如上方代码 :this . a = 实例变量 a ; a = 形参 a(遵循就近原则)
随笔:
1.引用数据类型:
1).概念:引用数据类型包括 String 类型 和 我们自己手动创建的引用数据类型;Java中所有的 “ 类 “ 都属于引用数据类型;
2).引用数据类型的变量中装的是地址,地址指向堆内存中的对象
2.OOA---面向对象分析;OOD---面向对象设计;OOP面向对象编程;
实现一个软件的过程:分析---设计---编程;
3.静态变量的赋值在类加载时完成,而实例变量在用构建方法创建对象时完成赋值;
由于博主目前还没有将 Java-SE 的知识都学完,所以有些地方可能说的有些片面,若前辈们能够指点一二就更好了 (~ ̄(OO) ̄)ブ
【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;的更多相关文章
- 1.1(java学习笔记) 面向过程与面向对象
面向过程思考时,我们会先思考具体的步骤,第一步走什么,第二步做什么. 比如电脑新建文件夹,第一步:打开电脑 第二步:按下鼠标右键. 第三步:找到新建选项 第四步:点击新建选项下的文件夹 c语言是典型的 ...
- 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法
. 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定 ...
- C++笔记005:用面向过程和面向对象方法求解圆形面积
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 结束了第一个hello world程序后,我们来用面向过程和面向对象两个方法来求解圆的面积这个问题,以能够更清晰的体会面向对象和面向过程. ...
- 【java基础】面向过程~面向对象
相信大家都知道这两个东西,可是大家是如何知道的呢?我们又该如何区分这个东西到底是面向过程还是面向对象的呢? 那,我们首先就要知道什么是面向过程,什么是面向对象: 面向过程"(Procedur ...
- 从面向过程到面向对象再到MVC
/* * * title: 从面向过程到面向对象再到MVC * author: tanghao * date: 2020.9.30 * version: 1.0 * */ 前言 本文档通过一个显示20 ...
- 面向过程 vs 面向对象
从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...
- JS是面向过程、面向对象还是基于对象?面向对象的代码体现
一.问题 javascript是面向对象的,还是面向过程的?基于对象是什么意思? 对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法 ...
- python 面向过程和面向对象比较
面向过程 VS 面向对象 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是:复杂度 ...
- PHP面向过程和面向对象
php程序编写分为面向过程和面向对象.两者在功能实现上没有区别,但是在代码编写上区别很大,面向过程的代码很乱,不易管理,而面向对象把常用的功能封装为一个类,这样代码清楚多了. 下面举个小例子说明一下: ...
随机推荐
- vivo全球商城-营销价格监控方案的探索
一.背景 现在日常官网商城的运营中有一定概率出现以下两个问题: 1)优惠信息未对齐 官网商城促销优惠的类型越来越多,能影响最终用户实付价的优惠就有抢购.满减.优惠券.代金券等.实际业务操作中存在不同促 ...
- jzoj4496-[GDSOI2016]互补约数【莫比乌斯反演】
正题 题目链接:https://gmoj.net/senior/#main/show/4496 题目大意 给出\(n\),定义 \[f(i)=\sum_{d|i}gcd(d,\frac{i}{d}) ...
- Excel备忘录
1. 导入文本文件(.txt) 2. 排序 3. 批量填充空白 选定区域,Ctrl+G,定位,空值. 输入内容,Ctrl+Enter. 4. 清除无法修改的背景色. 5. 身份证号 数字精度为15位, ...
- 10.1 HTTP
1.跨网络的主机间通讯 套接字Socket是进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上不同进程之间通信和数据交换 在建立通信连接的每一端,进程间的传输要有两个标志:IP地址和端口号, ...
- vue常见的三种组件通讯—props,$refs,this.$emit
一.父组件--->子组件 props 1.特点:props是用于父组件向子组件传递数据信息(props是单向绑定的,即只能父组件向子组件传递,不能反向 2.用法:父组件中使用子组件时,绑定要传递 ...
- Winfrom窗体初始化和窗体Load方法前后
运行结果为 [窗体初始化之前!]>[窗体初始化!]>[窗体Load!]
- 几何 三垂模型 及 正方形 及 弦图 及 jio拉jio模型 及 中位线
Q:$AO\bot OB,AO=OB,CO\bot OD,CO=OD,BC\bot EF$ 求证 $E$ 为 $AD$ 中点 A:作如图 $AI\bot IH\bot HD$ $\because AO ...
- 题解 [AGC017C] Snuke and Spells
题目传送门 Description 有 \(n\) 个球排在一起,每个球有颜色 \(a_i\),若当前有 \(k\) 个球,则会将所有 \(a_i=k\) 的球删掉.有 \(m\) 次查询,每次将 \ ...
- 图解java 多线程模式 读书笔记
第1章"Single Threaded Execution模式--能通过这座桥的只有一个人" 该模式可以确保执行处理的线程只能是一个,这样就可以有效防止实例不一致. 第⒉章&quo ...
- javascript-原生-闭包
1.变量的作用域 前提:这里只全部都通过var创建的变量或对象 1.全局变量:函数外创建变量 var x=10; function test(){ alert("全局变量在test函数中&q ...