12.java中面向对象--关键字Static、main方法等(5)(附讲解与练习)

关键字: static

static关键字的使用
1.static:静态的

2.static可以用来修饰:属性、方法、代码块、内部类

3.使用static修饰属性:静态变量(类变量)
3.1属性,按是否使用static修饰,又分为:静态属性vs非静态属性(实例变量)
**实例变量:**我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。
**静态变量:**我们创建了类的多个对象,多个对象共享同一个静态变量。当通幸某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
3.2 static修饰属性的其他说明:
①静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用
②静态变量的加载要早于对象的创建。
③由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
④ 类变量 实例变量
类 yes no
对象 yes yes
3.3 静态属性举例:System.out; Math.PI;

4.使用static修饰方法:
①随着类的加载而加载,可以通过"类.静态方法"的方式进行调用
② 静态方法 非静态方法
类 yes no
对象 yes yes
静态结构与类共存,非静态结构与对象共存,对象又是基于类存在的
③非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
在这里插入图片描述
5. static注意点:
5.1 在静态的方法内,不能使用this关键字、super关键字
5.2关于静态属性和静态方法的使用,大家都从生命周期的角度去理解】

6.开发中,如何确定一个属性是否要声明为static的?

属性是可以被多个对象所共享的,不会随着对象的不同而不同的。
类中的常量也常常声明为static

开发中,如何确定一个方法是否要声明为static的?

操作静态属性的方法,通常设置为static的
工具类中的方法,习惯上声明为static的;比如:Math、Arrays、Collections

在这里插入图片描述
在这里插入图片描述
练习:编写一个类实现银行账户的概念,包含的属性有“帐号”、“密码”、“存款余额”、“利率”、“最小余额”,定义封装这些属性的方法。 账号要自动生成。编写主类,使用银行账户类,输入、输出3个储户的上述信息。考虑:哪些属性可以设计成static属性。
下面展示一些 Account

package com.atguigu.exer;
/*
 * 编写一个类实现银行账户的概念,包含的属性有“帐号”、“密码”、“存款余额”、“利率”、“最小余额”,
 * 定义封装这些属性的方法。账号要自动生成。
	编写主类,使用银行账户类,输入、输出3个储户的上述信息。
	考虑:哪些属性可以设计成static属性。

 * 
 * 
 */
public class Account {
	
	private int id;
	private String pwd = "000000";
	private double balance;
	
	private static double interestRate;
	private static double minMoney = 1.0;
	private static int init = 1001;//用于自动生成id使用的
	
	public Account(){
		id = init++;
	}
	
	public Account(String pwd,double balance){
		id = init++;
		this.pwd = pwd;
		this.balance = balance;
	}
	
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public static double getInterestRate() {
		return interestRate;
	}
	public static void setInterestRate(double interestRate) {
		Account.interestRate = interestRate;
	}
	public static double getMinMoney() {
		return minMoney;
	}
	public static void setMinMoney(double minMoney) {
		Account.minMoney = minMoney;
	}
	public int getId() {
		return id;
	}
	public double getBalance() {
		return balance;
	}

	@Override
	public String toString() {
		return "Account [id=" + id + ", pwd=" + pwd + ", balance=" + balance + "]";
	}
	
	
	
}

下面展示一些 AccountTest

package com.atguigu.exer;

public class AccountTest {
	
	public static void main(String[] args) {
		
		Account acct1 =  new Account();
		Account acct2 =  new Account("qwerty",2000);
		
		Account.setInterestRate(0.012);
		Account.setMinMoney(100);
		
		System.out.println(acct1);
		System.out.println(acct2);
		
		System.out.println(acct1.getInterestRate());
		System.out.println(acct1.getMinMoney());
	}
	
}

单例设计模式:

  1. 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。

  2. 如何实现?
    饿汉式 vs 懒汉式

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

下面展示一些 SingletonTest1

public class SingletonTest1 {
	public static void main(String[] args) {
//		Bank bank1 = new Bank();
//		Bank bank2 = new Bank();
		
		Bank bank1 = Bank.getInstance();
		Bank bank2 = Bank.getInstance();
		
		System.out.println(bank1 == bank2);
	}
}

//饿汉式
class Bank{
	
	//1.私有化类的构造器
	private Bank(){
		
	}
	
	//2.内部创建类的对象
	//4.要求此对象也必须声明为静态的
	private static Bank instance = new Bank();
	
	//3.提供公共的静态的方法,返回类的对象
	public static Bank getInstance(){
		return instance;
	}
}

下面展示一些 SingletonTest2

package com.atguigu.java2;
/*
 * 单例模式的懒汉式实现
 * 
 */
public class SingletonTest2 {
	public static void main(String[] args) {
		
		Order order1 = Order.getInstance();
		Order order2 = Order.getInstance();
		
		System.out.println(order1 == order2);
		
	}
}


class Order{
	
	//1.私有化类的构造器
	private Order(){
		
	}
	
	//2.声明当前类对象,没有初始化
	//4.此对象也必须声明为static的
	private static Order instance = null;
	
	//3.声明public、static的返回当前类对象的方法
	public static Order getInstance(){
		
		if(instance == null){
			
			instance = new Order();
			
		}
		return instance;
	}
	
}

 单例模式的优点:
由于单例模式只生成一个实例, 减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。

单例(Singleton)设计模式-应用场景
 网站的计数器,一般也是单例模式实现,否则难以同步。
 应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作, 否则内容不好追加。
 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。
 项目中, 读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,都生成一个对象去读取。
 Application 也是单例的典型应用
 Windows的Task Manager (任务管理器)就是很典型的单例模式
 Windows的Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。

理解main方法的语法

main()方法的使用说明:

  1. main()方法作为程序的入口
  2. main()方法也是一个普通的静态方法
  3. main()方法可以作为我们与控制台交互的方式。(之前:使用Scanner)
    下面展示一些 MainTest

public class MainTest {
	
	
	public static void main(String[] args) {//入口
		
		Main.main(new String[100]);
		
		MainTest test = new MainTest();
		test.show();
		
	}	
	public void show(){
		
	}
}


class Main{
		
	public static void main(String[] args) {
	
		for(int i = 0;i < args.length;i++){
			args[i] = "args_" + i;
			System.out.println(args[i]);
		}
		
	}
	
}

下面展示一些 MainDemo

//main()方法可以作为我们与控制台交互的方式。

public class MainDemo {
	
	public static void main(String[] args) {
		
		for(int i = 0;i < args.length;i++){
			System.out.println("*****" + args[i]);
			
			int num = Integer.parseInt(args[i]);
			System.out.println("#####" + num);
			
		}
		
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java,使用static关键字可以定义静态变量或静态方法。下面是一个判断三边是否构成三角形的例子: ``` class Triangle { static boolean isTriangle(double a, double b, double c) { return (a + b > c) && (a + c > b) && (b + c > a); } } ``` 使用时,可以直接通过类名调用静态方法: ``` if (Triangle.isTriangle(3, 4, 5)) { System.out.println("构成三角形"); } else { System.out.println("不构成三角形"); } ``` ### 回答2: Java类和对象static关键字是指在类定义一个静态变量或静态方法,这个变量或方法被所有的对象所共享,它不依赖于任何对象的状态或实例化,而是属于整个类的属性和方法。 检验三边是否构成三角形的代码可以使用静态方法来实现。在一个三角形类Triangle,我们可以定义一个静态方法judgyTriangle(int a, int b, int c),这个方法接受三条边长作为参数,返回一个字符串类型的结果,表示这三条边是否能够构成一个三角形。 我们可以使用三角形不等式来进行判断,根据三角形不等式定理,三条边a,b,c能够构成一个三角形的充要条件是a+b>c,b+c>a,a+c>b。因此,我们只需要将这三个条件结合起来,编写一个静态方法,就可以判断三条边是否能够构成一个三角形。 下面是代码实现: ``` public class Triangle { public static boolean isTriangle(int a, int b, int c) { return a+b>c && b+c>a && a+c>b; } } ``` 在这个例子,我们定义了一个名为isTriangle的静态方法,它接受三个int类型的参数a,b,c,返回一个boolean类型的结果。这个方法使用了三角形不等式的定理来判断三条边能否构成一个三角形。如果三边能够构成一个三角形,返回true,否则返回false。 在使用静态方法时,我们不需要创建Triangle类的实例对象,可以直接使用Triangle.isTriangle(3,4,5)这样的静态方法调用语句,来判断三边是否构成一个三角形。 ### 回答3: 在学习Java类和对象时,我们常常会遇到静态关键字static的使用。在本篇文章,我们将介绍如何使用static关键字来检验三条边是否能够构成一个三角形。 在Java,静态关键字static可以被用来定义类变量和类方法。类变量是指在类声明的变量,而不是在方法声明的局部变量。这些变量可以被所有的类实例共享,因此在静态方法通常使用类变量来实现某些功能。静态方法也类似,它可以在不创建对象的情况下被直接调用。因此,在需要进行一些不需要访问对象状态的操作时,我们通常使用静态方法。 对于检验三边是否构成一个三角形的问题,我们可以使用一个静态方法来实现。具体方法如下: ```java public class Triangle { private double a,b,c; public Triangle(double a,double b,double c) { this.a = a; this.b = b; this.c = c; } public static boolean isTriangle(double a,double b,double c) { if(a+b>c && a+c>b && b+c>a) { return true; } else { return false; } } public static void main(String[] args) { double a = 3.0; double b = 4.0; double c = 5.0; if(isTriangle(a,b,c)) { System.out.println("三角形成立"); } else { System.out.println("三角形不成立"); } } } ``` 在上面的代码,我们首先定义了一个Triangle类,其包括一个构造方法和一个静态方法isTriangle。构造方法用于初始化三边的长度,而静态方法isTriangle则用于判断三边是否能够构成一个三角形。如果三边的长度满足三角形的性质,即任意两边之和大于第三边,则返回true;否则返回false。 最后在main方法,我们定义了三个变量a、b、c,并用它们来调用isTriangle方法。如果返回值为true,则输出“三角形成立”,否则输出“三角形不成立”。 总之,使用静态关键字来实现检验三边是否构成三角形的问题是非常简单的,只需要在方法前面加上static关键字即可。而对于其他类似的问题,我们也可以根据需要自行选择是否使用静态方法或类变量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原来如此呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值