【JAVA入门】关于static存在的必要性

       很多刚刚接触JAVA的人对于static并不是很懂(反正我当初是这样的),不明白他到底有什么用,什么静态非静态,压根不明白其作用和意义。今天本垃圾正好犯关于static的错误,特以此文以表对JAVA的尊重。

        这是我暑假项目实训的第一天,前几天无非是对JAVA的一些复习,今天的一个练习就是编写Complex的四则运算。

        话不多说,我先贴代码再解释。

        

package com.funyoo.complex.core;

public class Complex {
	private double real;
	private double virl;
	
	public Complex() {
		this(0.0, 0.0);
	}
	
	public Complex(double real, double virl) {
	//	this.real = real;
	//	this.virl = virl;
		setReal(real);
		setVirl(virl);
	}

	public Complex(double real) {
		this(real, 0.0);
	}

	public Complex(Complex complex) {
		this(complex.real, complex.virl);
	}
	
	
	public double getReal() {
		return real;
	}

	public void setReal(double real) {
		this.real = real;
	}

	public double getVirl() {
		return virl;
	}

	public void setVirl(double virl) {
		this.virl = virl;
	}

	// 加法
	public Complex add(Complex complex) {
		this.real += complex.real;
		this.virl += complex.virl;
		
		return this;
	}
	
	public static Complex add(Complex c1, Complex c2) {
		return new Complex (c1).add(c2);
		
	}
	
	//取反
	private static Complex opposite(Complex complex) {
		return new Complex(-complex.real, -complex.virl);
	}
	
	//减法
	public Complex sub(Complex complex) {		
		return add(this, opposite(complex));
	}
	
	public static Complex sub(Complex c1,Complex c2) {
		return add(c1,opposite(c2));
	}
	
	//乘法  
	public Complex mul(Complex complex) {
		double tmp = this.real * complex.real - this.virl * complex.virl;
		
		this.virl = this.real * complex.virl + this.virl * complex.real;
		this.real = tmp;
		
		return this;
	}
	
	public static Complex mul(Complex c1, Complex c2) {	
		return new Complex (c1).mul(c2);
	}
	
	//取倒数
	private static Complex reciprocal(Complex complex) {
		double model = complex.real * complex.real + complex.virl * complex.virl;
		
		if (Math.abs(model) < 1e-6)
			throw new ExceptionDivZero("0不能做除数!");
		
		return new Complex(complex.real / model, -complex.virl / model);
	}
	
	//除法
	public Complex div(Complex complex) {
		return mul(this, reciprocal(complex));
	}
	
	public static Complex div(Complex c1, Complex c2) {
		return mul(c1, reciprocal(c2));
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (! (obj instanceof Complex)){
			return false;
		}
		
		Complex other = (Complex) obj;
		if (Math.abs(this.real - other.real) > 1e-6)
			return false;
		if (Math.abs(this.virl - other.virl) > 1e-6)
			return false;
		return true;
	}
	
	@Override
	public String toString() {
		return "(" + real + "," + virl + ")";
	}
}

       这个直接是最终的代码。

       没改之前,我的各个方法都是没加static的,所以在我运用这个类里里面的方法的的时候,必须要先new一个对象,然后借助这个对象来“点”出其方法。即 
       

Complex complex = new Complex();

complex.方法名

但是如果这些方法是static修饰的,就可以不用new,直接用类名称加“点”调用其某个方法。

Complex.方法名

 

      有人会问,这有什么区别呢?无非是多new了一次而已。

      切记,这只是一个小练习,如果遇到的是一个项目,庞大且复杂。你每一次想使用某类的一个方法就要每new一次,就要把这个类所有的方法都“拿”出来,这样大大浪费了空间,而且每次如此复杂,语意性极差。

      所以,static的意义:

      方便以后编程,可以直接用类名称调用方法;

      节省了每次调用所需new对象的空间,做到“用后即抛”;

      增强语意性,精简代码。

全部评论

相关推荐

hanliu:1. 排版与格式问题字体与对齐问题:标题和内容的字体大小差异不够明显,无法迅速吸引目光。某些文字看起来有些拥挤(比如校园经历中的“班委成员”部分)。2. 内容逻辑性模块顺序问题:实习经历放在较靠后的位置,实际上这部分内容对应聘来说更重要,建议提前突出。细节表述不够突出:比如教育背景部分的专业课程仅仅列出名字,没有说明自己在这些课程中表现如何或者掌握了什么技能,缺乏量化描述。多余内容:例如“班委成员”和“宣传委员”这类校园经历,叙述过于普通,缺乏和岗位相关的实质性贡献。,建议简写。3. 措辞专业性表达不够精准:例如“协助班长与团支书更好地为同学服务”显得较为笼统,没有实际成果的体现。用词重复:如“学习了焊接”“学习了光检”等重复词语较多,缺乏丰富的动词来展示个人能力(如“负责”“优化”“改进”等)。技能展示不足:虽然列出了UG和CAD证书,但没有明确提到这些技能如何在实际工作中发挥作用。4. 技能匹配度技能深度不足:虽然列出了掌握的软件和技术,但没有描述技能水平(如“熟练掌握”“精通”),也没有具体案例支持这些技能。缺乏岗位导向性:比如针对机械设计与制造方向,实习经历提到了“E6尾灯项目”,但没有详细说明自己在其中的技术贡献,可能会显得经验描述泛泛而谈。5. 自我评价问题表达空泛:如“具有良好的沟通协调能力”“责任心强”之类的描述太常见,没有让人眼前一亮的特点。缺乏成果支持:自我评价中的能力没有用具体项目、经历或成就来验证,可信度较弱。 兄弟加油
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务