【Java学习笔记】static方法和非static方法的区别

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。静态方法可以直接通过类名调用,任何的实例也都可以调用。因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。

因此以下代码中,func_static方法只能访问num2成员,而func方法可以同时访问num1和num2。

 1 public class test {
 2     private int num1 = 1;
 3     private static int num2 = 2;
 4     
 5     public static void func_static(int n) {
 6         num2 = n;
 7     }
 8     
 9     public void func(int n) {
10         num1 = n;
11         num2 = n;
12     }
13 }

 

相关问题

Q1:java中的main方法,为什么是静态(static)的?

A:这样JVM可以直接调用某个类文件的main方法,而不用创建一个实例。

 

Q2:java中如何实现类似C中struct结构体。比如二叉树的节点。

A:两种方法。

第一种,单独新建一个类文件TreeNode.java。代码如下。

1 public class TreeNode {
2     int val;
3     TreeNode left;
4     TreeNode right;
5     TreeNode(int num){val = num;}
6 }

第二种,在当前类文件里建一个内部类。代码如下。

 1 public class test {
 2     
 3     public static class TreeNode {
 4         int val;
 5         TreeNode left;
 6         TreeNode right;
 7         TreeNode(int num){val = num;}
 8     }
 9     
10     public static void main(String[] args) {
11         // TODO Auto-generated method stub
12         TreeNode node = new TreeNode(1);
13     }
14 }

这里值得注意的是我们在建立内部类TreeNode时声明了static。如果不是static,第12行代码会报错:No enclosing instance of type test is accessible. Must qualify the allocation with an enclosing instance of type test (e.g. x.new A() where x is an instance of test).

转载于:https://www.cnblogs.com/yellowzp/p/5380740.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值