什么方法可以通过“java实例方法名.方法名()”调用

通过对象或者类名直接调用方法的方式区别
1.静态方法,比较适合工具类、静态工厂等,必须考虑多线程问题。静态方法属于类本身,而非类的实例,所以可以用“类名.方法名”调用。
2.new就不用说了吧。
3.Class.forName(“”)也存在线程安全问题,所以建议和Thread.getCurrentThread().getClassLoader结合使用。Class.forName(“”)返回Object需要类型转换,newInstance方法无法执行有参数的构造函数。用反射包的Constructor也非常不方便。反射类库,包括Class.forName().newInstance适合用在框架设计领域,一般编程不建议使用,性能也比普通调用低很多。
4.DAO如果没有属性,理论上说是可以用静态方法的,但一定要保证方法的原子性,否则线程安全是一个大问题。而且,这样做失去了OO的所有特征。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!在java中可以用类名.方法名调用方法吗?一般不是用对象名调用方法吗?_百度知道
在java中可以用类名.方法名调用方法吗?一般不是用对象名调用方法吗?
我有更好的答案
静态方法可以使用类名.方法名进行调用举例class&A{ void&print(){
System.out.println(&你好&); } static&void&getNum(){
System.out.println(&2+6=&+(2+6)); }}public&class&DemoTest&{ public&static&void&main(String[]&args)&{
A.getNum();//静态方法,&可以&类名.方法名直接调用
A&a&=&new&A();
a.print();//非静态方法需要实例对象来调用
a.getNum();//静态方法也可以实例对象来调用,但是不推荐这种方式调用静态方法 }}输出2+6=8你好2+6=8
采纳率:89%
来自团队:
class&A{&public&void&methodA(){&&&&&//&菲静态方法,使用对象实例调用&}&public&static&void&methodB(){&&&&&//&静态方法,使用类名调用&:&&A.methodB()&}&&//调用示例&public&static&void&main(String[]&args){&&&A&objA&=&new&A();&&objA.methodA();&&&&A.methodB();&&&&//A.methodA()&&,&会报错&&//&objA.methodB()&,不会报错,但是会警告,不建议这样使用&&}&&}
静态方法可直接通过对象.方法调用
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。书上说Java中方法要用类名调用,我发现
上说Java中方法要用类名调用,我发现在方法中直接写方法名一样可以调用,不知道有什么问题没,
下面是我自己写的一段代码
import java.util.S
import java.util.S
public class shijinzhizhuanerjinzhi {
//名字写的有点长,这是我写的一个十进制转2进制的类public static void convert(int t){Stack&Integer& stack=new Stack&Integer&();//用到泛型while(t!=0){stack.push(t%2);//除幂法t=t/2;}System.out.print(stack);//这句代码的意思是打印栈中的元素while(!stack.isEmpty()){//System.out.print(stack);这句话是一个死循环,因为没有对象出栈System.out.print(stack.pop());}}public static void main(String[] args) {Scanner inn=new Scanner(System.in);System.out.println("请输入一个正整数");number=inn.nextInt();convert(number);//它和下一句代码没有类名调用效果相同,不知道有什么不同//shijinzhizhuanerjinzhi.convert(number);inn.close();}
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!知道类名,方法名,和参数这三个字符串,怎么调用函数_Java教程_动态网站制作指南
知道类名,方法名,和参数这三个字符串,怎么调用函数
来源:人气:1511
知道类名,方法名,和参数这三个字符串,怎么调用函数  现有三个字符串,一个是类名,一个是方法名,一个是方法的参数,三个都是字符串。现需要调用该方法,具体操作如下。  1)、先获得该类。
Class cname=
cname = Class.forName (classname);
} catch (ClassNotFoundException e) {
e.intStackTrace();
  Class.forName (classname);该方法的作用是通过反射获取这个类对象,关于反射请参考http://www.cnblogs.com/xiufengd/p/4723426.html,或自己百度。  2)、获取方法Method[] methodes = cname.getDeclaredMethods();for (int i = 0; i & methodes. i++){
method = methodes[i];
if (method.getName().equals(methodName))
//其他操作
}}  反射后获得的类对象有一个方法:getDeclaredMethods(),该方法的作用是获得类或接口声明的所有方法。然后循环遍历获得的方法数据,通过getName方法判断与要求方法相同的方法,然后获得这个Method对象。  3)、调用方法Object result=if(arg.equals("")){
result = method.invoke(cname,null);}else if(arg.split(",").length==1){
result = method.invoke(cname, arg);}  Method对象有一个方法为invoke方法,该方法有两个参数,第一个表示类名,第二个表示参数,该方法的作用就是调用cname这个类的method方法,方法的参数为arg。目前存在的问题:  因为arg这个参数是一个字符串,所以所有的操作只能在具体方法中再进行分割成参数数组,然后调用多个参数。
优质网站模板某项目中,我们的代码使用的2个不同库中的图形类:
  Circle,Triangle
这两个类中都有一个获取面积的方法接口,但是接口的名字不一样
统一这些接口,不关心具体的接口,只要我调用统一的接口,对应的面积就会计算出来
如何解决这个问题?
  定义一个统一的接口函数,通过反射:getattr进行接口调用
#!/usr/bin/python3
from math import pi
class Circle(object):
def __init__(self, radius):
self.radius = radius
def getArea(self):
return round(pow(self.radius, 2) * pi, 2)
class Rectangle(object):
def __init__(self, width, height):
self.width = width
self.height = height
def get_area(self):
return self.width * self.height
# 定义统一接口
def func_area(obj):
# 获取接口的字符串
for get_func in ['get_area', 'getArea']:
# 通过反射进行取方法
func = getattr(obj, get_func, None)
return func()
if __name__ == '__main__':
c1 = Circle(5.0)
r1 = Rectangle(4.0, 5.0)
# 通过map高阶函数,返回一个可迭代对象
erea = map(func_area, [c1, r1])
print(list(erea))
  通过标准库operator中methodcaller方法进行调用
#!/usr/bin/python3
from math import pi
from operator import methodcaller
class Circle(object):
def __init__(self, radius):
self.radius = radius
def getArea(self):
return round(pow(self.radius, 2) * pi, 2)
class Rectangle(object):
def __init__(self, width, height):
self.width = width
self.height = height
def get_area(self):
return self.width * self.height
if __name__ == '__main__':
c1 = Circle(5.0)
r1 = Rectangle(4.0, 5.0)
# 第一个参数是函数字符串名字,后面是函数要求传入的参数,执行括号中传入对象
erea_c1 = methodcaller('getArea')(c1)
erea_r1 = methodcaller('get_area')(r1)
print(erea_c1, erea_r1)
阅读(...) 评论()

我要回帖

更多关于 lookup使用方法及实例 的文章

 

随机推荐