Java面向对象编程之关键字static、main方法的语法、单例设计模式

类属性、类方法的设计思想

● 类属性作为该类各个对象之间共享的变量。在设计类时,分析哪
些属性不因对象的不同而改变,将这些属性设置为类属性。相应
的方法设置为类方法。

如果方法与调用者无关,则这样的方法通常被声明为类方法,由
于不需要创建对象就可以调用类方法,从而简化了方法的调用。

static关键字

● 使用范围:
➢在Java类中,可用static修饰属性、方法、代码块、内部类
●被修饰后的成员具备以下特点:
➢随着类的加载而加载
➢优先于对象存在
➢修饰的成员,被所有对象所共享
➢访问权限允许时,可不创建对象,直接被类调用

类变量

●类变量(类属性)由该类的所有实例共享
在这里插入图片描述
在这里插入图片描述

类方法

● 没有对象的实例时,可以用类名.方法名()的形式访问由static修饰的类方法。
● 在static方法内部只能访问类的static修饰的属性或方法,不能访问类的非static的结构。
在这里插入图片描述
● 因为不需要实例就可以访问static方法,因此static方法内部不能有this。(也不能有super ? YES!)
● static修饰的方法不能被重写

class Person {
	private int id;
	private static int total = 0;
	public static void setTotalPerson(int total){
		this.total=total;    //非法,在static方法中不能有this,也不能有super
	}
	public Person() {
		total++;
		id = total;
	}
}
public class PersonTest {
	public static void main(String[] args) {
		Person.setTotalPerson(3);
	}  
}

修饰属性:静态变量

属性,按照是否使用static修饰分为静态属性和非静态属性(实例变量)

  • 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。
  • 静态变量:我们创建了类的多个对象,多个对象共享同一个静态变到当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。

注:静态变量随着类的加载而加载,可以通过"类.静态变量"的方式进行调用;
静态变量的加载要早于对象的创建;
由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中;
类变量 实例变量
类 yes no
对象 yes yes

修饰方法:静态方法

1.随着类的加载而加载,可以通过”类,静态方法”的方式进行调用
2.静态方法非静态方法
类yes no对象yes yes
3.静态方法中,只能调用静态的方法或属性非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性

static注意点

在静态的方法内,不能使用this关键字、super关键字

单例设计模式

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。
在这里插入图片描述

单例设计模式的优点

在这里插入图片描述
举例:Java.lang.Runtime

实现方法

懒汉式

class Singleton {
	// 1.私有化构造器
	private Singleton() {
	}
	// 2.内部提供一个当前类的实例
	// 4.此实例也必须静态化
	private static Singleton single;
	// 3.提供公共的静态的方法,返回当前类的对象
	public static Singleton getInstance() {
		if(single == null) {
		single = new Singleton();
		}
		return single;
	}
}

懒汉式暂时还存在线程安全问题,讲到多线程时,可修复。

饿汉式

class Singleton {
// 1.私有化构造器
	private Singleton() {
	}
	// 2.内部提供一个当前类的实例
	// 4.此实例也必须静态化
	private static Singleton single = new Singleton();
	// 3.提供公共的静态的方法,返回当前类的对象
	public static Singleton getInstance() {
		return single;
	}
}

两者的区别:

饿汉式:坏处:对象加载时间过长。好处:饿汉式是线程安全的
懒汉式:好处:延迟对象的创建。
目前的写法坏处:线程不安全。—>到多线程内容时,再修改

应用场景

在这里插入图片描述

main 方法的语法

● 由于Java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public,又因为Java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接收一个String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数。
● 又因为main() 方法是静态的,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,我们在之前的例子中多次碰到。

命令行参数用法举例

在这里插入图片描述

面试题

在这里插入图片描述
答案:Yes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值