java是面向对象而非过程,怎么解释呢?
当我们遇到一个问题首先会思考第一步要怎么做,第二步要怎么做,这,是面向过程的思维,是一种简单的线性思维
而面向对象就是简化问题,抽出局部,而不去纠结细节,将问题进行分类单独处理,不过最终也会对分类下的细节问题进行面向过程的思考
那么好处是什么,我认识是将大问题分成几个小问题然后一一解决,而不是从整体去思考怎么解决这个大问题,这很费脑
那么对象是什么?是一种抽象,将现实世界中可以明确标识的实体,看做一个对象,而将这些实体所独有的一些特征标识封装在一起,一个类中
那为什么叫面向对象而不是面向类,我觉得是从人的角度去观察世界而不是机器,所以把实体当作对象来会更好理解
而每一个对象都有行为,称之为动作,我们可以在类中定义一个方法来实现这个行为
那么怎么定义一个类?
首先有类名,有数据域,有无参、有参构造方法,方法。比如:
//定义一个人的类People
class People{
//定义类的属性,名字name,年龄age,这些就是数据域
String name = "wzw";
int age = "25";
//这是无参构造方法,和类同名
people(){
}
//这是有参构造方法
people(int age){
if(age>18){
System.out.print("成年啦");
}else{
System.out.print("未成年");
}
}
//这是一个说话的方法(行为)
public void speak(){
System.out.println("我说中文");
}
}
构造方法是什么?是一种特殊的方法,有一下特殊性:
1.构造方法必须与所在类名相同
2.构造方法没有返回值,连void 也不行
3.构造方法是在创建一个对象使用new操作符是调用的,作用就是初始化对象
4.如果我们没有定义构造器(构造方法),则系统会自动定义一个无参的构造方法
前面说过怎么访问对象,是通过引用变量和引用类型 类名 对象引用变量 = new 类名();
之前说到java的基本数据类型和引用类型,在这里:
对基本数据类型变量来说,对应内存所存储的值是基本数据类型,而引用类型,对应内存所存储的只是一个引用,是对象的存储地址
这里来扩展一下,
栈:
1.每个线程私有,不能实现线程间的共享
2.局部变量是放在栈中的
3.栈是由系统自动分配的速度快,而且栈是一个连续的空间
堆:
1.放置new 出来的对象
2.不是一个连续的空间
方法区(也是堆)
1.被所有线程共享
2.用来存放程序中永远不变或唯一的内容
java的垃圾回收机制:将对象赋值为null,或者该对象没任何指向时,系统会不定时扫描一遍,当空闲时就会把该分配的空间回收回来。
程序员可以通过System.gc().通知GC运行,但布保证会立即执行,finalize方法是用来释放对象或资源的,但尽量少用