面向对象

面向对象就是一种组件化设计思想

  • 封装性:保护内部结构的安全性
  • 继承性:在已有程序功能上拓展新功能
  • 多态性:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用),。比方说按下 F1键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

类与对象

java只要使用new 关键字后,就会在堆内存种开辟新的空间,保存这个对象,如下面代码:new Book()后,会在堆内存中产生一个Book对象 栈内存中产生一个内存地址指向堆内存,其中属性title为默认值null,price为默认值0.0,

  1. class Book {
  2. public String title;
  3. public double price;
  4. }
  5. Book book = new Book();
  6. book.title = "Java";
  7. book.price = 98.1;

如果没有new操作,那么会先在栈内存中产生一个book的空地址,这个地址没有指向,等后面new Book()后,该地址指向堆内存中book对象

  1. class Book {
  2. public String title;
  3. public double price;
  4. }
  5. Book book = null;
  6. book = new Book();
  7. book.title = "Java";
  8. book.price = 98.1;

对象引用

下面代码,一开始时new一个bookA和bookB,这样在栈内存中存在一个bookA和一个bookB,他们分别指向堆内存中new的两个Book,bookB = bookA;这个就是对象引用过程,当执行这句代码时,程序会先切断bookB指向的堆内存中代表bookb的对象,然后将栈内存中bookB的指向指向堆内存中bookA所在内存空间。如下图所示

  1. class Book {
  2. public String title;
  3. public double price;
  4. }
  5. Book bookA = new Book();//栈内存中book
  6. Book bookB = new Book();
  7. bookA.title = "Java";
  8. bookA.price = 98.5;
  9. bookB.title = "Angular";
  10. bookB.price = 50.9;
  11. bookB = bookA;
  12. bookB.price = 70.2;

图解new 对象过程

构造方法

构造方法:即名称和类名称一致,没有返回值的方法,即使我们没有定义构造方法,程序也会在我们编译时自动添加一个无参的不进行任何操作的构造方法。

  1. class Book {
  2. public Book(){};//构造方法
  3. public String title;
  4. public double price;
  5. }
  • 构造方法是在使用关键字new实例化的时候被默认调用。
  • 构造方法在实例化(new)的时候只被调用一次。普通方法在实例化对象后可以调用多次

  • 如果程序中已经定义了构造方法,默认的无参构造方法将不再生成。(一个类中至少保留一个构造方法)

在实际工作中,构造方法是为了在我们new 对象时,设置默认属性

匿名对象

匿名对象:没有栈内存指向的对象。

  1. class Book {
  2. public String title;
  3. public double price;
  4. public Book(String _title,String _price){
  5. this.title = _title;
  6. this.price = _price;
  7. }
  8. public getInfo(){
  9. System.out.println("名称:"+title+"价格:"+ price);
  10. }
  11. }
  12. new Book("java", 56.8).getInfo();//这种调用方式可以叫做匿名调用

匿名对象在什么时候使用?
一个对象要多次使用则声明为有名对象
一个对象只使用一次则声明为匿名对象,匿名对象使用之后立即变为垃圾。

方法重载

方法重载:方法名称相同,方法的参数个数或者类型不同

  • 一般要求重载的方法返回值要相同,虽然不同也可以,但是不好开发,开发的时候还要考虑重载方法返回值
  • 当重载方法的参数个数和类型都相同时,返回值类型不同时不能实现的,方法重载时更加方法的参数和参数类型来确定,而不是返回值类型