前言
最近又闲下来了, 无意间在其他博客看见几篇 java 基础的文章, 发现自己好多都忘记了. 趁有时间就自己再回顾复习一下, 所以接下来的文章都是基于前辈们的博客加上自己的思路进行整理记录, 有问题欢迎指正.
正文
面向对象是 java 的最大特征之一, 接下来主要从以下几个方面进行介绍:
java 类的定义
成员变量
引用
构造方法
一, java 类的定义
- // 用 class 关键字定义一个类
- class Student{
- // 定义成员变量
- private String name;
- private int age;
- // 定义方法
- public void setName(String name){
- this.name=name
- }
- public void setAge(int age){
- this.age=age
- }
- public String getName(){
- return name;
- }
- public int getAge(){
- return age;
- }
- }
JAVA 里面有 class 关键字定义一个类, 后面加上类名. 上面定义了一个 student 类, 然后定义这个类应该具有的成员变量 (即属性) 和方法, 上面定义了的 String name 和 int age 这个两个成员变量, 或者叫属性. 这样就在 student 这个类里面定义了两个应该有的属性, 还定义了几个方法分别 setName(String name),setAge(int age)和 getName(),getAge(), 分别用来设置和获取学生的姓名和年龄.
二, 成员变量
在 JAVA 里面的任何变量首先应该要声明, 然后再赋值, 然后再使用. 成员变量和局部变量有一个重要区别: 成员变量在类里面声明时如果不进行初始化, 那么 JAVA 会默认给它初始化, 而局部变量 JAVA 不会默认给它初始化, 所以在方法里面声明一个局部变量如果不给它初始化时就会出错. 默认初始化大多数都是 0,boolean 类型的为 false, 引用类型的为 null, 也可以直接打印成员变量看默认初始化的值.
三, 引用
Java 语言除了基本类型之外的变量类型都称之为引用类型, java 中的对象是通过引用对其操作的. Java 的基本数据类型包括整数型, 浮动型, 布尔型, 字符型这四类.
具体过程看下图:
引用
如何在内存中区分类和对象:
1. 类是静态的概念, 在代码区中.
2. 对象是 new 出来的, 位于堆内存中.
因为堆内存是用来动态分配内存的, 只有在运行当中才会 new 一个对象放堆内存里面, 对象有多大, 你不知道, 所以你没有办法提前分配内存给这个对象, 只有在运行期间, 才能够明白这个对象到底要分配多大的空间给它, 所以把它放在堆内存里面, 堆内存比较大, 动态分配内存用它. 如果对象不用了, 当垃圾回收, 释放掉占用的内存.
记住, 以后一提到引用, 脑子里马上浮现引用那就是一小块内存指向一大块内存. 即栈内存指向堆内存.
引用类型和基本类型有着巨大的区别:
当声明一个 int age=0 时, 系统会马上给这个 age 分配一个内存空间(在栈内存里面分配一小块区域用来装数字 0), 里面装着一个值为 0, 以后使用 age 这个名字马上就可以访问这个内存空间里面的值, 这就是基本数据类型, 所以基础类型就只占一块内存. 基础类型之外的类型全都叫引用类型, 我们定义一个 String s, 这个 s 就是一个引用类型的数据, 而引用类型占 2 块内存(原来的 s 在栈内存中, new 之后在堆内存中). 需要使用 new 关键字把这个类的对象实例化出来, 才能使用这个对象.
四, 构造方法
构造方法用来创建一个新的对象, 和 new 组合使用. New 一个对象的时候实际上调用了构造方法, 构造一个新的对象的方法叫构造方法. 构造方法的名字和类名一模一样, 没有返回值, 没有修饰符. 如下所示:
- // 用 class 关键字定义一个类
- class Student{
- // 定义成员变量
- private String name;
- private int age;
- // 定义一个构造方法
- public Student(String name,int age){
- this.name=name;
- this.age=age;
- }
- //main 函数中结合 new 调用构造方法
- public static void main(String args[]){
- Student a = new Student('tom',22);
- }
- }
下面是在 main 方法里面调用构造方法时的内存分析情况:
构造方法
当方法调用完成之后, 栈里面为它分配的空间全部都要消失, 即把这个方法调用时分配给它的内存空间释放出来, 所以这个构造方法 student 调用完成之后, 栈内存里面分配的两小块内存 name 和 age 就释放出来了, 而 new 出来的对 a 象则永远留在了堆内存里面.
在平时的开发中我们发现我们 new 对象的时候, 比如 Student s = new Student()发现系统并没有给我们提供构造方法这是因为: 声明一个类, 若没有在类中指定其构造方法, 编译器会为这个类自动添加一个空的构造方法. 一旦给这个类里面指定了构造方法, 那么系统就不会再给这个类添加构造方法了.
原创作者: 凌小样
作品链接: https://www.jianshu.com/p/a4820eefa075
来源: http://www.jianshu.com/p/a4820eefa075