`

JAVA基本功<8>_面向对象

 
阅读更多
一.面向对象的特点:
    1,面向对象是一种思想,符合现在人们思考问题的思想。
    2,面向对象思想的出现将复杂问题简单化。
    3,将原来的面向过程的执行者角色转变现在的指挥者。

二. 面向对象与面向过程的区别:
面向对象:强调是具体事物。
面向过程:强调的是动作。
面向对象还基于面向过程。
一句话:在完成具体需求时,先要想到是否有具备实现需求功能的对象。
如果有,直接指挥这个对象,并调用这个对象的所需功能来完成需求。
如果没有,自己创建一个对象并定义好所需的功能,然后在指挥这个对象做事情。这样这个对象就具备了复用性。

比如:排序。自己不需要在定义了,只要找到java中具备排序功能的对象做事情即可。

境界的理解:一切皆对象。

三.  类与对象
       类就是对现实生活中的事物进行的描述。
对象:就是该类事物实实在在存在的个体。

所以我们会先对现实生活中的事物进行类的描述。
然后在通过该类,创建计算机中具体的对象。
然后就可以操作这个计算机中的对象。来完成程序需求。

描述事物,其实就是在描述事物的属性和行为。

通过对类和对象关系的理解。
发现。类其实就是一组对象共性内容的抽象。

对象,就是通过该类new出来的具体的堆内存中的实体。
该实体中存储了具体的属性值。
注意:创建对象,需要用到一个关键字new。
new Car();//创建Car这个类的对象。这个对象也称为实体,也称为实例。
Car c = new Car();//创建一个对象,名称叫c。c是什么?c是指向了一个具体的对象的引用型变量。
//c是什么类型的变量呢?Car类型。Car是个类,所以c变量是一个类类型变量。
记住:类类型变量一定指向对象。

对象有了以后,就可以指挥对象做事情了,因为对象中具备了属性和行为。
怎么指挥呢?通过一个固定的调用格式:对象.对象成员。

c.color = "red";//给c这个车指定一个颜色。
c.num = 4;//给这个车指定一个轮胎数。
c.run();//指挥c这个车进行运行。
       Car c = new Car ( );
          c . color = “blue”;
          c . num = 4;
          c . run( ) ;
注意: 引用类型的变量,系统会默认为其进行初始化,但也可以自己手动为其进行显示初始化。

类与对象的细节。
在生产汽车时,每一个车在生产出来的时候是不具备颜色和轮胎数具体值。
需要对每一个车分别指定具体的数据。
希望的是,生产汽车时,让每一个车都具备同样的颜色 红色,同样的轮胎数,比如4个。

这时可以对类中的属性进行显示初始化。

局部变量和成员变量的区别?
局部变量:
1,定义在方法的参数,方法内的变量,语句中变量都是局部变量。
2,局部变量都存在栈内存中。
3,只要所在的函数被执行,该变量才存在于栈内存中,当该变量所属区域执行结束,该变量消失。
4,局部变量作用的范围是有限的。只在自己所在区域内有效,该区域指的所在的大括号。
成员变量:
1,定义在类中的变量,都是成员变量。
2,成员变量都存在于堆内存的对象中。
3,成员变量需要被对象调用。当对象给垃圾回收时,对象中的变量才消失。
4,成员在整个类中有效。其实准确的说,是在对象中有效。
只要是这个对象调用的方法,都可以访问该对象的属性也就是成员变量。
  小事例:
public class CarDemo {

public static void main(String[] args) {
Car c = new Car();
c.num = 3;
c.run();
}
}
class Car{
int num = 4;//这里就用到了显示初始化。
String color = "white";
void run(){
System.out.println(num +"--------------------"+ color);
}
}
匿名对象:
    就是没有名字的对象。是定义的对象的简化形式。

匿名对象的使用情况:
1,当对对象的方法进行一次调用的时候,可以简写成匿名对象形式。
   匿名对象调用属性没有意义。
   但是如果要对一个对象进行多次属性或者行为的调用。
   必须对对象起个名字。
2,匿名对象可以作为实际参数进行传递.
new Car();//匿名对象。它直接就这样写。
如果它想要调用方法: new Car.run();
method(new Car());//匿名对象可以作为参数进行传递,也是简化形式。
public static void method(Car cc)
{
cc.color = "black";
cc.num = 3;
cc.run();
}//直接作为参数,传入到cc。

四. 基本数据类型与引用数据类型:
     用一个小事例来表示吧:
      Public class CarDemo {
               Public static void main(String[] args) {
                    int num = 4;
                     method(num);
                    System.out.println(“num” + num);
}
            Public static void method(int num){
                       int num = 3;
}
}//打印结果是4。
理由:当一个程序执行时,是从main方法开始的。
      首先,main方法进栈,里面有一个局部变量num,初始化值是4。之后method方法进栈,同时把
参数num传了进去。在method方法中,也有一个局部变量num,它的值是3,于是这个3便覆盖掉了传入到method方法中的那个num。 method方法执行完,就开始了弹栈,method里面的局部变量num随着method的结束,也被释放了,于是method,以及它里面的num—(现在method里面的num的值是3)就消失了。method执行完,返回main方法。现在method已经没了,剩下的只有main里面的num了--(main里面的num还是4,它没有发生改变),所以打印出的num就等于main里的num的值4。

Public class DemoCar {
     int num = 4;//显示初始化//成员变量
      public static void mian(String[] args){
         Car c = new Car();
          c.num = 8;
      method(c);//也可以使用匿名类来表示,method(new Car);
      System.out.println(“num” + c.num);
}
     Public static void method(Car c) {
                c.num = 3;
}
}
首先,main方法进栈,它分配了一小块内存,给了一个叫作c的局部变量。同时在堆内存中,创建了一个实体,这个实体把自己的地址值复制给了栈内存中的c,于是这个c便指向了这个堆内存中的这个实体。由于堆内存中的变量会默认初始化(堆内存对象中的这个变量是成员变量),所以num刚开始的时候默认值是0,之后对这个num进行了显示初始化,现在num的值变成了4,c.num = 8,main里面的局部变量c又把它的值8赋给了num,于是8便覆盖了显示初始化的那个4。现在method方法进栈,传入了一个类类型的变量c进去。因为类类型变量一定指向对象,所以c就把它所指向的地址值,复制给了method的变量c。在method中,num等于3 。于是这个method就把3传给了堆内存的num。也就是说3覆盖了8。Method方法执行结束,里面的变量c消失,同时method这个方法的指向也消失。但是现在还有main里面的c指向堆内存中的实体,所以打印出的num就是3。

五.总结
    今天所学的知识,对以后的编程很重要。我觉得我对于思想也有了些更好的认识,对于对象,我也可以举例子来描述。以前一直不懂执行顺序,今天通过老师的堆栈图,我也知道了先执行什么,再执行什么。面向对象很重要,我应该更好的去掌握。

问题清单:
1. 在需要传入参数的方法中,我不知道什么时候需要传入的是基本类型的参数,什么情况下需要传入的是类类型的参数????
是不是创建了对象,就得传入类类型的变量呢??如Public static void method(Car c)
              传什么参数,得看你自己的需要。这个问题我跟你举个例子吧你好理解点:
             比如说,你要结婚,你是个对象吧。相当于一个类,JAVA的是世界里面都是对象。结婚你得有个结婚对象吧
             比如说一个很帅的男孩吧。他是个对象,是吧。然后你跟他结婚,要把他作为参数传给你吧。你们才能结婚吧。
             这就是类类型的参数。
             基本类型的参数,你要跟你男朋友比身高。他就可以传一个基本类型的参数给你。可以比较。不知道你懂了没,反正传什么参数,看你的需求。类类型的参数也可以叫做复合类型的变量,类里面对象可以有成员变量和成员方法,你都可以传过来。你要用什么,你自己可以拿到到。很灵活现在理解不了,以后面向对象思想成熟了,你就懂了。

2. 创建一个对象,假设: Person p = new Prson( );   为什么这后面要有一对括号?这个括号里面可以写东西吗? 如果可以写,那可以写些什么??

     括号是JAVA的语法规范,这个里面是可以写东西的,什么都不写说明是调用了父类无参的构造函数。要写东西的话,就是带参数的构造函数,重载不知道你懂不懂。方法重载你学了,你就懂了,里面可以写很多参数。当你要给这个对象赋值的时候,直接用它的构造方法。初始化对象。

师傅,昨天我们这网速太慢了,我没法发到邮箱去。只能今天发了。前天的我没总结,都是代码,而且我前天学的很不好。今天想看懂那些代码,之后我再自己敲出来。前天学的数组,我能听懂老师讲的,但是我自己写不出来。可能是缺少练习吧。
那道作业题,老师也是用的if   else if    做的。 Switch不适合做。
这个问题了,智者见智,仁者见仁。我的意思,多练习,多思考,多发散。学起来就灵活了。


附加题:
我看你数组肯定没学好,给你加个题目:
你把冒泡排序,二分排序,快速排序。这三个排序,把原理和代码写出来,把他们的区别总结出来,下次发的时候总结给我。

总结还不错。继续努力把我交给你题目和老师交给你的题目完成好。
分享到:
评论

相关推荐

    历年软考程序员试题及答案

    其中的一道试题: &lt;br&gt;面向对象程序设计以_(1)_为基本的逻辑构件,用_(2)__来描述具有共同特征的一组对象,以_(3)_为共享机制,共享类中的方法和数据。&lt;br&gt;&lt;br&gt;(1) A.模块 B.对象 C.结构 D.类&lt;br&gt;(2) A.类型 B....

    《面向对象程序设计java)》课程整体教学设计.docx

    《面向对象程序设计java)》课程整体教学设计 《面向对象程序设计java)》课程整体教学设计全文共21页,当前为第1页。《面向对象程序设计java)》课程整体教学设计全文共21页,当前为第1页。 《面向对象程序设计(Java)...

    java万年历课程设计

    通过此次课程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。并通过自己动手,自主得学习,对Java这门课程有更深得了解与认识。

    疯狂Java:突破程序员基本功的16课-高清扫描版带书签

    本书把容易被Java程序员所忽视的内容整理成书,介绍了Java的对象、数组的内存分配,介绍了常见集合的实现细节、内存回收的细节、表达式、流程控制、面向对象、异常的“陷阱”,常用的数据结构和算法的实现以及其他...

    JAVA语言挖雷游戏开发

    进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼自己熟练的应用面向对象的思想和设计方法解决实际问题的能力,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,...

    学通Java的24堂课

    第6堂课 面向对象编程 155 第7堂课 字符串处理 189 第2部分 提高篇 第8堂课 类的继承与多态特性 219 第9堂课 其他类特性与异常处理 257 第10堂课 swing编程基础 283 第11堂课 多线程编程 319 第12堂课 事件...

    俄罗斯方块源代码网络对战版

    通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以...

    Java实现贪吃蛇项目

    实际上实现贪吃蛇的代码并不复杂,如果尝试去给出优雅地实现,比如写出具有清晰的类结构,有助于真正提高大家程序设计的基本功。 此外,应该让代码具有良好的扩展性,将来你希望更新你的贪吃蛇应用时,比如: 让...

    JAVA 程设计报告

    通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Eclipse、NetBeans IDE 等开发工具的运用,拓宽常用类库的应用。使我们通过该次的课程设计,把所学课程及相关知识加以融会贯通,...

    突破程序员基本功的16课.part2

    第7课 面向对象的陷阱 7.1 instanceof运算符的陷阱 7.2 构造器的陷阱 7.2.1 构造器之前的void 7.2.2 构造器创建对象吗 7.2.3 无限递归的构造器 7.3 持有当前类的实例 7.4 到底调用哪个重载的方法 7.5 方法...

    JAVA课程设计扑克游戏.doc

    通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、 Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该 教学环节与手段,把所学课程及相关知识加以...

    魔板游戏Java课程设计报告.doc

    这 次课程设计,还有利于加深对Java课程的进一步了解,也可以巩固所学Java语言基本知 识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的 运用,拓宽常用类库的应用。使学生通过该教学...

    基于java的学生信息管理系统设计与实现.doc

    这里主要 介绍本课题为什么选用这两个开发技术: 首先了解一下Java语言特点 Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。具体来说,它具有 如下特性: 简单性、面向对象、分布式、解释型、可靠、...

    贪吃蛇java课程设计--贪吃蛇程序设计.doc

    " "通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握" "JDK、JCreator等开发工具的运用,拓宽常用类库的应用。为了进一步巩固课堂上 " "所学到的知识,深刻把握Java语言的重要概念与其...

    java课程设计五子棋游戏完整版.doc

    通过此次课 程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreato r等开发工具的运用,拓宽常用类库的应用。 2.设计方案论证 2.1设计思路 (1)棋盘界面设计 在对棋盘界面设计方面要考虑...

    java课程设计五子棋游戏完整版(1).doc

    通过此次课 程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreato r等开发工具的运用,拓宽常用类库的应用。 2.设计方案论证 设计思路 (1)棋盘界面设计 在对棋盘界面设计方面要考虑简洁...

    基于Java的即时通讯系统设计与实现【文献综述】.doc

    Java是一种完全面向对象的程序设计语言,它除了数组、布尔和字符三个基本数据类 型外的其它类都是对象,它不再支持全局变量。在Java中,如果不创建新类就无法创建 程序,Java程序在运行时必须先创建一个类的实例,...

    Java课程设计实验报告及全部源码流程图.doc

    加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术 标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设 计的规律与技巧,为进一步学习web应用开发及今后从事...

    java抢红包源码-Java-Interview-Summary:java程序员面试指南,常用面试题汇总解答

    面向对象的特征 封装 继承 多态 final, finally, finalize 的区别 final final 修饰类,表示该类不可以被继承 final 修饰变量,分两种情况,如果修饰的是基本类型变量,那么只能被赋值一次,不能被赋值两次, 如果修饰的是...

Global site tag (gtag.js) - Google Analytics