本文知识点(目录):

1.1、万物皆对象
    1.2、面向对象的概述
    1.3、面向对象(java语言)与面向过程(C语言)对比
    1.4、面向过程
    1.5、对象
    1.6、面向对象的特征
    1.7、使用java来描述事物
    1.8、对象的创建
    1.9、对象成员的调用
    1.10、局部变量和成员变量
    1.11、内存分析
    1.12、匿名对象



1.1 万物皆对象

我们是怎么认识世界的?

人类从小就不断的接触到各种各类存在世界上的各种生物,然后通过事物的公共特性,将它们归类,所以以后就不会出现见到猫叫老虎。那么我们在现实生活中,是通过具体的某个事物归纳总结它们的公共特性然后产生类那么类就描述了该种事物的的共别。性,相当于造事物的图纸,我们可以根据这个图纸去做出具体的实体对象。

对象:在现实生活中存在具体的一个事物。;

类:实际就是对某种类型事物的共性属性与行为的抽取。

人类认识世界: 对象----à类。

在java中:    类 -----à对象。

使用计算机语言就是不断的在描述现实生活中的事物。

java中描述事物通过类的形式体现,类是具体事物的抽象,概念上的定义。

对象即是该类事物实实在在存在的个体。

类与对象的关系如图

可以理解为:

类就是图纸

汽车就是堆内存中的对象

1.2 面向对象的概述

“面向对象”(英语:Object Oriented,简称OO)是一种以事物为中心的编程思想。

面向对象程序设计(英语:Object-oriented programming,缩写:OOP),是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

面向对象时相对于面向过程而已的(c则是一个典型的面向过程的语言),站在面向对象的角度去看问题,你则是对象的动作的指挥者。如果站在面向过程的角度去看问题,你则是动作的执行者。

1.3 面向对象(java语言)与面向过程(C语言)对比

“万物皆对象”。
   1:买电脑
    1:面向过程
        1:查资料
      2:电脑城砍价
      3:被黑
      4:痛苦归来
    2:面向对象
      1:找对象。老师
      2:老师.砍价
      3:老师.检测电脑
      4:电脑成功购买
  2:吃饭
    1:面向过程
      1:自己动手做
      2:买菜
      3:洗菜
      4:煮饭炒菜
      5:正在吃饭
    2:面向对象
      1:找专业对象
      2:餐馆.点餐
      3:餐馆,做饭
      4:正在吃饭
    等等............

1.4 面向过程

强调的是功能行为,面向过程”是一种以过程为中心的编程思想。“面向过程”他们不支持丰富的“面向对象”特性(比如继承、多态),就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向过程在这一系列工作的执行中,强调的是工作的执行。

1.5 对象    

对象(object)代表现实世界中可以明确标识的一个实体。例如:一个学生、一张桌子、一间教室,一台电脑都可以看做是一个对象。每个对象都有自己独特的状态标识和行为

对象的属性(attribute,或者状态(state)),学生有姓名和学号,该学生特有的姓名和学号就是该学生(对象)的属性。

对象的行为(behavior),是由方法定义,调用对象的一个方法,其实就是给对象发消息,要求对象完成一个动作。可以定义学生对象具备学习的行为。学生对象可以调用学习的方法,执行学习的动作

1.6 面向对象的特征

封装(encapsulation)

继承(inheritance)

多态(polymorphism)

开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

设计的过程:其实就是在管理和维护对象之间的关系.

1.7 使用java来描述事物

案例:通过Java语言定义一个汽车类,并生产出汽车,有颜色,轮胎个数, 有运行的功能。

分析:

如何描述现实世界中的事物,描述该事物的属性和行为,汽车具有颜色和轮胎数的属性,具备运行的行为。

如何使用Java语言进行转换?

根据对应关系:

属性:类中的成员变量

行为:类中的成员函数

那么定义Java类就是定义一个类的成员。汽车类具备的成员是:颜色,轮胎数,运行方法。

Car类定义流程:

  1. 使用class 关键字 定义类,
    1. class空格 类名。类名就是标识符,命名规则,单词的首字母大写,多个单词的首字母大写。注意:不是规定,但是最好遵守
    2. 类名后紧跟一对{}表示类的开始和结束。
  2. 汽车有轮胎数 int num;
    1. 不需要给num初始化值,因为汽车轮胎数不确定,有4,有6,有8。
  3. 有颜色 String color
    1. 为什么使用String  例如定义颜色"红色"是字符串类型。
    2. 也不需要初始化值。
  4. 跑的行为(方法、函数)     void run(){}
    1. 方法中执行输出语句。syso("跑啦。。。。");
public class Car {

String color;// 成员变量
int num; // 成员变量 // 成员函数
void run() {
System.out.println(color + "的车,轮胎数:" + num + "个,跑起来了");
}
}

1.8 对象的创建

创建Car对象

  1. 使用new关键词,就像new数组一样
  2. 需要给型的汽车起一个名字,car
  3. 变量都是有类型的,car属于什么类型,属于Car类型,叫做类类型
  4. Car car=new Car();

图纸画好了,类定义成功了。如何根据图纸生产汽车,在Java中如何根据类来生产一个对象。

Java中生产汽车比较简单,通过一个关键字”new”, 通过 new  Car(); 就在内存中产生了一个实体,汽车对象就生产出来了。

汽车对象生产出来后,还没有名字,为了方便使用,需要起一个名字。就用小写的C 来表示新车的名字。

Java中的变量都需要有类型。那么c 是什么类型呢?c 是Car类型,所以c也叫做类类型变量。

class CarDemo {
public static void main(String[] args) {
// java 中创建对象,使用new关键字。在堆内存中开辟了空间。产生了一个实体。
Car c = new Car();
//为了方便使用生产的汽车,就起了一个名字。
//那么c是什么类型,是Car类型。叫做类类型变量。
//注意 c是持有的引用,新生产的汽车并没有直接赋值给c,持有的只是一个引用。c就想电视遥控器一样。
c.run(); //使用对象的功能。
}
}

1.9 对象成员的调用

有了car对象,调用对象成员

  1. 成员变量
  2. 成员方法
public class CarDemo {
public static void main(String[] args) {
Car c = new Car(); //创建对象
//对象名.成员变量名将返回成员变量中存储的数值
int num=c.num;
System.out.println(num); //对象名.成员变量名,也可以给成员变量赋值
c.num = 4;
c.color = "black"; //对象名.成员方法(); //调用run()方法
c.run();
} public class Car { String color;// 成员变量
int num; // 成员变量 // 成员函数
void run() {
System.out.println(color + "的车,轮胎数:" + num + "个,跑起来了");
}
}

1.10  局部变量和成员变量

成员变量:  定义在类中变量

局部变量:  定义在方法中变量

成员变量与局部变量的区别:

A.定义位置区别:
  1.成员变量在方法之外,类之内的
  2.局部变量方法之内

B.作用上的区别:
  1.成员变量作用是描述一类公共属性的;
  2.局部变量的作用是提供一个变量给方法内部使用

C.生命周期的区别:
  1.随着对象的创建而存在,随着对象的消失而消失
  2.局部变量在调用对应的方法是执行到创建该变量的语句时,局部变量一旦出了自己的作用域,那么马上从内存中消失

D.初始值
  1.成员变量有默认初始值.
  2.局部变量没有默认初始值,必须先赋初始值才能使用.

void show(int id){
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
System.out.println(id);
}
}
}

这时候  id,i,j者是在方法内声明的,全是局部变量

j当里层for循环执行它的生命周期开始,当里层for结束,j消失

i当外层for循环执行它的生命周期开始,当外层for结束,j消失

id在方法被调用时开始,方法结束时,id消失.

  1. 存储位置  成员变量属于对象,它存储在堆内,堆内的实体,当没有引用指向其时,才垃圾回收清理 局部变量存在栈内存中,当不在使用时,马上就会被释放。
  2. 初始值

成员变量它存储在堆中,如果没有赋初值,它有默认值

  1. 整数byte、short、int、long = 0;
  2. char = '\uoooo';(一个空格)
  3. boolean = flase;
  4. String = null;
  5. 类类型 = null;
  6. 数组 = null;

局部变量,如果要想使用必须手动初始化.

  1. 方法中,参数列表中,语句中。
  2. 必须给初始化值,没有初始值,不能使用
  3. 在栈内存中

1.11 内存分析

案例1:

 //汽车
class Car {
//汽车应该具备的属性
int num;
//汽车具备的颜色
String color;
//汽车跑的行为
public void run(){
System.out.println(num+"轮子的汽车跑起来啦");
}
}
public class CarDemo{ public static void main(String[] args)
{ //创建实体,并且给该实体起一个名字
Car c = new Car();
c.color = "red";
c.num = 4;
c.run();//指挥车进行运行。调用格式:对象.对象成员 }
}

解析: 一创建Car这个对象, 还没给color和num初始化前,他们的默认值分别为 color = NULL, num = 0 ,  string的默认值为NULL, int的默认值为0

案例2:

public static void main(String[] args){   
     //创建实体,并且给该实体起一个名字
Car c = new Car();
Car c1 = new Car();
c.color = "red";
c1.num = 4;
System.out.println(c1.color);
c.run();//指挥车进行运行。调用格式:对象.对象成员 }

解析:可以参考案例1的解析

1.12 匿名对象

1:匿名对象:没有名字的实体,也就是该实体没有对应的变量名引用。(没有引用类型指定的对象)

1.2:匿名对象要注意的事项:
       1.我们一般不给匿名对象赋予属性值, 因为永远都无法获取到值
       2.两个匿名对象用远不可能是同一个对象
 1.3:匿名对象好处: 简化书写.

1.4:匿名对象的用途

  1,当对象对方法进行一次调用的时候,可以使用匿名对象对代码进行简化。

  为什么只对方法,而不调用属性呢?因为匿名对象调用属性没意义。

   如果对象要多成员进行多次调用,必须给对象起个名字。不能在使用匿名对象。

  2,匿名对象可以实际参数进行传递。

2:匿名对象的简单演示

  1:new Car().run();

3:内存结构图

  1:new Car().num=5;

  2:new Car().clor="blue";

  两个new 是两个不同的对象,在堆内存中有不同的空间,相互不相互干扰。

4:匿名对象的使用

  1:当只使用一次时可以使用匿名对象。执行完毕到;后该对象就变成了垃圾。

  new Car().run();

2:执行方法时,可以将匿名对象作为实际参数,传递进去。

案例: 修黑车

1:需求

将小汽车改装成3个轮子的黑车。

1:汽车类。

2:汽车修理厂

 /*
匿名对象
匿名信
修黑车
汽车类
黑车厂类
把汽车的改成黑色3轮车。 */
class Car {
String name = "smart";
String color = "red";
int num = 4; void run() {
System.out.println(name + ":" + color + ":" + num + ":跑起来了。。。。");
} } class BlackCarFactory {
String name;
String addr; Car repairCar(Car c) {
c.num = 3;
c.color = "黑色";
System.out.println("改装成功啦。。。"); }
} class Demo1 { public static void main(String[] args) { BlackCarFactory bcf = new BlackCarFactory();
bcf.name = "幸福修理厂";
bcf.addr = "天河区棠东东路御富科贸园a栋206"; // 非匿名对象
Car c = new Car();
c.run();
// 改装
bcf.repairCar(c);
// 取车
c.run(); // 匿名对象一,只使用一次:
// 如下创建了2个对象
/*
* new Car().run();
*
* new Car().run();
*/ // 匿名对象二,作为实际参数传递
Car c2 = bcf.repairCar(new Car());
c2.run(); System.out.println();
}
}

匿名对象的总结:

1. 匿名对象设置的属性永远无法获取?  没有引用变量指向那个对象。

2. 任何两个匿名对象使用==比较,永远返回false。

3.  匿名对象主要应用于实参。

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:http://www.cnblogs.com/dshore123/p/8691490.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

 
 
 
G
M
T
 
检测语言
世界语
中文简体
中文繁体
丹麦语
乌克兰语
乌兹别克语
乌尔都语
亚美尼亚语
伊博语
俄语
保加利亚语
信德语
修纳语
僧伽罗语
克罗地亚语
冰岛语
加利西亚语
加泰罗尼亚语
匈牙利语
南非祖鲁语
卡纳达语
卢森堡语
印地语
印尼巽他语
印尼爪哇语
印尼语
古吉拉特语
吉尔吉斯语
哈萨克语
土耳其语
塔吉克语
塞尔维亚语
塞索托语
夏威夷语
威尔士语
孟加拉语
宿务语
尼泊尔语
巴斯克语
布尔语(南非荷兰语)
希伯来语
希腊语
库尔德语
弗里西语
德语
意大利语
意第绪语
拉丁语
拉脱维亚语
挪威语
捷克语
斯洛伐克语
斯洛文尼亚语
斯瓦希里语
旁遮普语
日语
普什图语
格鲁吉亚语
毛利语
法语
波兰语
波斯尼亚语
波斯语
泰卢固语
泰米尔语
泰语
海地克里奥尔语
爱尔兰语
爱沙尼亚语
瑞典语
白俄罗斯语
科萨
科西嘉语
立陶宛语
索马里语
约鲁巴语
缅甸语
罗马尼亚语
老挝语
芬兰语
苏格兰盖尔语
苗语
英语
荷兰语
菲律宾语
萨摩亚语
葡萄牙语
蒙古语
西班牙语
豪萨语
越南语
阿塞拜疆语
阿姆哈拉语
阿尔巴尼亚语
阿拉伯语
韩语
马其顿语
马尔加什语
马拉地语
马拉雅拉姆语
马来语
马耳他语
高棉语
齐切瓦语
  世界语
中文简体
中文繁体
丹麦语
乌克兰语
乌兹别克语
乌尔都语
亚美尼亚语
伊博语
俄语
保加利亚语
信德语
修纳语
僧伽罗语
克罗地亚语
冰岛语
加利西亚语
加泰罗尼亚语
匈牙利语
南非祖鲁语
卡纳达语
卢森堡语
印地语
印尼巽他语
印尼爪哇语
印尼语
古吉拉特语
吉尔吉斯语
哈萨克语
土耳其语
塔吉克语
塞尔维亚语
塞索托语
夏威夷语
威尔士语
孟加拉语
宿务语
尼泊尔语
巴斯克语
布尔语(南非荷兰语)
希伯来语
希腊语
库尔德语
弗里西语
德语
意大利语
意第绪语
拉丁语
拉脱维亚语
挪威语
捷克语
斯洛伐克语
斯洛文尼亚语
斯瓦希里语
旁遮普语
日语
普什图语
格鲁吉亚语
毛利语
法语
波兰语
波斯尼亚语
波斯语
泰卢固语
泰米尔语
泰语
海地克里奥尔语
爱尔兰语
爱沙尼亚语
瑞典语
白俄罗斯语
科萨
科西嘉语
立陶宛语
索马里语
约鲁巴语
缅甸语
罗马尼亚语
老挝语
芬兰语
苏格兰盖尔语
苗语
英语
荷兰语
菲律宾语
萨摩亚语
葡萄牙语
蒙古语
西班牙语
豪萨语
越南语
阿塞拜疆语
阿姆哈拉语
阿尔巴尼亚语
阿拉伯语
韩语
马其顿语
马尔加什语
马拉地语
马拉雅拉姆语
马来语
马耳他语
高棉语
齐切瓦语
         
 
 
 
文本转语音功能仅限200个字符
 
  选项 : 历史 : 反馈 : Donate 关闭

java基础6 面向对象的详解的更多相关文章

  1. Java基础-面向接口编程-JDBC详解

    Java基础-面向接口编程-JDBC详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JDBC概念和数据库驱动程序 JDBC(Java Data Base Connectiv ...

  2. java基础(3)--详解String

    java基础(3)--详解String 其实与八大基本数据类型一样,String也是我们日常中使用非常频繁的对象,但知其然更要知其所以然,现在就去阅读源码深入了解一下String类对象,并解决一些我由 ...

  3. Java基础(44):ArrayList使用详解

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:    a.动态的增加和减少元素    b.实现了IColle ...

  4. Java基础13:反射详解

    本节主要介绍Java反射的原理,使用方法以及相关的技术细节,并且介绍了关于Class类,注解等内容. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech ...

  5. 【Java基础】HashMap原理详解

    哈希表(hash table) 也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,本文会对java集合框架中Has ...

  6. Java基础(55):Exception类详解(转)

    Java中的异常 Exception java.lang.Exception类是Java中所有异常的直接或间接父类.即Exception类是所有异常的根类. 比如程序: public class Ex ...

  7. java基础之类与继承 详解

    Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...

  8. Java基础之开关语句详解

    switch 语句是单条件多分支的开关语句,它的一般格式定义如下(其中break语句是可选的): switch(表达式) { case 常量值: 若干个语句 break; case  常量值: 若干个 ...

  9. 【Java基础】While循环详解

    循环结构分两大类,一类是当型,一类是直到型. 当型: 当布尔值表达式条件为True时,反复执行某语句,当布尔表达式的值为False时才停止循环,例如:while 与 for循环. 直到型: 先执行某语 ...

随机推荐

  1. 命令行下django-admin.py参数不起作用的问题解决

    django官方turial中创建本地web站点时,使用如下命令 django-admin.py startproject mysite 说一下我在使用时碰到的几个问题: 1.无法找到django-a ...

  2. oracle获取clob调优

    引用Oracle.DataAccess.dll,,在oracle 安装目录下的D:\oracle\product\10.2.0\db_1\ODP.NET\bin\1.x\Oracle.DataAcce ...

  3. 51nod1238 最小公倍数之和 V3 莫比乌斯函数 杜教筛

    题意:求\(\sum_{i = 1}^{n}\sum_{j = 1}^{n}lcm(i, j)\). 题解:虽然网上很多题解说用mu卡不过去,,,不过试了一下貌似时间还挺充足的,..也许有时间用phi ...

  4. 【POJ1741】Tree(点分治)

    [POJ1741]Tree(点分治) 题面 Vjudge 题目大意: 求树中距离小于\(K\)的点对的数量 题解 完全不觉得点分治了.. 简直\(GG\),更别说动态点分治了... 于是来复习一下. ...

  5. Spring MVC @RequestParam

    案例来说明 @RequestMapping("user/add") public String add(@RequestParam("name") String ...

  6. lightoj 1020 (博弈水题)

    lightoj 1020 A Childhood Game 链接:http://lightoj.com/volume_showproblem.php?problem=1020 题意:一堆石子有 m 个 ...

  7. HBuilder mui登录和访问控制教程--转载

    HBuilder mui登录和访问控制教程 mui中提供了登录的模板页,但是对于登录后各个页面的访问控制,刷新等并没有官方的推荐方案.我在这里简单说一种初级的解决方案吧,肯定有不足指出,欢迎批评指正. ...

  8. [吴恩达机器学习笔记]12支持向量机3SVM大间距分类的数学解释

    12.支持向量机 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 12.3 大间距分类背后的数学原理- Mathematic ...

  9. IDEA调试服务器上部署的程序

    提出问题: 一个程序,部署在自己的电脑上,debug调试,相信大家都会,但是,如果我想debug调试非本地部署的程序怎么办呢.比如测试服务器上部署的程序. 其实这样的需求也是经常有的,比如一个大型的项 ...

  10. tomcat8在centos7.5下配置开机启动

    本文参考这篇文章 一.在/etc/init.d下新建一个文件tomcat,并添加内容如下: #!/bin/sh # chkconfig: 345 99 10 # description: Auto-s ...