java之面向对象(上)

面向对象的两个要素

  • 类:对于一类事物的描述,是抽象的、概念上的定义
  • 对象,是实际存在的该类事物的每个个体,也称作实例(instance)

面向对象的重点是类的设计。设计类就是设计类的成员。

类的结构

常见类的成员有:

  • 属性:类中的成员变量
  • 行为:类中的成员方法

对象属于引用类型

对象和数组一样是引用类型:如果Person p1 = new Person;
Person p2 = p1;那么改变p2的属性会直接改变p1和属性。

对象的内存解析

  • 堆的唯一目的就是存放对象实例,几乎所有的对象实例都在堆这里分配内存。
  • 方法区主要存储已被虚拟机加载的类信息,常量,静态变量和编译后的代码等数据。
    在这里插入图片描述
    在这里插入图片描述

类的属性与局部变量对比

相同点:

  • 定义变量的格式相同
  • 先声明后使用
  • 变量都有其对应的作用域

不同点:

  • 声明的位置不同:
    • 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量。
    • 类的属性:声明在类的{}内的称作类的属性
  • 关于权限修饰符的不同:
    • 类的属性: 声明时可以使用权限修饰符指名类的权限:如public,default,protected,private等。
  • 关于默认值的不同:
    • 局部变量: 没有默认值,调用时必须初始化。
    • 类的属性: 默认初始值和数组的初始值一致
  • 在内存中加载的位置不同:
    • 局部变量:加载到栈空间
    • 类的属性:加载到堆空间(非static)

数组类型数组

声明:

Student[] stuArray = new Student[10];
stuArray[0] = new Student();

匿名对象

  • 匿名对象:重建的对象没有显式的赋给一个变量名。
  • 特征:匿名对象只能调用一次。
  • 使用:可以在一个方法中调用时作为形参传入:如 phoneMall.show(new Phone());
    new Phone.sendEmail()

方法重载(function overloading)

  • 定义:在同一个类中,允许存在一个以上的同名方法,只要同名参数的个数或者参数类型不同即可。

传入多个参数

  • 定义方式:public void show(String ... strs){}。strs其实相当于一个数组
  • 注意:该方式与show(String[ ] strs){}不能共存,但是可以与show(String strs)共存

值传递机制

  • 如果参数是基本数据类型,此时实参赋给形参的是实参真是存储的数据值。
  • 如果参数是基本数据类型,此时实参赋给形参的是实参存储数据的地址值。

注意点

int[ ] arr = new int[ ]{1,2,3};
sout(arr); //输出地址值
char[ ] arr1 = new char[]{'a','b'};
sout(arr1); // 输出ab char[]直接输出的话是输出字符串。

对象的封装和隐藏

  • 为什么要引入封装性?
    1. 程序设计准求“高内聚,低耦合”
    2. 隐藏内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
  • 封装性的体现之一:创建一个对象时,可以通过“对象.属性”的方式,对对象的属性进行赋值,然而赋值操作要受到属性数据类型和存储范围的制约。所以我们要通过方法进行限制条件的添加。这是需要操作对象内的属性进行私有化。
  • 封装的体现:
    1. 将类的属性私有化(private)的同时提供公共(public)方法来获取和设置此属性的值。
    2. 不对外暴露的私有的方法
    3. 单例模式(将构造器私有化)
    4. 如果不希望类在包外调用,那么可以声明为缺省。
  • 权限修饰符:
    在这里插入图片描述

构造器

  • 构造器的作用: 创建对象,初始化对象的信息
  • 如果没有显示的定义类的构造器的话,则系统默认提供一个空参的构造器
  • 定义构造器的格式:权限修饰符 类名(参数列表){}
  • 一个类中定义多个构造器,彼此构成重载
  • 自己定义了一个类的构造器中,默认的无参构造器将不能使用。
  • 一个类中至少有一个构造器。

javaBean的使用

javaBean的定义:

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

this关键字

  • this可以调用的结构:属性,方法;构造器
  • this调用属性,方法:
    this此时可以理解为当前对象或当前正在创建的对象。通常可以省略this,但是当方法的形参和类的属性同名时,我们需要显式的使用this,表明此变量是属性,而非形参。
  • this调用构造器
    在类的构造器中可以显式的使用this的方式,来调用本类中指定的其他构造器。需要注意的是:
    1. 构造器中不能使用this()来调用自己
    2. 如果一个类中有n个构造器,则最多有n-1个构造器中使用了this()。
    3. 规定:this()必须声明在当前构造器的首行,并且一个构造器只能声明一个this()来调用其他构造器。

MVC设计模式

MVC设计模式运用到了包(package)的概念

  • model
  • view
  • controllor

package关键字

  • 提供包的概念是为了更好的实现项目中类的管理
  • 使用package声明类或接口所属的包,在源文件的首行声明
  • 包属于标识符,遵循标识符的命名规则(xxxyyyzzz)
  • 同一包下不能命名同名的接口和类,不同包下可以命名同名的接口和类。

import关键字

  • import导入的是类或接口
  • import static导入的是静态属性或者方法
  • 如果在java.lang包下定义的,可以省略import
  • 如果在源文件中,使用了不同包下的同名的类,则必须至少一个类需要以全类名的方式显式
  • 使用”xxx.*"的方式表明可以调用xxx包下的所有结构。但是如果使用的是xxx子包下的结构,则仍需要显式导入。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值