面向对象的三个主要特征是
封装性:内部的操作对外部不可见,当内部的操作都不可直接使用的时候才安全
继承性:在已有结构的基础上进行功能的扩充
多态性:是在继承性的基础上扩充而来的概念,指的是类型的转换处理。
面向对象的开发有三个步骤:
OOA:分析
OOD:设计
OOP:编程
类与对象:
类是对某一类事物的共性的抽象概念
对象描述的是一个具体的产物。
类中一般由两部分组成:成员属性和操作方法。
String是引用数据类型,默认值是null
类也是引用数据类型。
内存分为:
堆内存:保存的是对象的具体信息,在程序之中堆内存空间的开辟是通过new来完成的
栈内存:保存堆内存的地址,即通过地址找到堆内存,然后找到对象信息
引用传递:同一块堆内存可以被不同的栈内存所指向,也可以更换指向
引用传递有时候会有垃圾空间的产生,垃圾空间指的是没有任何栈内存指向的堆内存
所有的垃圾都会被GC(Garbage Collector垃圾收集器)回收并释放,但是垃圾过多会影响GC的处理性能,从而降低程序的整体性能
一个栈内存只能保存一个堆内存地址,如果发生更改,则之前的数据则会彻底消失。
属性封装:
利用private关键字对属性进行封装处理。属性封装之后外部将不能直接访问,即外部不可见。但是对类的内部是可见的。如果要访问封装的属性,则需要:
【setter,getter】设置或获取属性可以使用getXXX(),setXXX()方法,如public void setName(String n)
类中的属性大多要用private进行封装,并提供相应的getter,setter方法
构造方法:
使用类传统一般有两步:1对象实例化 2 通过setter对类中的属性设置内容。
但如果属性比较多,则比较繁琐,为了解决对象初始化提供了构造方法:通过构造方法来实现实例化对象中的属性初始化处理。
即只有在关键字new的时候使用构造方法,构造方法的定义:
1、构造方法名称必须与类名称保存一致
2、构造方法不允许设置返回值类型,即没有返回值定义(为了与普通方法区分)
3、构造方法是在使用new进行实例化对象的时候自动调用的
java里考虑到程序的完整性,所有的类都会提供构造方法,如果没有程序里没写构造方法,那么在程序编译的时候会自动创建一个无参的,什么也不做的构造方法。
构造方法可以重载,一般按照参数的多少进行排序。
this的使用
this.属性
this()调用构造方法,this.普通方法()
注意 this()只允许放在构造方法的首行。
构造方法相互调用时必须保留出口。
简单java类
是可以描述某一类信息的程序类,没有复杂的逻辑操作,只作为信息存储的媒介存在。其核心的开发结构为:
类名称必须有意义,可以明确的描述某一类事物;
类中的所有属性用private进行封装,并提供getter,setter 方法;
类中可以提供有无数个构造方法,但必须保留有无参构造;
类中不允许出现任何输出语句,所有内容的获取必须返回;
【非必须】可以提供有一个获取对象详细信息的方法,暂时将方法定义为getInfo();
static:
定义个公共属性,全局数据区,对于其访问需要注意:
虽然可以使用对象来访问,但最好是通过所有对象的最高代表(类)来访问,所以static可以用类名称来调用。
static虽然定义在类中,但并不受到类实例化对象的控制。可以在没有实例化对象的时候使用。
在以后类设计时,首选的是非static属性。考虑到公共信息存储的时候才用static
static方法有两种static方法和非static方法。这两个方法之间的区别:
static方法只允许调用static属性或者方法
非static方法允许调用static属性或者方法
static属性或者方法都不是在编程之初需要考虑的内容,只有在回避实例化调用并且存放公共属性的时候才会考虑使用。
代码块
:普通代码块、构造块、静态块、同步代码块(多线程才会用的)
构造块定义在在类中,它会优于构造方法执行,并且每一次实例化的时候都会调用构造块。
静态代码块是用static定义的,它会优于构造块执行,并且不管有多少实例化对象只会执行一次,它主要是为了类中的静态属性初始化
静态代码块在主类中时:会优选于主方法执行。