入门之面向对象

面向对象的重点学习什么?

  1. 学习获取已有对象并使用
  2. 学习如何自己设计对象并使用 --> 面向对象的语法

设计对象并使用

类和对象

  • 类(设计图):是对象共同特征的描述
  • 对象:是真实存在的具体东西

在Java中,必须先设计类,才能获得对象

         如何定义类

        如何得到类的对象

        如何使用对象
  • 访问属性:对象名.成员变量
  • 访问行为:对象名.方法名(...)

类的几个补充注意事项 

  • 用来描述一类事物的类,专业叫做:Javabean类。在Javabean类中,是不写main方法的。
  • 在以前,编写main方法的类,叫做测试类。我们可以在测试类中创建javabean类的对象并进行赋值调用
  • 在Javabean类中,属性由成员变量的形式来体现,行为由成员方法(不加static)的形式来体现。
  • 类名首字母建议大写,需要见名知意,驼峰形式
  • 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件一个class类。
  • 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值

封装 

        原则

对象代表什么,就得封装对应的数据,并提供数据对应的行为

        private关键字

  • 是一个权限修饰符
  • 可以修饰成员
  • private修饰的成员只能在本类中才能访问
  • 针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作,如“setXxx”,“getXxx”方法
  • “setXxx”方法,用于给成员变量赋值,方法用public修饰
  • “getXxx”方法,用于获取成员变量的值,方法用public修饰

        成员变量和局部变量

成员变量:定义在方法的外面,类的里面

局部变量:定义在方法的里面

就近原则

private int age;

public void method()
{
    int age = 10;
    System.out.println(age);
}

第一个age是成员变量,第二个age是局部变量,由于就近原则,输出的age是第二个age

        this关键字 

作用

        区别成员变量和局部变量

this的本质和内存图

        本质:所在方法 调用者 的地址值

构造方法

        构造方法也叫构造器、构造函数

作用

        在创建对象的时候,虚拟机自动调用构造方法,作用是给成员变量进行赋初始化的

格式

特点

  1. 方法名与类名相同,大小写也要一致
  2. 没有返回值类型,连void也没有
  3. 没有具体的返回值(不能由return带回结果数据)

执行时机

  1. 创建对象时由虚拟机调用,不能手动调用构造方法
  2. 没创建一次对象,就会调用一次构造方法

分类

  1. 无参构造方法:初始化对象时,成员变量的数据均采用默认值
  2. 有参构造方法:在初始化对象时,同时可以为对象进行赋值

构造方法的注意事项

  1. 构造方法的定义
  • 如果没有定义构造方法,系统将给出一个默认无参构造方法
  • 如果定义了构造方法,系统将不再提供默认的构造方法
  1. 构造方法的重载
  • 带参构造方法和无参构造方法的,两者方法名相同,但是参数不同,这叫做构造方法的重载
  1. 推荐的使用方式
  • 无论是否使用,都手动书写无参构造方法,和带全部参数的构造方法

标准JavaBean 

1.类名需要见名知意

2.成员变量使用private修饰

3.提供至少两个构造方法

        无参构造方法

        带全部参数的构造方法

4.成员方法

        提供一个成员变量对应的setXxx() / getXxx()

        如果还有其他行为,也需要写上

细节
  1. 快捷键alt+=,选择getter and setter快速生成get和set方法
  2. 右击,选择ptg to JavaBean快速生成JavaBean

对象内存图

简介

每一款软件都会占用一块内存,java也不例外,JVM将占用的内存分为五个部分,如下图所示

JDK7以前,JVM将内存分为五个部分,堆和方法区是连在一起的,在真实的物理空间中也是一片连续的空间。JDK8以后,取消方法区,新增元空间,把原来方法区的多种功能进行拆分,有的功能放到了堆中,有的功能放到了元空间中。此时,加载字节码文件的功能属于元空间了。为了方便理解加载字节码文件后代码如何运行,暂且还是把元空间叫做方法区。

总体运作

当运行一个类的时候,这个类的字节码文件就会加载到方法区中临时存储

当类中的方法被调用的时候,方法进栈执行,执行之后就要出战,注意变量也是在这个区域里面

new出来的东西放入堆中,并且在这块内存中开辟空间会产生地址值

一个对象的内存图

如 Student s = new Student();

  1. 加载字节码文件,即将Student类的字节码文件加载入内存
  2. 声明局部变量,对等号左边的s进行声明
  3. 在堆内存中开辟一个空间,即等号右边,因为有new关键字
  4. 默认初始化
  5. 显示初始化
  6. 构造方法初始化
  7. 将堆内存中的地址值复制给左边的局部变量
例子

        1.首先,程序是从main方法开始执行的,所以要把TestStudent类的字节码文件加载到方法区中,在这里将main()方法进行临时存储

        2.然后虚拟机会自动地进入程序的主入口,调用main()方法,于是main()方法被加载到栈里面。

        3.开始创建Student对象,执行上面Student s = new Student()需要的七个步骤,第一步,将Student.class加载到方法区中,在这个里面有Student类的所有信息,即成员变量和成员方法。第二步,声明局部变量,在main方法中声明s。第三步,在堆内存中开辟一个空间,而堆里面的空间都是有地址值的,假设地址值是001,这个空间里面就会把Student类里面所有的成员变量拷贝一份放进去,除此之外还存饭成员方法的地址,是为了以后用对象调用方法的时候能找到对应的方法,其实堆里面地址值为001的空间就是我们所说的对象。第四步,先默认初始化,不同类型的数据有不同的默认值。第五步,如果说在定义成员变量的时候是直接给值的,比如,那么就要用显式初始化的值代替默认值。第六步,如果使用了带参的构造方法,则会用带参的构造方法给成员变量赋值,代替显式初始化。第七步,将堆内存中的地址值复制给左边的局部变量,即将001赋值给s。到目前为止,一个对象才刚刚创建完毕。

        4.接着执行输出语句输出s.name + "..." + s.age,表示s代表的地址值001里面的name和age。

        5.接着给对象的成员变量赋值,也是通过s,即001找到堆中地址值为001的空间,把值赋值给此空间中的name和age。

        6.最后调用方法s.study(),也是通过s即001到堆中找到对应的空间,而这个空间会有成员方法的地址,再通过成员方法的地址找到成员方法,于是把方法加载进栈,并且执行。方法执行之后,就会从栈中出去,而main方法此时也执行完毕,所以main方法也出去,此时没有变量指向地址值为001的堆对象,所有被释放。

两个对象的内存图 

        和一个对象的内存图类似

两(多)个引用指向同一个对象

        就是两(多)个变量指向同一个堆空间

成员变量和局部变量

成员变量:类中方法外的变量

局部变量:方法中的变量

区别

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/66787542 【完整课程列表】 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 01.Java语言概述(共21页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 02.理解结构化程序设计_理解面向对象(共25页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 03.数据类型和运算符(共19页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 04.流程控制和数组(共33页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 05.面向对象(上)(共35页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 06.面向对象(下)(共55页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 07.与运行环境交互(共40页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 08.Java集合(共44页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 09.泛型(共15页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 10.异常处理(共24页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 11.AWT编程(共46页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 12.Swing编程(共45页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 13.JDBC编程(共52页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 16.多线程(共44页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 17.网络编程(共42页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 18.类加载与反射(共25页).ppt

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值