静态方法和非静态

static表示静态的。
他需要常驻内存,一直占用内存,无法进行垃圾回收,需慎用,他在那种情况适用呢?
不管哪个对象调用,结果都是一样的(这个结果的一致指的是你输出的数据图案的一致性等等),调用可直接用类名字调用,不许要变量名了。和对象就没有关系了。
之前所说的对象是是Java中所面对的东西,也就是你要用程序解决问题的哪一个,Java是面对对象的语言,
建立方法最好是单独定义一个类,类里面存在共同的特征。就相当于一个模板
当你建立方法的时候你最好单独把方法集中放在一个类中,,这样不同的对象皆可应用这个类,用 “ ,“表示所属关系
静态方法和非静态方法的调用内存方式是不一样的,静态得是占了一个存储空间,他就不变了,而非静态是随你调用方法(通过new调用构造方法)时开始开辟内存,一个变量对应一个指定的内存,当你调用完以后,你开辟的内存随之消失,
public class Methoud {
String name;
String age;
String love;
void xuan() {
System.out.println("人生是需要一定的智慧,学会换位思考.逃避不一定躲的过,面对不一定最难过,每个人的心里都潜藏着一条悲伤的河流.如若我能飞翔,我将带你起航爱的旅程. ");

  }String love() {
          return love;

}
}
这是我们所设的方法
public class Usemethoud {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Methoud s1=new Methoud();//通过new调用构造方法
	s1.name="liu";
	s1.age="18";
	s1.love="wu";
	s1.xuan();//对象名.方法名调用方法
	System.out.println(s1.love);
}

}
这就是我们所使用的方法
以下是我在csdn上所找的文章,可更好的理解静态方法和非静态方法
静态方法(static method)
与静态成员变量一样,属于类本身,在类装载的时候被装载到内存中,不自动进行销毁,会一直存在内存中,直到JVM关闭;

非静态方法(non-static method)
又称实例化方法,属于实例对象,实例化之后才会分配内存,必须通过类的实例来引用,当实例对象被JVM回收之后,也跟着消失

静态方法和实例方法的区别
1.生命周期
静态方法的生命周期从进程创建时就开始,一直到进程结束,所以说静态方法是全局的,贯穿整个进程

实例方法的生命周期,从实例化对象开始,一直到实例化对象被注销回收之后结束

所以实例方法的生命周期是短于静态方法的生命周期,这也是实例方法中不能调用静态方法的原因

2.调用方式
在外部调用静态方法时,可以使用 “类名.方法名”的方式,也可以使用“对象.方法名”的方式,也就是说调用静态方法时无需创建对象

实例方法只能使用“对象.方法名的方式”

3.访问限制
静态方法在访问本类的成员时,只允许访问静态成员(即静态变量和静态方法),而不允许访问实例成员变量和实例方法;而实例方法则无此限制

实例成员变量是属于某个对象的,在静态方法执行时,并不一定存在该对象;同理,如果允许静态方法访问实例成员方法,就间接的可以访问实例成员变量,所以也不能访问实例成员方法;基于同样的道理,静态方法中也不能使用关键字this

4.执行顺序
当一个class文件被ClassLoader load进入JVM之后,方法指令保存在Stack中,此时Heap区并没有数据。然后程序技术器开始执行指令,如果是静态方法,直接依次执行指令代码,当然此时指令代码是不能访问Heapshuju数据区的;如果是实例方法(实例方法有一个隐含的传入参数,该参数是JVM给它的,这个参数就是实例对象在Stack中的内存地址,因此实例方法才可以找到在Heap中属于自己的数据),则在调用前必须实例化该对象,在Heap中分配数据,并将Stack中的内存指针通过JVM的隐含参数传给实例方法。若不实例化直接调用,由于隐含参数没有值,会报错。

eg:new Person().eat();
Void可指方法没有返回值,没有返回值的方法可直接调用。即方法名+实参,
以下是一个·打出图案的代码例子
public static void main(String[] args) {
// TODO Auto-generated method stub
print(5,8);//方法名+实参
}
static void print (int x ,int y) {//此处利用了void而且也没有返回值
for(int i=1;i<=x;i++) {
for(int t=1;t<=y;t++) {
System.out.print("%");
}
System.out.println();
}

}
}
Java的方法调用在同一个包里,创建一个对象,调用方法,如果是在不同包里,导包(包都是在一个文件里),你命名的方法也得是公开的,即public
在定义方法的时候,你还得注意几点,
变量的定义,结果变量是谁,中间变量是谁,;实参是谁,都是必须要清楚的
Java是面对对象的语言,你也得有面对对象的思想
赋值表达式你可认为是用来保存实参或你想要得到结果的值的式子
在方法的运行过程中,实参与形参值之间的传递是单向的,实参会把值传给形参,但是形参不会把值传给实参。
在定义方法的时候最好是一个类完成一个功能,然后单元测试,测试这个方法好不好用
方法重载定义:
指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。调用时,会根据不同的参数自动匹配对应的方法。

注意:

不同的含义:形参类型、形参个数、形参顺序
只有返回值不同不构成方法的重载,例如:int a(String str) {} 与 void a(String str) {}
只有形参的名称不同,不构成方法的重载
public class Methoud {
static int max(int x,int y) {
int z;
z=x>y?x:y;
return z;
}
static double max(double x,double y) {
double z;
z=x>y?x:y;
return z;
}
static float max(float x,float y) {
float z;
z=x>y?x:y;
return z;
}
}
这是我在同一个类中定义的方法相同的名字,不同类型
在Java中允许有多个相同的方法,但是要求同名的方法的参数类型和个数必须不能相同,切记返回值的类型不能作为重载方法的依据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值