【原】Java学习笔记014 - 面向对象
package cn.temptation;
public class Sample01 {
public static void main(String[] args) {
// 面向对象思想
// 回顾编程语言思想进化之路:从面向过程到面向对象
// 面向过程
// 举例:
// 1、冰箱门打开
// 2、大象放进去
// 3、冰箱门关上
// 【面向过程的思路的着眼点在于动作的功能,思考打开、放入、关闭均为动作】
// 面向对象:随着软件工程的成熟,人们根据自然的、正常的思考逻辑,从概念模型入手,考虑其特征及行为
// 举例:
// 比如:买手机,首先考虑的是有一个手机的概念模型,其特征(便携性、美观性等)及行为(打电话、发短信、上网等)迎合人们的一些方面的需要
// 再去思考面向过程的放大象的这个例子
// 为什么我们会想到打开冰箱门?因为冰箱在我们的头脑中已经形成了一个概念模型,我们知道它有一个特征(门),并且还有其行为(可以打开和关闭)
// 为什么我们会想到大象可以放入冰箱中?因为冰箱给我们另一个特征(是一个大容器,换句话说就是其有容量)
// 所以,我们人类的思考点还是自然而然的聚焦到概念模型上
// 【面向对象的思路的着眼点在于概念模型的特征及行为】
// 对象:大千世界中的万物都是对象
// 关注对象,主要关注对象的两个方面:特征 和 行为
// 举例:在淘宝上买衣服,关注衣服的外形、颜色、价格等等(特征),还要关注衣服的行为(是不是穿上衣服大家点赞等)
// 面向对象的思考中,不但要考虑单个对象的特征和行为,而且要考虑对象和对象之间的关联关系
// 举例:买一个手机,关注这个手机的各种参数(特征),还有手机的功能(打电话、上网等)(行为)
// 除此之外,手机能使用,还得需要手机卡,手机卡是另一个对象,手机和手机卡之间有关联关系的(比如:只支持电信的手机就不能使用移动的卡)
// 对象的特征:表征对象特点的描述,在Java中称为属性
// 对象的行为:表征对象实现功能的途径,在Java中称为方法
// 类:(成语:物以类聚)
// 定义:在面向对象思想中,类是具有相同的属性 和 行为 的一系列物体的集合,具有抽象意味
// 举例:学生类
// 属性:学号、年龄、性别、姓名...
// 行为:读书、考试、吃饭、睡觉...
// 对象:
// 定义:是类的具体表现形式,具体化的、实实在在的物体
// 举例:张三 是个 学生(对象),他 是学生类的具体化的产物
}
}
package cn.temptation;
public class Sample02 {
public static void main(String[] args) {
/*
* 类的形式
*
* 修饰符 class 类名 {
* 成员变量;
* 成员方法;
* }
*
* 成员变量用来记录属性(特征)
* 成员方法用来记录行为(动作)
*
* 仅仅有一个类,只是有了一个模板,要具体的使用,还需要有对象
* 依据类这个模板创建具体对象实例的方式或者过程,称为类的实例化,也就是说类的实例化得到的是具体的对象
*
* 类 是 什么类型的? 类类型 是 一种类型,也是一种引用数据类型
* 引用数据类型的存储特点:声明在栈上,具体的内容通过new关键字存储在堆中开辟的空间里
*
* 类的实例化的格式:
* 类名 对象名 = new 类名();
*
* 如何来使用类这个模板中定义了的成员变量 和 成员方法?
* 借助于 点号运算符 .
* 使用成员变量 对象名.成员变量
* 使用成员方法 对象名.成员方法
*/
// 类的实例化,得到一个具体的对象
Student student = new Student();
System.out.println(student); // cn.temptation.Student@15db9742
// 基本数据类型(值类型)的默认值
// byte、short、int、long:0
// float、double:0.0
// char:'\u0000'
// boolean:false
// 引用数据类型的默认值:null
// 成员变量的使用(取值)
System.out.println(student.studentNumber); //
System.out.println(student.studentName); // null
System.out.println(student.age); //
System.out.println(student.gender); // null
// 针对成员变量的赋值
student.studentNumber = 7;
student.studentName = "张三";
student.age = 18;
student.gender = "男";
// 成员变量的使用(取值)
System.out.println(student.studentNumber); //
System.out.println(student.studentName); // 钱博文
System.out.println(student.age); //
System.out.println(student.gender); // 男
// 成员方法的使用
student.study();
student.eat();
student.say("我是钱博文,我喂自己袋盐!");
}
}
// 类的定义:创建一个学生类
class Student {
// 成员变量
// 学号
int studentNumber;
// 姓名
String studentName;
// 年龄
int age;
// 性别
String gender;
// 成员方法
// 学习方法
public void study() {
System.out.println("书中自有颜如玉!");
}
// 吃饭方法
public void eat() {
System.out.println("民以食为天!");
}
// 说话方法
public void say(String word) {
System.out.println("说:" + word);
}
}
package cn.temptation;
public class Sample03 {
public static void main(String[] args) {
// 类的实例化
// 类作为模板,自然可以创建出多个该类类型的对象
Dog dog1 = new Dog();
System.out.println(dog1); // cn.temptation.Dog@15db9742
Dog dog2 = new Dog();
System.out.println(dog2); // cn.temptation.Dog@6d06d69c
// new关键字使用一次,就在内存的堆中开辟一块空间
}
}
// 定义狗类
class Dog {
// 成员变量
int id;
String name;
int age;
// 成员方法
}
package cn.temptation;
public class Sample04 {
public static void main(String[] args) {
// 需求:创建一个手机类,其特征为品牌(brand)、价格(price)、颜色(color);其行为有打电话、发短信
// 类的实例化
Phone phone = new Phone();
phone.brand = "HUAWEI";
phone.price = 1000;
phone.color = "黑色";
System.out.println("手机的品牌为:" + phone.brand + ",价格为:" + phone.price + ",颜色为:" + phone.color);
phone.call("110");
phone.sendMsg("120", "快回来吃饭!!");
}
}
// 定义手机类
class Phone {
// 成员变量
// 品牌
String brand;
// 价格
int price;
// 颜色
String color;
// 成员方法
// 打电话
public void call(String number) {
System.out.println("打电话给:" + number);
}
// 发短信
public void sendMsg(String number, String msg) {
System.out.println("发短信给:" + number + ",内容为:" + msg);
}
}
package cn.temptation;
public class Sample05 {
public static void main(String[] args) {
// 成员变量 和 局部变量
Test test = new Test();
// System.out.println("成员变量i:" + test.i);
// 对于只声明不赋值的成员变量,使用时使用的是它的默认值
// test.show1();
test.show2(4);
test.show3();
}
}
// 定义一个测试类
class Test {
// 成员变量
// int i; // 成员变量只做声明不做赋值,语法上OK
int i = 2; // 成员变量声明时同时进行赋值,语法上OK
// 在成员变量中也声明并赋值一个变量j
int j = 3;
// 成员方法
public void show1() {
// System.out.println(i); // 在成员方法中访问成员变量i,是可以访问的
// 语法错误:j cannot be resolved to a variable 不声明就直接使用变量j,是无法使用的
// System.out.println(j);
// 在方法中声明并赋值了变量j,这里的j是什么变量? 答:局部变量
int j = 5;
// 语法错误:The local variable j may not have been initialized 只声明不赋值,提示未初始化
// int j;
System.out.println("方法内的变量j:" + j);
}
public void show2(int j) {
System.out.println("方法内的变量j:" + j); // 变量j写在方法的形参位置,它既是形参,也是局部变量
// 局部变量的作用域(作用范围)就是从其变量声明的地方开始,到其所在方法的右侧大括号结束
}
public void show3() {
// 当前方法中没有该变量名的局部变量的声明,同时又没有该变量名的成员变量的声明,直接使用该变量名,有语法错误
// 语法错误:j cannot be resolved to a variable 不声明就直接使用变量j,是无法使用的
// 当前方法中没有该变量名的局部变量的声明,同时有该变量名的成员变量的声明,直接使用该变量名,没有语法错误
System.out.println(j);
// 这里直接使用了作为成员变量j的值,也就是说在方法中,如果没有同名的局部变量j,使用变量j时,就会到成员变量中找是否有j
// 疑问:
// 1、show3方法中没有定义j变量,为何没有去上面的方法show1 和 show2中去找?
// 答:从局部变量的作用域来看,局部变量只能在其所在方法中使用的,超出了这个范围就无法使用了
// 2、Test类中有成员变量j,show1方法 和 show2方法中又有局部变量j,调用方法时,为何显示的还是局部变量j的值?
// 答:变量的调用原则:就近原则
}
}
/*
* 成员变量 和 局部变量的区别:
* 1、代码位置上的区别:
* A、局部变量:在方法中或是在方法的形参中定义的
* B、成员变量:在类中且在方法外定义的
*
* 2、内存中位置的区别:
* A、局部变量:存储在栈上(方法调用时,会将方法压入栈中;方法调用结束后,会将方法从栈中弹出)
* B、成员变量:存储在堆中
*
* 3、生命周期上的区别:
* A、局部变量:跟着方法来的,方法被调用,方法被压入栈中,局部变量产生了;方法调用结束后,方法从栈中弹出,局部变量也就销毁了
* B、成员变量:随着对象的创建而创建,随着对象的消亡而消亡
*
* 4、初始值上的区别:
* A、局部变量:需要被初始化才可以使用,换句话说就是没有默认值
* B、成员变量:有默认值,可以不用初始化就拿着默认值使用
*/
【原】Java学习笔记014 - 面向对象的更多相关文章
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- Java 学习笔记(4)——面向对象
现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...
- 【原】Java学习笔记019 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 仔细想一想,Ani ...
- 【原】Java学习笔记016 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // this 关键字 ...
- 【原】Java学习笔记020 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 成员方法的参数列表 ...
- 【原】Java学习笔记018 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 继承关系的子类可以 ...
- 【原】Java学习笔记017 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 继承关系中的pri ...
- 【原】Java学习笔记015 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 传递 值类型参数 ...
随机推荐
- 雷达无线电系列(一)几种常见的幅度分布函数(matlab)
文件下载地址: https://github.com/mufasa007/myblog/tree/master/%E9%9B%B7%E8%BE%BE%E6%97%A0%E7%BA%BF%E7%94%B ...
- 8.Django缓存和信号
缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将某个views的返回值保存至内存或者memcache中, ...
- 初探React与D3的结合-或许是visualization的新突破?
自诞生之初截止目前(2016年初),React可以说是前端界最流行的话题,如果你还不知道React是何物,你就该需要充充电了. d3是由纽约时报工程师开源的一个绘制基于svg的数据可视化工具,是近几年 ...
- c 编译器大全
c 编译器大全 看了下nginx的auto/cc下的目录,nginx对多种c语言的编辑器都进行了支持.才知道c语言有那么多编辑器. 编译器原理 所谓编译器,就是执行下面的三步骤: 1 将目标语言转换为 ...
- 在ASP.NET Core中获取客户端IP地址
随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址.WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求. var ip = HttpContext.Current. ...
- Solr 01 - 什么是Solr + Solr安装包目录结构说明
目录 1 Solr概述 1.1 Solr是什么 1.2 Solr与Lucene的区别 2 Solr文件说明 2.1 Solr的目录结构 2.2 其他常用概念说明 2.3 创建基础文件目录 2.4 so ...
- 用Javascript方式实现LeetCode中的算法(更新中)
前一段时间抽空去参加面试,面试官一开始让我做一道题,他看完之后,让我回答一下这个题的时间复杂度并优化一下,当时的我虽然明白什么是时间复杂度,但不知道是怎么计算的,一开局出师不利,然后没然后了,有一次我 ...
- EF架构~migration对mysql数据库的迁移
回到目录 ef这个orm工具确实强大,无论在实体建模还是在实体关系上,都发挥的很出色,而最近的code first针对数据库变更的使用更让我眼前一亮,先不说对sqlserver的支持,因为mssql本 ...
- SpringCloud Ribbon的分析
Spring Cloud Ribbon主要用于客户端的负载均衡.最基本的用法便是使用RestTemplate进行动态的负载均衡.我们只需要加入如下的配置便能完成客户端的负载均衡. @Configura ...
- 前端笔记之HTML5&CSS3(中)选择器&伪类伪元素&CSS3效果&渐变背景&过渡
一.CSS3选择器 CSS3是CSS的第三代版本,新增了很多功能,例如:强大的选择器.盒模型.圆角.渐变.动画.2D/3D转换.文字特效等. CSS3和HTML5没有任何关系!HTML5骨架中,可以用 ...