Java学习笔记_面向对象编程(一)


面向过程与面向对象(一)

面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。
区别是:
面向过程是从微观角度去分析问题(执行者)
面向对象是从宏观角度去分析问题(设计者)

类与对象

理解类与对象

类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么样造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。类可以看成一类对象的模板,对象可以看成该类的一个具体实例。类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法。

类:我们叫做class。 对象:我们叫做Object,instance(实例)。

定义类与创建对象

对于一个类来说,一般有三种常见的成员:属性field、方法method、构造器constructor。这三种成员都可以定义零个或多个。
* 1成员变量 用于模拟属性
* 2成员方法 用于模拟行为
* 3构造方法/构造器 帮助我们初始化对象

属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体。
在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。

属性定义格式:
[修饰符] 属性类型 属性名 = [默认值] ;

数据类型默认值
整型0
浮点型0.0
字符型‘\u0000’
布尔型false
所有引用类型null

方法用于定义该类或该类实例的行为特征和功能实现。方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。

方法定义格式:
[修饰符] 方法返回值类型 方法名(形参列表) {
// n条语句
}

void代表没有返回值;方法的作用:重用代码,封装功能,便于修改。

Code examples: 定义person类,模拟人的行为:吃饭工作和休息。

public class Person {
    //定义属性
    String name;  
    int    age;
    String address;
    //定义方法
    public void eat(String food){   
        System.out.println(name+"正在"+address+"吃"+food);
    }
    public void rest(){
        System.out.println(age+"岁的"+name+"正在睡觉");
    }
    public void work(){
        System.out.println(name+"正在敲代码");
    }

}
public class Test {
    public static void main(String[] args) {
        Person person=new Person(); //实例化(创建对象)
        person.name="老八";         //初始化
        person.age=34;
        person.address="葫芦岛";
       
       //调用方法
        person.eat("秘制小汉堡");   
        person.rest();
        person.work();
    }
}

局部变量与成员变量

类中定义的变量是成员变量,而方法中定义的变量,包括方法的参数,代码块中定义的变量被称为局部变量。两个的区别主要表现在以下几方面:

成员变量局部变量
代码中位置不同类中定义的变量方法或代码块中定义的变量
内存中位置不同堆内存栈内存
是否有默认值没有
代码作用范围(空间)不同当前类的方法当前一个方法或代码块
作用时间不同当前对象从创建到销毁定义变量到所属方法或代码块执行完毕

构造方法及其重载

构造方法(constructor)也叫构造器,用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。Java通过new关键字来调用构造器,从而返回该类的实例,是一种特殊的方法。

声明格式:
[修饰符] 类名 (形参列表){
//n条语句
}

构造方法的几个要点:

  1. 构造方法的方法名必须和类名一致!
  2. 构造方法通过new关键字调用!
  3. 构造方法虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。
  4. 当我们不定义构造方法,JAVA会默认给我们提供一个参数缺省的构造方法, 当我们自己定义了构造方法,JAVA提供的构造方法会被覆盖。
  5. 构造方法一般写两个,一个有参构造,一个无参构造。
  6. 构造方法也是方法,只不过有特殊的作用而已。与普通方法一样,构造方法也可以重载。

对象的创建完全是由构造方法实现的吗?
不完全是。构造方法是创建Java对象重要途径,通过new关键字调用构造器时,构造器也确实返回了该类对象,但这个对象并不是完全由构造器负责创建的。创建一个对象分为如下四步:

  1. 分配对象空间,对象成员变量初始化为0或空
  2. 执行属性值的显示初始化(变量初始化为0或空)
  3. 执行构造方法
  4. 返回对象的地址给相关的变量
public class Person {
    String name;
    int    age;
    String address;

    public Person() { //无参构造
    }

    public Person(String name, int age, String address) { //有参构造
        this.name = name;
        this.age = age;
        this.address = address;
    }
  }
  public class Test {
    public static void main(String[] args) {
        Person person=new Person("彦祖",40,"加利福尼亚");//用构造器实例化对象
        }

this关键字

this的本质就是“创建好的对象的地址”! 由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象” 。

this最常的用法:

  • 调用成员变量:如果成员变量和局部变量同名,this必须书写,用来区分两者;如果没有同名的局部变量,this可以不写。
  • 调用成员方法:这种情况下,this可以省略。
  • 调用构造方法:使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
  • this不能用于static方法中。

使用this关键字区分成员变量和局部变量

public Dog(String type,String gender,String color,int month){
    /*在方法中 出现了和成员变量同名的局部变量
    * 在当前方法中,使用变量时,会优先使用方法内部的局部变量
    * 如果当前方法中成员变量和局部变量的名称不同, this.可以省略不写
    * */
    this.type=type;
    this.gender=gender;
    this.color=color;
    this.month=month;
    System.out.println("Dog 类的构造方法执行了");
}

构造方法可以调用当前类的其他构造方法 通过this()的形式:

/*
* 构造方法之间是可以调用的 但是不能使用方法名,要是使用this
* 调用其他构造方法的代码必须是头一行代码
* */
public Dog(String type,String gender,String color,int month){
    this(type,gender);
    this.color=color;
    this.month=month;
    System.out.println("Dog 类的构造方法执行了");
}

//定义一个构造方法,专门用于初始化 type属性和 gender属性
public Dog(String type,String gender){
    this.type=type;
    this.gender=gender;
}

//无参构造
public Dog(){
}

方法的调用

java中的数据类型

  • 基本数据类型 8个
  • 引用类型 类和对象 数组 接口 抽象类 枚举 … …

方法调是Java开发中的基本操作。理解方法调用的内存分配过程,实参形参的传递过程非常必要。方法参数分为基本数据类型和引用数据类型两种,传递参数有着实质的区别。

实参给形参传递数据有两种方式

  1. 按值传递 参数为基本数据类型
  2. 按引(地址)用传递 参数为引用类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值