对上一篇java的面向对象笔记进行补充。
在java面向对象中,构造函数也算是比较重要的一部分了。构造函数不同于普通的函数,在构造函数中它具有以下3个特点:
1.函数名与类名相同。
2.不用定义返回值类型。
3.不可以写return语句。
其作用是给对象进行初始化。当一个类中没有定义构造函数的时候,那么系统会默认给该类加入一个空参数的构造函数,如果在类中自定义了构造函数后,默认的构造函数就没有了,同时如果两个类存在继承关系的话,在类的第一行都有一个空参数构造函数的父类引用被隐藏了。
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
为了实例化想要实例的对象便引入了构造代码块。构造代码块的作用是给对象进行初始化,对象一建立就运行,而且优先于构造函数执行。和构造函数不同的是:构造代码块是给所有对象进行统一初始化,而构造函数式对对应的对象初始化。
在构造函数中加入了两个关键词:this 和super。他们是用于区分局部变量和成员变量同名的情况。this是代表本类对象,谁调用this,this代表的就是谁。在构造函数中this和super都只能在构造函数的第一行,因为初始化要先运行。
在java中static关键词代表的是静态。它用于修饰成员(成员变量和成员函数)。当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用歪,还可以被类名直接调用,写法为:类名.静态成员。
static的特点有四点:
1随着类的加载而加载(寿命长)。
2优先于对象向存在(类的加载就在运行了,不需要创建对象)。
3被所有对象所共享(被访问的权限)。
4可以直接被类名所调用(类名.静态成员)。
使用静态也时的注意事项:
1.静态方法只能访问静态成员,不可以访问非静态。而非静态可以访问静态(静态被所有对象所共享)。
2.在静态方法中可以不定义this,super关键词字(因为静态优先于对象存在,所以静态中不可以出现)。
当功能内部没有访问到非静态数据时,可以定义静态函数。同时,在静态方面也有个小的技术点叫做静态代码块。它的格式如下:
static
{
静态代码块中执行的语句。
}
它随着类的加载而加载并且只执行一次。
main函数(主函数)是静态的,他是一个特殊的函数,作为程序的入口,可以被jvm(java虚拟机)所调用。主函数是固定格式的,其中的关键词分别代表着:
public:代表着该函数的访问权限是最大的。
static:代表着主函数随着类的加载就已经存在了,同时主函数是静态的。
void:代表着主函数没有具体的返还值。
(String[]arr):这是函数的参数,参数类型是一个数组,概述族中的元素是字符串类型的数组。
在java中,为了解决一个类在内存中只存在一个对象的最行之有效的方法叫做单例设计模式,在该类设计模式中对象时唯一的。
范例:
饿汉式:
class Single
{
private static Single s=new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
懒汉式:
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
s = new Single();
retuen s;
}
}
其中 懒汉式在多线程模式下是存在安全隐患的,修改后的懒汉式如下:
class Single
{
private static Single s = null;
privata Single(){}
public staitc Single getInstance()
{
if(s==null)
{
synchornized(Single.class)
{
if(s==null)
s=new Single();
}
}
return s
}
}
在正常的开发时应使用的是饿汉式,在面试的时候一般会考查的是懒汉式。
在继承中存在一个比较重要的关键字叫做final。这个关键字是最重的意思。finall具有以下特点:
1.final可以修饰类,方法,变量。
2.final所修饰的类不可以被继承。
3.final修饰的方法不可以被覆盖。
4.final修饰的变量是一个常亮,只能被赋值一次。
5.内部类智能访问被final修饰的局部变量。
在面向对象中也存在着两种特殊的类:抽象类和匿名内部类。
抽象类的特点是:
1.抽象方法一定在抽象类中
2.抽象方法和抽象类都必须被abstract关键词修饰。
3.抽象类不可以用new创建对象,因为调用抽象方法没有意义。
4.抽象类中的方法要被使用,必须由子类复写其所有的抽象方法后才能建立子类对象调用。如果子类只复写了部分抽象方法那么这个类还是抽象类,还不可以创建对象。
匿名内部类就是内部类的简写格式,示例如下:
public class Demo
{
public static void main(String[] args)
{
Thread t =
new Thread()
{
public void run()
{
for (int i = 1; i <= 5; i++)
{
System.out.print(i + " ");
}
}
};
t.start();
}
}
其中的红色部分就是匿名内部类。