面向对象程序设计(1)类与对象


类与对象

类和对象的联系

  • 类是抽象的,是由程序员对一种事物进行抽象而构造的一种数据类型
  • 对象是具体的,它是类的一个实例化
  • 类是对象的模板,对象是类中的一个个体

类和对象的内存分配机制

面向对象程序设计(1)类与对象
###Java的内存结构
* 栈:栈空间用来存放基本数据类型
* 堆:对空间用来存放引用类型(对象、数组)
* 方法区:常量池和类加载信息
###内存分配过程
1. 加载类信息(属性和方法)
2. 在堆中分配空间
3. 对象初始化(默认初始化,显示初始化或者通过构造器初始化)
4. 将地址赋给对象变量p,通过p可以访问这个对象

静态域和静态方法

静态域

可以将域定义为 static,每一个类中只有一个这样的域。即使没有对象,这个静态域也存在。它属于类而不属于任何独立的对象,可以直接通过类来访问这个域。

class Employee{
    private static int nextId = 1;   //静态域
    private int id;

    public Employee(String n, double s) {
        name = n;
        salary = s;
        id = 0;
    }

    public void setId() {
        id = nextId;  //通过静态域来设置id
        nextId++;
    }
}

静态常量

class Hour {
    private static int HOURS = 24;

    public static void main(String[] args) {
        System.out.println(Hour.HOURS);
    }
}

静态方法

静态方法时一种不能向对象实施操作的方法,静态方法没有this参数,静态方法可以访问自身类中的静态域。当一个方法是以下两种情况是应该为设置为静态方法.
1.不需要访问对象状态,参数是显示提供的
2.只需要访问类的静态域

//只访问静态域,接employee
    public static int getNextId() { 
        return nextId;  //return static field
    }

main方法

main方法不对任何对象进行操作,所以main方法是静态方法,一个类只能有一个main方法。通常在类中的main方法是作测试用的,只有与文件名相同的类的main方法才是整个程序的入口

成员方法传参机制

形参是实参的一个拷贝,当执行调用后的方法结束后,形参被销毁。

  • 当方法参数是基本数据类型时,形参和实参是传值调用,调用方法结束后,形参被销毁,形参的改变不影响实参。即一个方法不能修改一个基本数据类型的参数
  • 当方法参数是引用类型时,形参和实参时引用调用,修改形参的状态会影响实参,即一个方法可以改变一个对象参数的状态
  • 当有两个参数都是对象时,交换两个对象的引用,实参不会被修改。即一个方法不能让对象参数引用另外一个新的对象

方法重载

java中允许同一个类中,有多个同名方法的存在,但要求形参列表不一致。通过方法重载我们可以设计一系列作用相似的方法,使它面对不同的输入可以做不同的处理。

重载要求

  • 方法名必须相同
  • 形参的参数类型,个数或者顺序必须有一个不同
  • 返回类型没有要求

可变参数

java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。就可以通过可变参数实现。

语法

访问修饰符 返回类型 方法名(数据类型.. 形参名){ … }

//使用可变参数时,num可以当作数组
public int sum(int... nums){
    System.out.println("接收的参数个数="+nums.length;
    intres=0;
    for(inti=0;i<nums.length;i++){
        res+=nums[i];
    }
    return res;
}

细节

  • 可变参数可以是数组,而可变参数本质上就是数组
  • 可变参数必须放在参数列表的最后
  • 一个形参列表只用有一个可变参数

构造器

在java中使用构造器构造实例,用构造器与new操作符来构造并初始化对象

  • 构造器与类同名
  • 构造可以有0,1,2个或多个参数
  • 构造器没有返回值
  • 构造器和new指针操作符一起出现

构造器的使用

  • 构造器重载:一个类可以定义多个构造器,当构建对象时,可以只指定一个或多个值来初始化
  • 当没有定义构造器时,系统会默认的提供一个无参构造器,对对象进行默认初始化,当定义了自己的构造器时,将不会再提供无参构造器,除非显示的进行声明

this关键字

在java中,java虚拟机给每一个对象分配this用来代表当前对象。this关键字很好的解决了类内部属性和成员方法参数重名的问题。

Public Person(String name, int age){
    this.name = name
    this.age = age
}
  • this 可以访问类的属性,方法
  • this 可以访问构造器(必须在构造器中使用,且必须为第一句) ,这样可以很方便的对构造器进行重载

原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/276263.html

(0)
上一篇 2022年7月22日
下一篇 2022年7月22日

相关推荐

发表回复

登录后才能评论