面向对象和面向过程:
都是解决问题的思维方式,都是代码的组成方式.
面向过程是一种"执行者思维",解决简单的问题可以使用面向过程
面向对象是一种"设计者思维",解决复杂,需要协作的问题,可以使用面向对象.
面向对象离不开面向过程
宏观上: 通过面向对象进行整体设计
微观上: 执行那个处理数据,仍然是面向过程
对象和类:
类:
类可以看成一类对象的模板,对象可以看成该类的一个具体事例
类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象
所应具有的共同属性,方法
对于一个类来说,有三种成员:属性field,方法method,构造器constructor
属性:用于定义该类或该类对象包含的数据或者说静态特征.属性作用范围是整个
类体.在定义成员变量是可以对其初始化,如果不对其初始化,java使用磨人的值对其初始化
属性的定义格式: [修饰符] 属性类型 属性名=[默认值];
方法:方法用于定义该类或该类实例的行为特征和功能实现.方法是类和对象行为特征的抽象.
面向对象中,整个程序的基本单位是类,方法是从属于类和对象的
方法的定义格式: [修饰符] 方法返回值类型 方法名(形参列表){
//n条语句
}
构造器4个要点:
*构造器通过new关键字调用!!
*构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),
不能在构造器里使用return返回某个值
*如果我们没有定义构造器,则编译器会自动定义一个无惨的构造方法,
如果已定义则编译器不会自动添加!
*构造器的方法必须和类名一致
*与普通方法一样,构造方法也可以重载
*修饰符 final abstract static不能用来修饰构造器
*Java虚拟机的内存可以分为三个区域:栈stack 堆heap 方法区method area
栈:
1.栈描述的是方法的执行的内存模型.每个方法被调用都会创建一个栈帧
(存储局部变量,操作数,方法出口等)***
2.JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数,局部变量等)***
3.栈属于线程私有,不能实现线程间的共享!***
4.栈的存储特性是"先进后出,后进先出"***
5.栈是由系统自动分配,速度快!栈是一个连续的内存空间!
堆:
1.堆用于存储创建好的对象和数组(数组也是对象)***
2.JVM只有一个堆,被所有线程共享***
3.堆是一个不连续的内存空间,分配灵活,速度慢!***
4.堆被所有线程所共享,在堆上的区域,会被垃圾回收期做进一步划分,
例如新生代,老年代的划分.
方法区:
1.方法区是java虚拟机规范,可以有不同的实现.
i, JDK7以前是"永久代"
ii, JDK7部分去除"永久代",静态变量,字符串常量池都挪到了堆内存中
iii, JDK8是"元数据空间"和堆结合起来.
2.JVM只有一个方法去,被所有线程共享***
3.方法区实际也是堆,只是用于存储类,常量相关的信息
4.用来存放程序永远是不变或唯一的内容.(类信息,静态常量,字符串常量等)
5.常量池主要存放常量:如文本字符串,final常量值.
重载
一个类中可以存在多个构造器
1. 方法重载: 两同三不同 同一个类方法名相同,形参类型 个数 顺序不同
2. 构造器重载: 只看形参即可 形参类型 个数 顺序不同。调用时按“就近最优原则”