1.static
某些特定的数据在内存空间里只有一份
类属性作为该类各个对象之间共享的变量。在设计类时,分析哪些属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法设置为类方法。
如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。
使用范围:
在Java类中,可用static修饰属性、方法(静态方法中不能用this、super)、代码块、内部类
被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享
访问权限允许时,可不创建对象,直接被类调用

2.单例设计模式
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对 某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
实现步骤:
1.私有化构造器、
2.静态方法返回对象,(因为构造器私有化了,就不能使用new创建新对象了,只能内部创建对象,但是内部创建的对象不能被调用,所以必须使用静态方法返回创建的对象)
3.变量也是静态的,(因为静态方法只能方法静态成员变量)
//单例设计模式:只存在一个实例对象
//饿汉式:提前造好对象
public class Human {
//3.成员变量也是静态的
private static String name;
// 1.私有化构造器
private Human (){}
// 2.静态方法创建对象,返回对象,实例也必须静态化
private static Human h = new Human();
public static Human getInstance(){
return h;
}
}
//单例设计模式:只存在一个实例对象
//懒汉式:现用现造对象,存在线程安全问题
public class Human {
//3.成员变量也是静态的
private static String name;
// 1.私有化构造器
private Human (){}
// 2.实例也必须静态化
private static Human h ;
// 2.调用方法时返回创建的实例,方法也是静态的
public static Human getInstance(){
if (h==null){
h = new Human();
}
return h;
}
}
网站的计数器,一般也是单例模式实现,否则难以同步。
应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志
文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库
资源。
项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置
文件数据,都生成一个对象去读取。
Application 也是单例的典型应用
Windows的Task Manager (任务管理器)就是很典型的单例模式
Windows的Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程
中,回收站一直维护着仅有的一个实例。
3.main方法
public static void main(String [] args){}
java虚拟机调用类的main方法,所以main方法必须public
执行方法时又不用创建对象,所以是static静态的
参数是一个String类型的数组,保存执行时传递给所运行的类的参数

可以正常运行,public class 必须与文件名相同,class不一定与文件名相同
一个.java文件可以包含多个类,但是只能有一个public class 且必须与文件名相同
4.代码块
代码块作用:对java类或对象进行初始化、先于构造器执行
分为两种:
静态代码块:初始化static属性
非静态代码块:
5.成员变量赋值顺序

6.final
在Java中声明类、变量和方法时,可使用关键字final来修饰,表示“最终的”。
final标记的类不能被继承。提高安全性,提高程序的可读性。
String类、System类、StringBuffer类
final标记的方法不能被子类重写。
比如:Object类中的getClass()。
final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只
能被赋值一次。
final标记的成员变量必须在声明时或在每个构造器中或代码块中显式赋
值,然后才能使用。
final double MY_PI = 3.14;
public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
// o = new Other();
o.i++;
} }
class Other {
public int i; }
//正确,我们只修改了对象o的成员变量,如果修改o=new Other()就错了
7.抽象类、抽象方法
随着子类不断实现具体功能,父类则变得越来越抽象,所以将父类设计成一个抽象类
含有抽象方法的类必须被声明为抽象类。
抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重 写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。
不能用abstract修饰变量、代码块、构造器;
不能用abstract修饰私有方法、静态方法、final的方法、final的类。
问题1:为什么抽象类不可以使用final关键字声明?抽象类有子类,final不能有子类
问题2:一个抽象类中可以定义构造器吗? 可以有构造器,但不能new,但是可以由子类使用
问题3:是否可以这样理解:抽象类就是比普通类多定义了抽象方 法,除了不能直接进行类的实例化操作之外,并没有任何的不同?可以
8.模板方法设计模式
换句话说,在软件开发中实现一个算法时,整体步骤很固定、通用,
这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽
象出来,供不同子类实现。这就是一种模板模式。
本文深入探讨了Java中的核心概念,包括static关键字的使用,详细阐述了单例设计模式的实现,解析了main方法的重要性及其特性。同时,讨论了代码块的作用和成员变量的赋值顺序,以及final关键字的作用。此外,文章还介绍了抽象类、抽象方法在面向对象设计中的角色,并讲解了模板方法设计模式的应用。
5万+

被折叠的 条评论
为什么被折叠?



