JAVA俩类,用类的时候为什么Math类不需要new 呢
JAVA里面有StringBuffer类,append为里面的一个方法。下面俩程序为什么StringBuffer需要new,而Math,不需要new呢为什么Mathss=...
JAVA里面有StringBuffer类,append为里面的一个方法。下面俩程序为什么StringBuffer 需要new ,而Math,不需要new 呢 为什么Math ss=new Math();就会报错呢 StringBuffer类:public class T1 {
public static void main(String[] args) {
String str = "123张三丰";
StringBuffer bb = new StringBuffer ();
bb.append(str);
bb.append("aaa");
bb.append("shike");
System.out.println("dddd==="+bb.toString());
}
} Math类:public class Ddd {
public static void main(String[] args){
double d = Math.abs(-211.09);
System.out.println("d=="+d);
}
} 展开
public static void main(String[] args) {
String str = "123张三丰";
StringBuffer bb = new StringBuffer ();
bb.append(str);
bb.append("aaa");
bb.append("shike");
System.out.println("dddd==="+bb.toString());
}
} Math类:public class Ddd {
public static void main(String[] args){
double d = Math.abs(-211.09);
System.out.println("d=="+d);
}
} 展开
展开全部
1.StringBuffer为什么要new?
答:java是面向对象语言,简单的来说,就是化执行者为指挥者。而类的对象就是通过new关键字来创建对象的,再通过对象来引用成员变量和成员方法,这个深层的原因:和java在编译期对new转化的虚拟机指令有关系。这个不多说。
2.Math类为什么不需要new?
答:Math是JDK提供的一个工具类,1.6版本的申明源码如下:
public final class Math {
/**
* Don't let anyone instantiate this class.
*/
private Math() {}
如上面源码所示, 构造器私有化,所以无法创建对象,这就好比你使用单例模式,就需要私有化构造器来防止其他的人创建对象。再看方法:
public static int abs(int a) {
return (a < 0) ? -a : a;
}
源码中的方法都是静态方法,所以,这部分静态的方法在类加载的时候已经在方法区中申明出来了,不回参与你的对象实例化的过程,和对象创建没有关系。所以,静态的方法都是通过类型直接引用的,和你创不创建对象没有关系。这就是我为什么在上面写成员方法,为了和这里的静态方法区分开。
展开全部
我想指明一点,那个最快回答,不好意思你答的有些问题。我们查阅java的API文档,里面写得很清楚,public final class Math extends Object,并没有static作修饰,所以Math并非一个静态类,这也是很多人的一个误区。然而,我们继续查阅,public static double abs(double a),原来它的abs方法是静态的。那个根据静态的定义,如果一个方法是静态的,它是属于整个类的,可以用类名.方法来直接访问,也就不用new出一个实例对象来进行访问了,当然这样也是可以,这就能解释您的问题double d = Math.abs(-211.09);为什么不用new了。综上所述,Math类本身不是静态的,但它的方法以及成员变量都是静态的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我在来补充一@TOT_白鹿巷 的解释,其实他说的都对,但是回答的不够清楚在他的基础上我再来补充一点math类是从属于Java.lang包。Java常用工具包,这个包里的所有类你不用new就可以直接用,因为lang包是常用的包,这样设计就是为了用起来方便,因为它太常用了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-22
展开全部
Math是一个静态类哦,也就是用static修饰的,无需实例化,直接调用即可.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-22
展开全部
Math.abs是静态方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询