一、面向对象(oop):
编程语言主要分为两大类:面向对象,面向过程。
- 面向过程:**面向过程性能比面向对象高。**因为类的调用需要实例化,开销大,比较耗费资源,所以当性能是最重要的考量因素的时候,比如单片机,嵌入式开发、Linux/unix等一般采用面向过程开发。但是面向过程没有面向对象易维护、易复用、易扩展。
- 面向对象:**面向对象易维护、易复用、易扩展。**因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,面向对象性能比面向过程更低。
-
构造方法的作用是什么?若一个类没有构造方法,程序可以执行吗?
主要作用是完成对类对象的初始化工作。
可以执行。因为一个类即使没有声明构造方法也会有默认的不带参数的构造方法。如果我们自己添加了类的构造方法(无论是否有参),Java就不会再添加默认的无参的构造函数
-
在Java中定义一个不做事且没有参数的构造方法的作用
Java程序在执行子类构造方法之前,如果没有用super来调用父类特定 的构造方法,则会调用父类中没有参数的构造方法。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有super()来调用父类中的特定的构造方法,则编译时会发生错误,因为Java程序在父类中找不到没有参数的构造方法可以执行。解决办法就是在父类程序中加一个不做事且没有参数的构造方法
-
构造器Construcor是否可以被重写(override)
构造器不能被重写,但是可以被重载。所以一个类中可以有多个构造函数的情况。
-
构造方法的特性:
- 名字与类名相同
- 没有返回值
- 生成类的对象时自动执行,无需调用
-
在调用子类构造方法之前会先调用父类的无参构造,其目的是:
创建子类对象前要先创建父类对象,以帮助子类做初始化工作
-
成员变量与局部变量的区别是:
- 从语法形式上来看,成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public、private、static等修饰符所修饰,而局部变量不能被访问控制修饰符以及static所修饰;但是成员变量以及局部变量都可以被final修饰
- 从变量在内存中的存储方式来看:如果成员变量是使用static修饰的,那么这个成员变量是属于类的,如果没有用static修饰,这个成员变量是属于实例的。而对象存在于堆内存中,局部变量则存在于栈内存中。
- 从变量在内存中的生存时间上来看:成员变量是属于对象的一部分,它会随着对象的创建而存在,局部变量随着方法的调用二自动消失。
- 成员变量如果没有被赋初值:则会自动以类型的默认值而赋值(一种情况例外:被final修饰的成员变量必须显式地赋值),而局部变量不会自动赋值。
二、修饰符
-
访问修饰符:
访问修饰符(也称权限修饰符) 有:public/protected/private。还有一种访问权限就是不写任何关键字(有的地方称为包访问修饰符)
如果一个类或者接口声明为public,那么它可以被任何代码访问
未声明访问修饰符的类或接口类型隐式拥有包访问权(Package-Access)
如果类或接口类型式包访问声明的,那么只能从声明它的包访问它。
引用类型的成员(类、接口、字段、方法)或类类型的构造函数,只能在该类型式可访问且成员或构造函数声明允许时才可访问
- 如果如果成员或构造函数声明未public,则允许访问
- 如果缺少访问修饰符的接口成员都是隐式public
成员或构造函数被声明为private,当且仅当它发生在包含成员或构造函数声明的类的主体中时,访问才被允许
对象的protected成员或者构造函数可以从包的外部访问,仅由实现该类对象的代码声明。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PZUzlq3c-1603196033736)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201019171110360.png)]
-
final
final关键字,意思是最终的,不可修改的。用来修饰类, 方法,和变量。有以下特点:
-
final修饰的类不能被继承,final类中的所有成员方法都会被隐式的指定为final方法;
-
final修饰的方法不能被重写。
-
final修饰的变量是常量,如果是基本数据类型的变量,则其数值一旦被初始化之后便不能被更改;
如果是引用类型的变量,则在对其初始化之后便不能让其指向另外一个对象。
-
-
static
static关键字主要有以下四种使用场景:
- 修饰成员变量和成员方法:被static修饰的成员不属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名直接调用。被static声明的成员变量属于静态的成员变量,静态成员变量存放在java内存区域的方法区。调用格式:
类名.静态变量名
、类名.静态方法名()
- **静态初始化器(静态代码块):**静态代码块定义在类中方法外,静态代码块在非静态代码块之前执行((静 态代码块—>非静态代码块—>构造方法)。该类不管创建多少个对象,静态代码只执行一次。
- **静态内部类:**静态内部类与非静态内部类之间存在一个最大的区别:非静态内部类在编译完成之后会隐含的保存着一个引用,该引用时指向创建它的外围类。但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2. 它 不能使用任何外围类的非static成员变量和方法。
- 静态导包(用来导入类中的静态资源,1.5之后的新特性:格式为: import static 这两个关键字 连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使 用类中静态成员变量和成员方法。
- 修饰成员变量和成员方法:被static修饰的成员不属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名直接调用。被static声明的成员变量属于静态的成员变量,静态成员变量存放在java内存区域的方法区。调用格式: