JavaSE——类与对象

1.面向对象编程简述

面向过程编程缺少了可重用设计性

1.1.面向对象三大特征

  • 封装性:所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。简而言之,内部操作对外部而言不可见(保护性
  • 继承性:继承是一种能力,指的是他可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展
  • 多态性:所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口

1.2.名词扩展

  • OOA:面向对象分析
  • OOD:面向对象设计
  • OOP:面向对象编程

面向对象最大的特征就是可以进行生活的抽象

2.类与对象的定义和使用

2.1.类与对象的概念

  • :共性的概念
  • 对象:一个具体的可使用的事物

编程中首先产生类(类是生产对象的蓝图),而后再产生对象。对象的所有行为一定在类中进行了完整的定义

类的组成:

  • 方法:操作行为
  • 属性:操作数据,描述对象的具体特点

2.2.类与对象的定义和使用

定义一个类的语法如下:

class 类名称{
    属性1;
    属性2;
    ...
    属性n;

    方法1(){}
    方法2(){}
    ...
    方法n(){}
}

如上是一个类的完整定义,此时类中的方法要由类的对象去调用。Person类定义示例如下:

class Person{
    public String name;
    public int age;
    
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    
    public String getPersonInfo(){
        return "姓名:" + name + "、年龄:" + age;
    }
}

有了类,现在我们可以定义对象了,生产对象的语法如下:

类名称 对象名称 = new 类名称();

以Person类为例生产一个Person对象:

Person per1 = new Person("邹大",18);

通过对象调用实例变量与实例方法,代码如下:

class Person{
    public String name;
    public int age;

    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    public String getPersonInfo(){
        return "姓名:" + name + "、年龄:" + age;
    }
}

public class Test{
    public static void main(String[] args) {
        Person per1 = new Person("邹大",18);
        System.out.println(per1.name);
        System.out.println(per1.age);
        System.out.println(per1.getPersonInfo());
    }
}
//邹大
//18
//姓名:邹大、年龄:18

!!!!注:只要出现了关键字new,就开辟了新的内存,而Java中常说的性能调优其实就是调整内存

2.3.对象内存分析

我们可以简单将Java中的内存区域分为栈内存堆内存两块区域(实际Java内存区域的划分远比这个复杂)

  • 栈内存(虚拟机局部变量表):存放的是局部变量(包含编译期可知的各种基本数据类型对象引用——即堆内存的地址,可以简单理解为对象名称),Java栈是与线程对应起来的,每当创建一个线程,JVM就会为这个线程创建一个对应的Java栈
  • 堆内存:保存的是真正的数据,即对象的属性信息

通过如下代码分析两部分内存:

class Person{
    String name;
    int age;
}
public class Test {
    public static void main(String[] args) {
        Person per = new Person();
        per.name = "tim";
        per.age = 18;
    }
}

main方法中的第一行代码:

Person per = new Person();

如上出现了关键字new,表名在堆上分配了内存并且产生了Person类的对象per引用这部分内容,内存图如下:
在这里插入图片描述
接下来两句代码:

per.name = "tim";
per.age = 18;

通过per引用设置堆中属性值,内存图如下:
在这里插入图片描述


       对象(引用数据类型)必须在实例化后调用,否则就会产生NullPointerException(运行时错误),编译时不会出错。“NullPointerException”在开发中会一直存在,只有引用类型(数组、类、接口)才会产生此类异常。一旦出现此类异常,就要根据出错位置查看引用数据类型变量是否已经初始化

猜你喜欢

转载自blog.csdn.net/LiLiLiLaLa/article/details/86644043