java 类中函数前加和不加static有啥不同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 类中函数前加和不加static有啥不同相关的知识,希望对你有一定的参考价值。

java 类中函数前加和不加有什么不同
像这样的
public class ClassName
static void prt(string s)
System.out.println(s);

void rprt(string s)
System.out.println(s);

static表示的静态。

    如果此函数是静态的,会在程序初始化过程中直接进行内存加载,此方法内的所有方法内容必须是静态的,否则会报错静态方法引用动态变量。方法调用:“类名.方法”

    如果此函数是动态的,那么只有在调用的时候才会被主动加载一次,之后释放内存。方法调用:必须先实例化出来一个类,之后再通过实例化类名+方法的形式调用。

参考技术A static void prt(string s)
System.out.println(s);

这个表示这个方法为静态! 在其它类中可以直接通过类名去调用这个方法!不需实例化一个对象!
而这个void rprt(string s)
System.out.println(s);

就只能在本包内调用访问!
参考技术B static表示这个方法为类方法,不属于任何对象实例,而是类所有,描述对象的共有动作,可以用类名直接调用:
ClassName.prt();而不需要new ClassName().prt("string");
参考技术C 这个表示这个方法为静态方法! 在其它类中可以直接通过类名去调用这个方法!例如
public static void main(String[] args)
ClassName.prt("abc");

如果不加static,则只有通过该类的对象去调用。
例如
public static void main(String[] args)
ClassName name=new ClassName();
name.prt("abc");
本回答被提问者采纳

Java中主类中定义方法加static和不加static的区别

      知识点:1.Getter and Setter 的应用
         2.局部变量与成员变量(也可叫做全局变量)
         3.Static关键字的用法
           a.成员变量被static修饰后的所有类的共享属性
           b.方法被static修饰之后,在本类内调用的类名省略问题;以及不用Static,即使在本类内也必须先实例化
         4.This关键字的用法
      this:是当前类的对象引用。简单的记,它就代表当前类的一个对象。
 
     注意:谁调用这个方法,在该方法内部的this就代表谁。
     
     this的场景:
         解决局部变量隐藏成员变量
 */
 //定义学生类
 class Person 
 {
     //姓名
     private String name="刘德华";
     //年龄
     private int age=45;
     //所有对象共享的属性用static修饰,可以直接被类名直接调用
     static String country = "中国";
     
     //姓名获取值
     public String getName() 
     {
         return name;
     }
 
     //姓名设置值
     public void setName(String name) 
     { //name = "林青霞";
         //name = name; //变量的使用规则:就近原则
         //这里是类名,目前还没有说过类似的用法,所以这个是有问题的
         //这里的调用只能通过对象名
         //这个对象如果存在,它应该代表的是Student的一个对象。
         //那么,谁能够代表当前类的对象呢? java就提供了一个关键字 this
         //Student.name = name;
         this.name = name;
     }
 
     //年龄获取值
     public int getAge() 
     {
         return age;
     }
 
     //年龄赋值
     public void setAge(int age) 
     {
         this.age = age;
     }
 }
 
 //测试类
 
 public class PersonClass 
 {
 
     public void show()//定义非静态方法,必须经过实例化后才能调用
                       
     {
         System.out.println("哈哈");
     }
     public static void show2()//但是当以静态方法后,可以直接用 类名.函数名
                              //调用,在本类内,类名可以忽略,这就是常见的public static...的由来
     {
         System.out.println("哈哈你妹");
     }
     public static void main(String[] args) 
     {
         //创建人对象
         Person s1= new Person();
         Person s2= new Person(); 
         PersonClass s3=new PersonClass();
         s3.show();//不能直接写show(),因为是非静态方法,必须实例化后通过实例调用
         show2();
         //给成员变量赋值
         s1.setName("林青霞");
         s1.setAge(27);
         s1.country="美国";//静态变量的值是共享的,所以以最后一次修改的为准,即全变成了日本
         s2.country="日本";//静态属性最好用类名直接调用,要不会警告的哦
         //Static 与Final是不同的哦,Static类似C语言的Extern,Final类似Define
         //Static定义的变量的值仍然是可以修改的,但是Final指定在定义的时候赋值一次
         //获取数据
         System.out.println(s1.getName()+"---"+s1.getAge());//直接用类名.调用Name和
                                                             //        age是绝对不可以的
         System.out.println(s2.getName()+"---"+s2.getAge());
         System.out.println(s1.country);//静态属性最好不要用类的实例调用,会警告的
         System.out.println(s2.country);
         System.out.println(Person.country);//Person.后面只提示country,
                                           //不会提示name和age哦
     }
 
 }

以上是关于java 类中函数前加和不加static有啥不同的主要内容,如果未能解决你的问题,请参考以下文章

Java中主类中定义方法加static和不加static的区别

Java基础(42):Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在祝方法调用,后者必须先实例化后用实例调用)

数据结构的函数名前加星号*和它的返回值有啥关系?

java函数加不加static有何不同

python中的类中属性元素加self.和不加self.的区别

python中的类中属性元素加self.和不加self.的区别