基础知识点(一)
一、 面向对象思想的好处
1、面向对象也是基于面向过程的编程思想,但是面向对象相比于面向过程更符合我们的思维方式,万物皆对象。
2、可以将复杂的问题简单化,大大提高了程序的可读性和可维护性
3、面向过程思想中,我们是程序的执行者,面向对象当中,我们是程序的调用者,这样的话也可以方便程序给其他人调用,提高了程序的扩展性
面向对象的三大基本特征以及五大基本原则:
基本特征:
1、封装
2、继承
3、多态
基本原则:
1、单一职责原则
2、里氏替换原则
3、依赖倒置原则
4、接口隔离原则
5、开放封闭原则
二、
类:类是抽象的,是一组相关的属性和行为的集合,一个模板。
对象:对象是具体的,是客观存在的实例,是该类事物的具体体现
属性——对象具有的各种特征
每个对象的每个属性都拥有特定值
方法——对象执行的操作
三、对象和类的关系:特殊到一般,具体到抽象。
类:我们叫做class。
对象:我们叫做Object, instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。
类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。
对象是Java程序的核心,在Java程序中“万事万物皆对象”。
JDK提供了很多类供编程人员使用,编程人员也可定义自己的类。
四、static关键字:(静态,共享)
静态的,可以修饰成员变量和成员方法。
l static关键字特点
n 随着类的加载而加载
n 静态变量属于类不属于对象
n 被类的所有对象共享
n 静态的内容存在于方法区的静态区
l static的使用
n 可以通过类名调用
n 类名.静态变量
n 类名.静态方法
.
只有静态才能访问静态,非静态变量不能够出现静态方法中, .静态环境下不能够出现this和super关键字,static不仅能够修饰成员变量,成员方法,还能够修饰类,修饰类的时候必须内部类, static还可以修饰代码块,静态代码块一般都是用来初始化静态成员.
五、代码块{}
1.局部代码块: 定义在类的局部位置限定局部变量的作用域
2.构造代码块: 定义在类的成员位置,用来抽取多个构造方法重复的代码
优先于构造方法执行
3.静态代码块: static修饰的代码成为静态代码块
静态代码块一般用初始化静态成员
静态代码块只会执行一次,在类加载的时候执行
执行顺序:
静态代码块 > 构造代码块 > 构造方法
静态代码块只执行一次,在类加载的时候执行
构造代码块和构造方法在类创建的时候执行,可以执行多次
重写和重载的区别?
答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同 的参数列表(参数类型不同、参数个数不同或者二者都不同甚至是参数顺序不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
重写:
1.发生在父类与子类之间
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常(里氏代换原则)
父类中私有方法以及用final修饰的类不被重写
重载:
1.重载Overload是一个类中多态性的一种表现
2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准
重写的注意事项:
1.私有方法不能被重写,因为私有方法不能够被继承,所以谈不上重写
2.构造方法能不能重写? 不能,因为构造方法不能够被继承,所以构造方法不能够被重写
3.子类重写父类的方法时,访问权限修饰符不能更低,严格
4.返回值类型相同或者是其子类
构造方法可以被重载但不可以被重写
final修饰成员方法不能够被子类重写
this和super
static静态的上下文中不能出现this和super
this:代表当前类的对象引用
this特点
1、类里每一个非静态方法以及属性被创建都会有一个隐藏的this引用,this指向这个方法的对象,可以通过调用这个this来调用在堆区里对应的对象
2、当在方法中使用本类的属性时,都会隐含地使用this名称,当然也可以明确指定。
3、this可以看作是一个变量,它的值就是当前对象的
4、this使用场景
当局部变量和成员变量同名时使用this关键字
5、this关键字可以访问本类构造函数
6、在构造方法中使用this必须放在第一行
Super:
1、super理解为一个父类对象,那么super应该可以用访问父类的成员
2、super不能够访问父类私有的成员
3、任何一个本类的成员同时也可以使用super访问父类的成员
4、在构造方法中使用super必须放在第一行
六、构造方法:
1、构造方法分为两种:无参构造方法和有参构造方法。
2、构造方法不能被继承,不能重写,但构造方法可以重载。
3、构造方法的名字必须与定义他的类名完全相同,没有
4、主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的
七、final
1.final修饰类不能够被子类继承
2.final修饰的变量表示常量
3.final修饰成员方法不能够被子类重写
八、成员变量和局部变量
1、作用域不同
成员变量作用全局,对于他所存在的整个类都是有效的,所以成员变量也叫全局变量
局部变量作用在它被创建的方法里,从方法的一个花括号{ 方法体}到结尾的一个花括号里就是它的作用域
当成员变量和局部变量重名时,采取就近原则
2、在JVM内存中不同
成员变量存在于堆区中,有默认值;
局部变量存在于栈区中,没有默认值;
所以在定义成员变量时可以不赋初始值,而定义局部变量则需要赋初始值
3、生命周期不同
成员变量是存在于堆区中的,它随着它所作用的对象创建而被创建,但对象被垃圾回收机制GC销毁对象时,成员变量被销毁
局部变量是存在栈区中的,它相当是引用,它随着它所作用的方法被调用而创建,随着该对象被调用结束而被销毁
九、值传递和引用传递
当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是按值传递还是按引用传递?
答:
1、基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的。值传递。
2、对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。传递地址。