CoreJava学习第五课 --- 进入第二阶段:面向对象编程思想
面向对象编程思想
1.面向过程
从计算机执行角度出发 ,代码执行过程核心为从程序的运行过程出发,构建编程思路,例: 哥德巴赫猜想
// 面向过程1 用户输入一个数n2 验证数字的正确性2.1 正确就继续向下2.2 错误就重复输入3 拆数 循环 n=a+b4.判断 a和b同为质数 则打印
2.1对象
计算机中的需求来自现实世界,现实世界是由对象组成。
对象:万物皆对象!
对象有属性和方法:
a.属性: 对象有什么b.方法: 对象能做什么
2.2 对象间的关系:
1. 继承关系 is a (一般--特殊 从属关系)例:宝马汽车是汽车2. 关联关系 has a (对象的属性又可以是另一个对象)例:汽车有发动机3. 依赖关系 use a (一个对象调用另外一个对象的方法)例:司机和汽车
3.面向对象思想
先找到解决问题所需要的对象,再建立对象间的关系, 以及利用对象所形成的过程.
4.计算机如何处理现实中的对象
计算机中的对象: 在计算机中,用一块特定的存储空间表示生活中的对象 计算机中的对象之间可以形成生活中对象之间的关系 (继承 关联 依赖)
5.类的概念
类是数据类型,对象是数据
类: 对象共性的抽象, 是人对对象的认识, 是对象的模板
6.类的属性(成员变量)【重点】
属性: 是成员变量
1.有默认值 数字类型默认值为0 ,boolean类型为false ,字符串类型为null
2.作用范围: 全类内部
3.成员变量可以和局部变量同名,同名时局部变量优先
成员变量和局部变量在内存中不一样?
7.类的方法
java中没有函数的概念,函数是面向过程开发中的东西,在java中只有方法的概念。声明(5个部分组成): 修饰符(顺序无关紧要) 返回值类型 方法名 (形式参数表) 抛出的异常--->声明代表对象具有什么功能 实现: {} 代表对象怎么做
8.方法重载【重要】
方法重载 : 让对象方法由于参数表的不同所造成的差异,对用户屏蔽由编译器根据实参来匹配相应的方法 (编译时多态)方法重载: 方法名相同,参数表不同. 对返回值不做要求
参数表不同: 参数个数不同,参数类型不同,参数类型排列不同 (如果只有形参名不同,不算重载)
9.构造方法
注:如果一个类中没有定义任何构造方法,则系统提供默认公开无参构造方法
构造方法: 特殊的方法
构造方法特点:
1.没有返回值类型 区分构造方法和普通方法的唯一标志
2.方法名必须和类名相同
3.不允许直接调用, 在对象构造的过程中自动调用一次对象构造的三个步骤:(没有继承的情况)
1. 分配空间 属性被赋予默认值 ----> 根据对象的属性分配空间,不同对象所占的空间大小不同。
2. 初始化属性 属性被赋予初始值
3. 调用构造方法 属性通常被再次赋值
class Student{//1. 分配空间 属性被赋予默认值:name被赋值为null,age被赋值为0,score被赋值为0.0String name;int age = 10;//2. 初始化属性 属性被赋予初始值:age被赋值为10double score;public Student(){age = 20;//3. 调用构造方法 属性通常被再次赋值}public Student(String n , int a , double s){name = n;age = a;score = s;}
}
10.new 创建对象
a.创建对象: 类名 引用名 = new 类名(构造参数)
b.访问对象的属性或调用对象的方法:
引用名.属性
引用名.方法()
c.引用中存储对象的地址。 null表示空指针, 引用没有指向任何对象
11.Java中变量的数据类型
Java中的变量按照数据类型划分,分为两种
1.基本变量类型 : 存数值
2.引用类型(除了 8 种基本类型之外) : 存对象的地址
12.方法参数传递
参数传递: 基本类型参数传值, 对象类型参数传地址 (形参和实参指向同一对象)
//基本类型参数传值
public class TestReference{public static void main(String[] args){int a = 10;int b = a; b++;//b的值变成11System.out.println(a); //10changeInt(a);System.out.println(a); //10 } static void changeInt(int a){a++;//changeInt()方法中的a变成11,但是没有返回给方法调用处,并没把方法返回值赋值给原来的a}
}
//对象类型参数传地址
public class TestReference{public static void main(String[] args){MyClass mc = new MyClass();MyClass mc2 = mc;//mc是一个引用,这句代码把mc的引用复制给mc2,意思是mc和mc2指向的是同一个对象mc2.value++;System.out.println(mc.value); //21MyClass mc = new MyClass();/*首先,在主方法中,调用了 changeValue()方法,并且把 mc 作为实参,传递给形参 mc。要注意的是,由于 mc 是一个引用,保存的是一个对象的地址,因此进行传递时,传递给 mc的值就是一个对象的地址。这样,实参 mc 引用和形参 mc 引用中保存的内存地址相同,也就是说,这两个引用指向同一个对象。 */changeValue(mc);System.out.println(mc.value); //21} static void changeValue(MyClass mc){mc.value++;}
}
class MyClass{int value = 20;
}
13.this关键字
作用:
引用 表示当前对象, 在类中访问自己的属性和方法时,如果不加引用,引用默认为 this.用this可以区分成员变量和局部变量
class Student{String name;int age;public Student() { }public Student(String name, int age) {this.name = name;this.age = age;} }
this(...) 用在构造方法中, 调用本类其他的构造方法 用于构造方法之间相互调用 必须是构造方法的第一条语句
class MyClass{int value;public MyClass(){this(10);System.out.println("MyClass()");}public MyClass(int value){this(); //对 this()的调用必须是构造方法的第一个语句this.value = value; //对 this.的调用位置没有限制}
}
转载于:https://www.cnblogs.com/chenpeisong/p/9775219.html
CoreJava学习第五课 --- 进入第二阶段:面向对象编程思想相关推荐
- 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...
视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...
- Emojify - v2 吴恩达老师深度学习第五课第二周编程作业2
吴恩达老师深度学习第五课第二周编程作业2,包含答案! Emojify! Welcome to the second assignment of Week 2. You are going to use ...
- Java学习记录五(多线程、网络编程、Lambda表达式和接口组成更新)
Java学习记录五(多线程.网络编程.Lambda表达式和接口组成更新) Java 25.多线程 25.1实现多线程 25.1.1进程 25.1.2线程 25.1.3多线程的实现 25.1.4设置和获 ...
- Java学习——面向对象编程思想
目录 一. 基本概念 二. 面向对象与面向过程的区别 三. 面向对象程序设计的类与对象 3.1 对象 3.2 类 四. 面向对象的四大特征 4.1 抽象 4.2 继承 4.3 封装 4.4 多态 1) ...
- 基于STM32F103移植华为LiteOS_任务挂起与恢复_面向对象编程思想之按键状态机
华为LiteOS_任务挂起与恢复_面向对象编程思想之按键状态机 因为在做华为LiteOS任务挂起和恢复需要使用到按键去触发任务挂起和恢复动作,因为我就萌发出使用状态机这种架构做一个按键检测触发.回想已 ...
- 面向对象编程思想及入门知识
这几天在调程序,所以想写写自己对"面向对象编程"的一些理解,希望对打算入门计算机编程的同志们有所帮助.之前,好几个师弟问过我,C++与C有什么区别,学习面向对象语言需要掌握哪些基础 ...
- C++面向对象编程思想
1.概述: 面向对象编程思想是很早就提出来早在1967年的时候,在挪威计算中心的Kisten Nygaard和Ole Johan Dahl开发了Simula67语言,它提供了比子程序更高一级的抽象和封 ...
- 我们程序员眼中的对象-看完华华的文章妈妈再也不担心我找不到对象了-Java面向对象编程思想理解系列(1)
大家好!!!我叫霜华,是一个帅到没天理 骚里骚气,热爱人生与绿色 是一个不像程序员的程序员 作为一个在java这门领域沉迷一年半的人,如今在技术栈广度和深度 还是业务能力在客观层面讲确实进步迅速 (可 ...
- 面向对象编程思想概览(一)类和对象
一.简介 生活中有许多技巧值得我们在程序设计中模仿和借鉴.采用类的思想可以方便地把具有相同属性和方法归为一类,从而简化编程.本讲利用生活的常见示例,浅显通俗的语言,生动地介绍了面向对象编程中类与对象的 ...
最新文章
- Boost::asio io_service 实现分析
- 软件测试中过度设计的那些事儿
- 福州大学数学专业matlab教材,福州大学MATLAB基础实验指导书
- python【蓝桥杯vip练习题库】ADV-104打水问题
- Sublime Text(2/3)编译lua
- 岗位推荐 | 京东AI研究院招聘计算机视觉算法实习生
- Android 精品资源(一) 2018年3月23日 星期五
- 认识伪类元素:before和:after
- pytorch-多GPU训练(单机多卡、多机多卡)
- 推荐:PHPCMS v9 安全防范教程!
- python3 redis长链接超时_Python3 连接Redis字符串和字节问题探究
- centos 7的systemctl
- 流媒体开发之-音悦台TV解析特定条件下的所有TV视频
- 好好编程-物流项目03【GitHub管理】
- 智能家居,在互联中看见全屋智能
- 【科创人】DCloud崔红保:uni-app和HBuilder背后的男人,让天下没有难做的开发
- 简述基于CPU的机器码运行过程
- linux远程win7无法连接wifi,苹果电脑win7系统连不上wifi热点深度纯净
- csdn格式字体、样式、排版
- 数字视频处理(五)——频率域陷波滤波
热门文章
- LinuxC高级编程——线程间同步
- html5+css3第一次作业_“台风爷爷,让我作业飞走!”南京小学生写的诗都这么逆天了?...
- qscrollarea 设置滚动位置_爱剪辑:影视剧滚动字幕片尾,效果竟然如此高端精美...
- LeetCode 2181. 合并零之间的节点(链表)
- LeetCode 2129. 将标题首字母大写
- LeetCode 758. 字符串中的加粗单词(Trie树)
- LeetCode 461. 汉明距离(异或^ 与)
- POJ 2287 田忌赛马(贪心)
- python为什么是蟒蛇_Python 为什么推荐蛇形命名法?
- vue路由切换组件没有加载_Vue面试题: 如何实现路由懒加载?