java学习笔记 --- 面向对象2

一、匿名对象 
  (1)没有名字的对象
  (2)应用场景
      A:调用方法,仅仅只调用一次的时候。

      

class Car
{
    //描述属性。颜色,轮胎数。
    String color;
    int number;
    //描述行为。
    void run()
    {
        System.out.println(color+":"+number);
    }
}
class CarDemo
{
    public static void main(String[] args)
    {
        //采用匿名对象调用方法
        new Car().run();
        new Car().run();
     }
}

    B:可以作为实际参数传递。

    



class Student {
    public void show() {
        System.out.println("我爱学习");
    }
}

class StudentDemo {
    public void method(Student s) {
        s.show();
    }
}

class NoNameDemo {
    public static void main(String[] args) {
        //带名字的调用
        Student s = new Student();
        s.show();
        s.show();
        System.out.println("--------------");

        //匿名对象
        //new Student();
        //匿名对象调用方法
        new Student().show();
        new Student().show(); //这里其实是重新创建了一个新的对象
        System.out.println("--------------");

        //匿名对象作为实际参数传递
        StudentDemo sd = new StudentDemo();
        //Student ss = new Student();
        //sd.method(ss); //这里的s是一个实际参数
        //匿名对象
        sd.method(new Student());

        //在来一个
        new StudentDemo().method(new Student());
     }
}


  

二、基本类型和引用类型作为参数传递的区别

   1、基本类型作为参数传递(main方法中值不变)


class Demo

{

public static void main(String[] args)

{

int x = 4;

show(x);

System.out.println("x="+x);//4

}

public static void show(int x)

{

x = 5;

}

}

 

  说明:

    基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方法中对x变量进行操作,这时只会影响到show中的x。当show方法执行完成,弹栈后,程序又回到main方法执行,main方法中的x值还是原来的值。

2、引用参数作为值传递

  

说明:

  当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)复制了一份传递给了show方法的d引用变量。这时会有两个引用同时指向堆中的同一个对象。当执行show方法中的d.x=6时,会根据d所持有的引用找到堆中的对象,并将其x属性的值改为6,show方法弹栈。由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。

三、封装

  (1)隐藏实现细节,提供公共的访问方式
   (2)好处:
      A:隐藏实现细节,提供公共的访问方式
      B:提高代码的复用性
      C:提高代码的安全性
   (3)设计原则
      把不想让外界知道的实现细节给隐藏起来,提供公共的访问方式
   (4)private是封装的一种体现。
      封装:类,方法,private修饰成员变量

  (5)使用setXXX(),getXXX()对外提供

四、构造方法

  (1)作用:用于对对象的数据进行初始化
  (2)格式:
        A:方法名和类名相同
        B:没有返回值类型,连void都不能有
        C:没有返回值

     修饰符 构造方法名(参数列表){

      }

/*
    构造方法:
        给对象的数据进行初始化

    格式:
        A:方法名与类名相同
        B:没有返回值类型,连void都没有
        C:没有具体的返回值
*/
class Student {
    private String name; //null
    private int age; //0

    public Student() {
        System.out.println("这是构造方法");
    }
}

class ConstructDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
        System.out.println(s); //[email protected]
    }
}

        思考题:构造方法中可不可以有return语句呢?
          可以。而是我们写成这个样子就OK了:return;
          其实,在任何的void类型的方法的最后你都可以写上:return;
   (3)构造方法的注意事项
      A:如果我们没写构造方法,系统将提供一个默认的无参构造方法
      B:如果我们给出了构造方法,系统将不再提供默认构造方法
         如果这个时候,我们要使用无参构造方法,就必须自己给出。
         推荐:永远手动自己给出无参构造方法。

     C:一个类中可以有多个构造函数,多个构造函数是以重载的形式存在的

     D:构造函数中也是有return语句的,用于结束初始化动作。

     E:构造函数是可以被private修饰的,作用:其他程序无法创建该类的对象
   (4)给成员变量赋值的方式
      A:setXxx()
      B:带参构造方法

   (5)一般方法和构造方法的区别    

    构造函数在对象创建时就执行了,而且只执行一次。

    一般函数是在对象创建后,需要使用时才被对象调用,并可以被多次调用。

   思考:

      有了构造函数之后可以对对象的属性进行初始化,那么还需要对应的set和get方法吗?

      需要相应的set和get方法,因为对象在创建之后需要修改和访问相应的属性值时在,这时只能通过set或者get方法来操作。

五、this关键字

    (1)代表当前类的引用对象
        记住:哪个对象调用方法,该方法内部的this就代表那个对象

    (2)调用其他构造函数的语句必须定义在构造函数的第一行,原因是初始化动作要最先执行。

时间: 2024-08-11 05:44:32

java学习笔记 --- 面向对象2的相关文章

java学习笔记 --- 面向对象

一.对象和类 类(class):类是用于描述现实事物的,它将现实事物进行抽象化,模板化描述.将事物的特点(属性)和行为封装在其中.比如小汽车的图纸,图纸就是小汽车的模版.图纸上画着小汽车的各种特点和功能要求.. 对象(object):对象是现实生活中存在的具体的实例.个体.即生活看到每一个事物,以及我们想象中的任务抽象的概念,都是某一类事物的实例和个体.而这些个体都属于某一类事物,即这些个体都是某一类事物中的具体的实例.比如,小汽车就是一类事物,而小汽车又是基于小汽车图纸制造出来的真实个体.因此

Java学习笔记<3>面向对象相关

面向对象的基本思想 从现实世界客观存在的事务出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式,如抽象.分类 继承.聚合.多态等. 类和对象的关系 对象中存储了类规定的数据类型,并且对象可以调用类的方法. java面向对象 <1>对象是java程序的核心,一切皆对象. <2>对象可以看成静态属性(成员变量)和动态属性(方法)的封装体. <3>类是创新同一类型对象的模版,定义了该类型对象应具有的成员变量及方法. 类的定义 成员变量可以用java语言的任何一种

java学习笔记之面向对象static,final关键字

java学习笔记之面向对象static,final关键字 一.static关键字 1.概述: static静态的,被static修饰的成员属于类,不属于单个对象,被所有对象所共享,存在静态区中,静态的成员优先于对象加载到内存中. 2.statc修饰成员的使用方式:(被static修饰的成员变量有默认值) /* 1.可以通过对象直接使用,不推荐使用 2.通过类名调用静态成员 类名.静态成员变量 类名.静态成员方法 */ 3.static的特点 /* 1.在同一个类中,静态成员只能访问静态成员,非静

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

java学习笔记16--异常

java学习笔记16--异常 异常 异常时导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失, 所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正常的执行. 异常类的继承结构 在整个java的异常结构中,实际上有以下两个最常用的类:Exception.Error,这两个类全都是Throwable的子类 Exception:一般表示的是程序中出现的问题,可以直接使用try...catch处理. Error:一般指

[学习笔记]面向对象开发中的一些思想和原则

摘自<Java与模式>作者阎宏 面向对象的可复用设计的第一块基石:开闭原则(一个软件实体应当对扩展开放,对修改关闭) "开-闭"原则的手段和工具: 1)里氏代换原则:任何基类出现的地方,子类一定可以出现: 2)依赖倒转原则:要依赖于抽象,不要依赖于实现: 3)合成\聚合复用原则:要尽量使用合成\聚合,而不是继承关系达到复用的目的: 4)迪米特法则:一个软件实体应该与尽可能少的其它实体发生相互作用: 5)接口隔离原则:应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口

Java学习笔记一:对象与存储

1.用引用来操作对象 Java是面向对象的编程语言,一切都能看作是对象,通过引用来完成对对象的操作. // String 是对象,而s对指向这个String对象的引用 String s; 注意:我们是通过对象的引用来操纵对象数据的,如果对象没有关联数据(如没有被初始化),则会出现空引用,报空指针异常:java.lang.NullPointerException 2.数据存储 (1)寄存器:位于CPU内部,是处理最快的区域,但是存储空间有限.Java不能通过程序直接控制. (2)堆栈:位于RAM(

我的java学习笔记(一篇文章不定时更新)

Java学习笔记 一.      原则战略思想 l  方法:快速原型 l  小目标:找一个pdf书籍快速有一个小项目出现 l  辅助:计时 记录各个学习环节的时间消耗. l  辅助:音乐 激情 l  您在博客园的登录用户名是:杂家随谈  [email protected] l 二.      WBS以及计时 步骤 计划时间 实际时间 搭建环境 2015/5/26 PDF 2015-5-26 小项目大框架实施 2015-6-1 三.      杂感 感觉难的时候,不妨站高点,站远一点看问题. 天下