1,基本知识
面向过程编程: 开发一个一个的方法,有数据要处理了,我们就调方法来处理。强调的是做事情的每一个步骤,逐个步骤完成功能。侧重于步骤
面向对象编程: 开发一个一个的对象来处理数据,把数据交给对象,再调用对象的方法来完成对数据的处理,侧重于对象,让对象来解决这个问题。强调的是通过对象完成功能,强调使用具有某个功能的物件做事情;
类:类是一个模板,它描述一类对象的行为和状态。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等
对象:对象是类的一个实例,有状态和行为
2,多个对象在计算机中的执行原理
首先编译后的代码都在方法区中,知道正在执行的方法会进入到栈中,所以这里首先main方法入栈,new关键字会在堆中开辟空间,来存储Student对象,并把对象的引用(地址值)返回到栈中,而堆中只存储局部变量,方法依然是引用方法区中的地址,唯有等到调用的时候,才会入栈,执行。这也是为什么栈中存储的是局部变量,而堆中存储的是成员变量。
简单总结: 只有需要马上执行的方法才会入栈。new出来的对象java会在堆中开辟空间存储对象,并把对象的引用返回到栈中。因为上面两个原因,所以方法中的局部变量是存储在栈中,而类中的成员变量存储在堆中。
3,类和对象的一些注意事项
- 类名建议是大驼峰 即: StudentTest
- 类中定义的变量叫做成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)
- 成员变量有默认值,局部变量没有默认值,必须要赋值,否则报错
- 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。
- 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
- 如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。
- 易错点: 因为类是引用类型,就跟前面的数组一样,当多个变量指向一个对象的时候,如果一个改变其值,其他的变量再去访问对应的数据,就是改变后的。原理图同数组。
4,this关键字
this是一个变量,可以用在方法中,来拿到当前的对象。 即表示当前类的对象。
this目前主要的作用;是为了区分局部变量和成员变量。比如:
public class Demo {
private String name;
public Demo(String name) {
this.name = name;
}
}
那么this是哪来的?这一把它看作在方法中的一个参数,是虚拟机默认的即可
public class Demo {
private String name;
public Demo(String name/*,Demo this*/) {
this.name = name;
}
}
5,构造器
构造器的格式: 其实在上面已经使用,
无参构造器:
public <修饰符> 类名(){
}
有参构造器:
public 类型(参数列表){
使用this关键字进行赋值操作
}
构造器的注意事项:
-
类在设计时,如果不写构造器,Java是会为类自动生成一个无参构造器的。
-
一旦定义了有参数构造器,Java就不会帮我们的类自动生成无参构造器了,此时就建议自己手写一个无参数构造器出来了。
构造器的作用:
构造器常用于完成对象初始化(常见的应用场景是完成对象的成员变量的初始化赋值)
6,封装
什么是封装?
就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。
封装的设计规范:
合理隐藏,合理暴露
不让用户直接对成员变量赋值,而对通过一些公开的方法实现,即:隐藏成员变量,暴露公共方法,通过private关键字
7,实体类 — javaBean
就是一种特殊形式的类:
这个类中的成员变量都要私有,并且要对外提供相应的getXxx ,setXxx方法
类中必须要有一个公共的无参的构造器。
8,成员变量和局部变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
类中的位置不同 | 类中,方法外 | 常见于方法中 |
初始化值不同 | 有默认值,不需要初始化赋值 | 没有默认值,使用之前必须完成赋值 |
内存中的位置不同 | 堆内存 | 栈内存 |
作用域不同 | 整个对象 | 在所归属的大括号中 |
生命周期不同 | 与对象共存亡 | 随着方法的调用而生,随着方法的运行结束而亡 |