Java第六章(面向对象)

1.类和对象

:具有相同特征的事物的抽象描述,是抽象的、概念上的定义。
对象:实际存在的该类事物的每个个体,是具体的,因而也称为实例(instance)
面向对象完成具体功能的操作的三步流程(非常重要

        步骤1:创建类,并设计类的内部成员(属性、方法)
        步骤2:创建类的对象。比如:Phone p1 = new Phone();
        步骤3:通过对象,调用其内部声明的属性或方法,完成相关的功能

2.对象内存解析

举例:

class Person { //类:人
    String name;
    int age;
    boolean isMale;
}

public class PersonTest { //测试类
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "赵同学";
        p1.age = 20;
        p1.isMale = true;

        Person p2 = new Person();
        p2.age = 10;

        Person p3 = p1;
        p3.name = "郭同学";
    }
}

内存解析图:

堆:凡是new出来的结构(对象、数组)都放在堆空间中
对象的属性存放在堆空间中。
对象名中存储的是什么呢?

        答:对象地址

3.成员变量和局部变量在内存中存储的位置不同

(1)实例变量:堆 (2)局部变量:栈。p1,p2,p3都是。

4.方法调用内存分析

        方法没有被调用的时候,都在方法区中的字节码文件(.class)中存储。

        方法被调用的时候,需要进入到内存中运行。方法每调用一次就会在栈中有一个入栈动作,即给当前方法开辟一块独立的内存区域,用于存储当前方法的局部变量的值。

        当方法执行结束后,会释放该内存,称为出栈,如果方法有返回值,就会把结果返回调用处,如果没有返回值,就直接结束,回到调用处继续执行下一条指令。

        栈结构:先进后出,后进先出。

public static void main(String[] args) {  

  Person p1 = new Person();                

   p1.name = “杰克";

   p1.age = 24; 

   p1.gender = '男';             

   p1.eat();    

  p1.sleep(6);    

   p1.interests("编程");    

  }        

   5. 对象数组(难)

数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用类型中的类时,我们称为对象数组。

对象数组内存解析

6.可变参数方法

        当定义一个方法时,形参的类型可以确定,但是形参的个数不确定,那么可以考虑使用可变个数的形参。

1.可变参数方法的使用与方法参数部分使用数组是一致的,二者不能同时声明,否则报错。

       比如 public void print(int ... nums)和 public void print(int[ ]  nums)

2.方法的参数部分有可变形参,需要放在形参声明的最后

        public void print(int i ,int ... nums) ,两个参数不能交换位置。

3.在一个方法的形参中,最多只能声明一个可变个数的形参

7.参数传递机制:值传递

Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。

形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参

形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

8.权限修饰符:publicprotected缺省private。具体访问范围如下:

修饰符

本类内部

本包内

其他包的子类

其他包非子类

private

×

×

×

缺省

×

×

protected

×

public

9.什么叫封装性?

        Java规定了4种权限修饰符,分别是:private、缺省、protected、public。我们可以使用4种权限修饰符来修饰类及类的内部成员。当这些成员被调用时,体现可见性的大小。

举例:

> 场景1:私有化(private)类的属性,提供公共(public)的get和set方法,对此属性进行获取或修改
> 场景2:将类中不需要对外暴露的方法,设置为private
> 场景3:单例模式中构造器private的了,避免在类的外部创建实例。

理论:程序设计的原则之一

理论上:
  -`高内聚`:类的内部数据操作细节自己完成,不允许外部干涉;
    (Java程序通常以类的形态呈现,相关的功能封装到方法中。)
  -`低耦合`:仅暴露少量的方法给外部使用,尽量方便外部调用。
    (给相关的类、方法设置权限,把该隐藏的隐藏起来,该暴露的暴露出去)

10.在类的属性中,可以有哪些位置给属性赋值?

① 默认初始化

② 显式初始化

③ 构造器中初始化

④ 通过"对象.属性"或"对象.方法"的方式,给属性赋值

顺序:① - ② - ③ - ④

        上述中的①、②、③在对象创建过程中,只执行一次。

        ④ 是在对象创建后执行的,可以根据需求多次执行。

11.JavaBean

JavaBean是一种Java语言写成的可重用组件。

所谓JavaBean,是指符合如下标准的Java类:

    • 类是公共的
    • 有一个无参的公共的构造器
    • 有属性,且有对应的get、set方法

12.Java 的引用类型有哪几种?

类、数组、接口;枚举、注解、记录

13.Java中内存结构的划分

  • Java中内存结构划分为:虚拟机栈方法区程序计数器本地方法栈

    • 虚拟机栈:以栈帧为基本单位,有入栈和出栈操作;每个栈帧入栈操作对应一个方法的执行;方法内的局部变量会存储在栈帧中。

    • 堆空间:new 出来的结构(数组、对象):① 数组,数组的元素在堆中 ② 对象的成员变量在堆中。

    • 方法区:加载的类的模板结构。

14.对象存在Java内存的哪块区域里面?

        堆空间

15.构造方法和普通方法的区别

        编写代码的角度:没有共同点。声明格式、作用都不同。

        字节码文件的角度:构造器会以<init>()方法的形态呈现,用以初始化对象。

16.无参构造器和有参构造器的的作用和应用

        用来初始化Java类,提供类的初始化和实例化,以便调用

17.成员变量与局部变量的区别

属性 vs 局部变量

  • 声明的位置

    • 内存中存放的位置

      • 作用域

        • 权限修饰符

          • 初始化值

            • 生命周期

        属性 <=> 成员变量 <=>field <=> 字段、域

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值