调试程序
概念--Bug,Debug 手段--System.out.println();breakpoint(断点调试);
对象
两种编程思想的对比
面向过程--Procedure Oriented Programming,分析出解决问题的不走,然后用函数逐一实现每一步,然后依次调用这些函数。
面向对象编程--Object Oriented Progamming.分析出系统中应该包含哪些对象以及他们之间的关系,再用特定语法描述这些对象和关系。
Java中class-->JVM->对象
类和对象的关系
类是“设计图”,用于描述一批对象的信息,它是抽象的,不是具体的实例。
对象是具体的,根据类的描述,由JWM创建出来的一个实例,这个过程叫做实例化。
类是自定义的数据类型,通过这个类创建对象,实际上就是初始化这种类型的变量。
class Car{...}
void main(Stirng[] args){
Car c=new Car();
}
类的定义
包的管理
为了便于类文件的管理,Java 中引入了包的概念 package,类的唯一性是要带包名的。
包的命名规范
- 英文字母小写
- 域名的倒序
- 一个Java源文件中,只能有一个package语句,而且必须放置在Java源文件的第一行。
- 在不同的包中,是可以定义相同类名的类的。因为一个类的唯一性是包含包名的,比如com.xxx.j96.oop.Demo1叫做类的全名。
- 在实际的企业开发中,是不允许出现没有包的类。
包的使用
-
使用 import 关键字将本类要使用的其他包中的类进行引入。
-
使用ALT+/可以单个引入,也可以使用CTRL+SHIFT+O全部引入。
-
如果要引入某个包下面的所有类,可以使用通配符*,例如,引入com.ntduduke.j96.oop.*,但是要注意通配符只能出现在最后。
-
对于 java.lang 包中的类,系统会自动的默认引入,不需要使用 import。
类的描述
- 属性
对象的静态特征;用变量来描述,这样的变量叫成员变量
- 行为
对象的动态特征;用方法来描述,这样的方法叫成员方法
修饰符 class 类名{
成员变量...
成员方法...
}
定义成员变量
语法: 修饰符 数据类型 变量名=初始值;
类型 | 初始值 | 类型 | 初始值 |
byte | 0 | float | 0.0F |
short | 0 | double | 0.0 |
int | 0 | char | '\u0000'(空字符) |
long | 0L | boolean | false |
引用类型 | null |
定义成员方法
语法:修饰符 返回类型 方法名(参数列表){...}
注意:成员方法不能被static关键字修饰;若成员方法没有返回值,则返回类型声明为void,此时方法体内无需return;
一个成员方法可以直接访问当前类中所有成员变量、成员方法;成员方法参数可以使基本数据类型,也可以是引用数据类型,包括自定义数据类型。
JVM内存模型
JVM启动时回想系统申请一块内存,它将这块内存划分为若干个子区域(堆、栈、方法区等),用以存储不同形式的数据
堆:存放引用类型的数据;这些数据之间是无序的;堆中数据是可以反复使用的;JVM会定期清理堆中的垃圾数据
栈:以方法为单元存储数据,这样的单元叫做方法栈帧;栈中存放的数据是有序的,遵循先进后出的规则;方法调用后,它占有的方法栈帧将会立刻释放。
对象的创建--new关键字
通过new关键字可以实现对象的实例化过程,实际上也就是对象的创建过程。
语法: 类名 对象名 =new 类名();
实例化对象的过程可以分为两个部分:声明对象 ;实例化对象(new)。
以Cat one =new Cat()为例:
声明对象:是在内存的"栈"空间里开辟了一块空间,取名叫one,此时里面为空(null),并且对它的属性和方法的调用是不允许的。所以因为这样我们并不能像真正的对象那样使用它
实例化对象:是在内存的“堆”空间里开辟了一块空间,完成了对象相关信息的初始化操作。
当实例化对象时,栈内存和堆内存各自都开辟了空间并联系起来,所以类的属性都存在默认值(未进行初始化时)。