对象 =>Object
写代码是为了解决客观生活中的一些“物体”打交道
需要先使用代码把现实生活中的物体表示出来 => 对象
抽象=>反义词具体
现实中的物体可能非常复杂,通过抽象的方式,把显示中复杂的物体变得简单一些
C语言的结构体是一种用户自定制类型
Java中的类也是一种用户自定制类型,类功能相比于结构体来说要强大很多,“高配结构体”Java中的对象就是某个自定义类型创建出的变量
面对对象编程的过程
1. 先根据实际问题,创建一些对象出来,每个对象都会包含一些数据和行为
2. 结合这些对象再来一步步的考虑先执行什么后执行什么
实例化:根据这个类,创建出这个类的对象(给定一个类型,定义这个类型的变量)
Java程序运行的时候需要又一个main方法
类的创建:
1. class关键字为起始
2. 类中可以包含属性和方法
类的实例化(对象的创建):使用new这样的关键字来进行创建类的使用:
1. 先更具类创建出对象
2. 使用对象成员操作符,就能够访问到对象的属性和方法
Java中的成员变量如果没有初始话,会被设置成一个默认值,而C语言中的结构体成员变量,如果没有初始化,会得到一个随机值。
static关键字
可以修饰成员变量,也可以修饰方法
如果一个成员变量或者方法,没有static的话,这个成员变量和方法都是和具体的对象强相关的如果一个成员变量或者方法又static修饰,这个成员变量或者方法就和具体的对象无关,而和这个类相关
不带static的时候,属性和对象相关,就可以创建另一个对象,保存另外一组属性
带static,即使创建多个对象,static的属性始终只有一份,只是和这个类相关
把带static的属性直接叫做类属性static修饰方法的规则也类似
如果一个方法带了static,那么就需要通过“类名.”的形式来调用如果一个方法没带static,那么就需要通过“对象.”的形式来调用
static方法就是一个和具体对象无关的方法,如果要在这个方法中使用普通成员变量,由于普通成员是和对象相关,这里就存在矛盾,static方法不知道访问的成员是那个对象的成员
面对对象程序设计主要有三个重要的特性
1. 封装
2. 继承
3. 多态
写代码的过程本质是在对代码的复杂程度进行管理封装就是管理代码复杂程度的核心手段
面对对象中的 封装,主要涉及两种角色
1. 类的实现者(创建者)
2. 类的调用者(使用者)
类的实现只由实现者来关注,类的调用者不需要关注类的实现细节,类的调用者在使用的时候学习成本和使用成本就比较低
private:
被private修饰的成员变量或者方法,就只能在当前类内部使用,不能再类外部使用
我们希望让类的属性和方法尽可能的是private,public的方法要尽量少,使用者使用成本就越低
对于private的成员,如果想要在类的外部来使用,可以通过一些public的方法来完成getXX / setXX(get方法/set方法)
最好也不要无脑给每个成员变量都创建get/set方法,这样的方法越多,就越破坏封装
类中有一种特殊的方法,构造方法:
1. 构造方法的名字和类名一样
2. 构造方法没有返回值
3. 构造方法不需要程序员手动调用,会在new这个类的对象的时候自动调用构造方法
一个类至少要有一个构造方法,如果不写构造方法,编译器会自动生成一个不带参数的构造方法
this:
1. this能够访问成员变量
2. this也能调用方法
3. this()就能调用构造方法
构造的先后顺序:
1. 先执行就地初始化的部分
2. 再执行构造代码块种的部分
3. 最后再执行构造方法种的部分
普通的构造代码块,每次创建对象都执行
staic修饰的代码块,只在类加载的时候才执行,和创建对象无关
类加载:类.java => .class(硬盘上的) 运行Java程序的时候 JVM就会把 .class文件从硬盘上加载到内存中(方法区)
包起到的作用不光是类似于目录结构的效果,也有命名空间的效果
toString 是一种比较特殊的方法。任何一个类都可以实现一个toString方法。这个方法一般不需要手动调用,会在需要把这个类转成字符串的时候就会被执行到(println)
形如 @Override 这样的语法再 Java种叫做 “注释”.
实现toString方法的时候必须要加上@Override
toString 方法本质上是Object这个类的方法。
自己写的类其实都是默认继承了Object类