- 引言
- 一、类的定义与引用
- 1、类的定义
- 2、类的引用
- 二、类的初始化(加载)过程
- 1、java程序执行流程
- 2、java运行时内存结构
- 栈
- 堆
- 方法区
- 程序计算器
- 本地方法栈
- 三、类方法
- 1、构造方法
- 2、普通方法
- 四、方法重载
- 1、构造方法重载
- 2、普通方法重载
- 五、类访问修饰
- 六、this和super
- 总结
类这一模块介绍的是java类的定义与引用、类的初始化(加载)过程、构造器、类方法、方法重载、访问修饰、this和super
一、类的定义与引用 1、类的定义在java中一个类通常的有如下内容:
包定义语句 package ……;
import语句 import ……;
class 类名{
成员变量;
构造方法;
成员方法;
}
package com.stydy.test;
import java.util.ArrayList;
import java.util.List;
public class Person{
private String name="菜鸡";
private List list=new ArrayList<>();
public Person(){}
public Person(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void saveName(String name){
list.add(name);
}
@Override
public String toString() {
return "Test{" +
"name='" + name + ''' +
'}';
}
}
java程序的基本单位就是类,类名要符合规范,类的开始和结束是一对花括号,在开发过程中,类和方法尽量写注释。
2、类的引用上一节的java变量中讲过,除了基本数据类型,其他的都是引用类型,那么我刚刚定义一个Person类型的变量,这个变量就称为引用。
package com.stydy.test;
public class Test {
public static void main(String[] args) {
// 创建了一个Person对象,通过person这个引用来访问这个对象中的方法
Person person=new Person();
System.out.println(person.getName()); // 菜鸡
person.setName("大神");
System.out.println(person.getName()); // 大神
}
}
二、类的初始化(加载)过程 1、java程序执行流程
.java文件会被Java编译器编译为.class字节码文件,然后由JVM中的类加载器加载个各类的字节码文件,加载完毕后,交给JVM执行引擎执行,在整个程序执行过程中,JVM会用一段空间存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们说的JVM内存,因此在Java中的内存管理就是针对这段空间进行管理(分配和回收内存空间)。流程如下
栈中主要存放一些基本数据类型的变量(byte,short,int,long,float,double,boolean,char)和对象的引用。
栈的优势是,存取速度比堆快,栈数据可以共享。但缺点是,存放在栈中的数据占用多少内存空间需要在编译时确定下来,缺乏灵活性。
堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new等指令建立,通过垃圾回收器来销毁。
堆的优势是可以动态地分配内存空间,需要多少内存空间不必事先告诉编译器,因为它是在运行时动态分配的。但缺点是,由于需要在运行时动态分配内存,所以存取速度较慢。
包括三部分:class区(存放虚拟机加载后的.class文件等类信息),静态区(存放static修饰的变量),常量池(string和包装类中的一些常量)。是各个线程共享的内存区域。
程序计算器程序计数器是一块较小的内存空间。
当前线程所执行的字节码的行号指示器(那条字节码指令的地址)。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。
介绍完各个区的功能后,接下来介绍一下变量相等的问题
三、类方法 1、构造方法 2、普通方法 四、方法重载 1、构造方法重载 2、普通方法重载 五、类访问修饰 六、this和super 总结



