点击上方蓝字“轮子工厂”关注公号
后台回复“我要造轮子”获取100本经典图书
来源:部分来源于网上收集整理
在公众号的后台回复关键词【 面试宝典】可获取Java程序员面试必看的经典书籍!
单例设计模式:
(1)设计模式:解决某类问题行之有效的方法,是一种思想,是规律的总结
为了避免其他程序建立该类对象,先禁止其他程序建立该类对象,即将构造函数私有化
为了其他程序访问到该类对象,须在本类中创建一个该类私有对象
为了方便其他程序访问到该类对象,可对外提供一个公共访问方式。
单例设计模式的两种方式
class Student{
private Student(){}
private static final Student s = new Student();
public static Student getInstance()
{
return s;
}}B:懒汉式 当使用的使用,才去创建对象。class Student{
private Student(){}
private static final Student s = null;
public static Student getInstance()
{
if(s==null)
{
//线程1就进来了,线程2就进来了。
s = new Student();
}
return s;
}}
饿汉式和懒汉式的区别:
饿汉式是类一加载进内存就创建好了对象;
懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了getInstance()方法时,对象才开始创建。
懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题,可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了,所以可以加双重判断来提高程序效率。
注:开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候容易发生问题
Math类的使用(重点)
数学操作类:该类没有构造函数,方法均为静态的
成员变量:
E:比任何其他值都更接近e(即自然对数的底数)的double值。
PI:比任何其他值都更接近pi(即圆的周长与直径之比)的double值。
成员方法:
static double abs(double a)
-
返回 double 值的绝对值。返回绝对值
返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。
static double floor(double a)
-
返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
max:返回两个值中较大的那个min:返回两个值中较小的那个static long round(double a) 返回最接近参数的 long。static int round(float a) 返回最接近参数的 int。static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0static double pow(double a, double b)返回第一个参数的第二个参数次幂的值static double sqrt(double a)返回正确舍入的 double 值的正平方根
Random类的使用(重点)
产生随机数的类
构造方法:
Random() 创建一个新的随机数生成器。
成员方法:
int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值
Scanner类的使用
可以获取从键盘的输入数据
构造方法:
Scanner(InputStream source) 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。<br/>http://System.in);
继承(重点)
把很多类的相同特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系。
继承的体系结构:
多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系。这个体系叫做继承体系。
继承的特点:
java中只能单继承,没有多继承
java可以有多重(层)继承
继承的好处:
继承的出现提高了代码的复用性
继承的出现让类与类之间产生了关系,提供了多态的前提。
子父类中的成员关系
成员变量:在子类方法中使用一个变量时,首先,在方法的局部变量中找这个变量,有则使用。否则,在本类中找成员变量,有则使用。否则,在父类中找成员变量,有则使用。否则,报错。
成员方法:用子类对象使用一个方法时。首先,在子类中找这个方法,有则使用。否则,在父类中找这个方法,有则使用。否则,报错。
重写和重载的区别?
重载:在同一类中。方法名相同,参数列表不同。重载可以改变返回类型。
重写:在不同类中(子父类中)。方法声明相同(返回类型,方法名,参数列表均相同)。
重写需要注意:
子类方法的访问权限要大于等于父类方法的访问权限。
静态只能重写静态。但是这种情况一般不会出现。
构造方法
子类的实例化过程,子类创建对象时,会先去创建父类的对象。默认是去调用父类的无参构造方法。子类构造方法中,第一行默认是super()
为什么子类中第一行会默认有super()?
因为他继承父类的成员使用,使用前这些成员必须初始化,而他们是父类的成员,所以,必须通过父类进行初始化。所以,会先创建一个父类的对象。
this和super的区别
this:代表本类对象的引用。
super:代表父类的存储空间。final关键字(重点)
最终的意思,可以用于修饰类,方法,变量。
final修饰的类不能被继承。
final修饰的方法不能被重写。
final修饰的变量是一个常量。只能被赋值一次。
内部类只能访问被final修饰的局部变量。抽象类(重点)
多个类有相同的方法声明,但是方法体不一样。这个时候,我们考虑把方法声明进行抽取。让子类继承后,自己去实现方法体。没有方法体的方法,我们需要用抽象标志下。
抽象的关键字是:abstract。
抽象类:该方法称为抽象方法,包含抽象方法的类就是抽象类。
抽象类的特点:
抽象类和抽象方法都要用abstract进行修饰
抽象类不能被实例化
抽象类中不一定有抽象方法,但是,有抽象方法的类一定是抽象类。
抽象类中数据的特点
抽象类中可以有变量,也可以有常量。
抽象类中可以有抽象方法,也可以有非抽象方法。
抽象类是一个类,所以,它有构造方法。
虽然本身不能实例化。但是可以给子类实例化使用。
抽象类中的问题
A:抽象类中是否有构造方法?能不能被实例化?如果不能,为什么有构造方法?
抽象类有构造方法。
抽象关键字abstract不可以和哪些关键字共存?
private:
final:
static:
抽象类中可不可以没有抽象方法?如果可以,这样的类有什么用吗?
抽象类可以没有抽象方法。
抽象类中没有抽象方法的作用,只是为了不让别的类建立该抽象类对象。这个在awt中有体现。
接口interface
当一个类中的方法都是抽象的时候,java提供了另一种表示方式,叫接口。
用interface关键字表示。类与接口关系用implements表示。
接口的成员特点
成员变量
A:类与类的关系
是继承关系。类与类只能单继承,可以多重继承。
B:类和接口的关系<br/>
是实现关系。类可以多实现接口。
类在继承一个类的同时,可以实现多个接口。
C:接口和接口的关系
是继承关系。接口可以多继承接口。
接口的特点:
是对外暴露的规则
接口和抽象类的区别
抽象类只能被单继承
抽象类中的数据特点:
成员变量:可以是变量,也可以是常量
成员方法:可以是抽象方法,也可以是非抽象方法
构造方法:有构造方法
接口中的数据特点:
成员变量:是常量。默认修饰 public static final
成员方法:都是抽象方法。都有默认修饰 public abstract
构造方法:没有构造方法
抽象类中定义的是继承体系中的共性功能。
抽象类被继承是”is a”关系:xx是yy的一种,
为你推荐以下文章