A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 明锦添 中级黑马   /  2013-3-20 14:40  /  1544 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态内部类中的成员变量和函数是不是都得用静态修饰呢?

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

6 个回复

正序浏览
本帖最后由 吴上波 于 2013-3-20 15:38 编辑

如果一个内部类中有定义static的成员变量或成员方法,那么这个内部类必须定义为静态内部类
并不是静态内部类的所有成员变量或方法都是静态的,譬如下面这个内部类

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class DoubleClass {

        static class Inner {
                String number = "10086";

                void iCall() throws IOException {
                        System.out.println("你正在拨打:" + number);
                        saveCount();
                }

                static void saveCount() throws IOException {
                        
                        File file = new File("info.txt");
                        if (!(file.exists()))
                                file.createNewFile();
                        FileReader fr = new FileReader("info.txt");
                        Properties prop = new Properties();
                        prop.load(fr);
                        int count;
                        if (prop.getProperty("count") != null) {
                                count = Integer.parseInt(prop.getProperty("count"));
                                count++;
                        } else
                                count = 1;
                        prop.setProperty("count", String.valueOf(count));
                        FileWriter fw = new FileWriter("info.txt");
                        prop.store(fw, "");
                        System.out.println("你已经拨打" + count + "次");
                }
        }

        public static void main(String[] args) throws IOException {
                Inner inCall = new Inner();
                inCall.iCall();
                //调用静态方法
                DoubleClass.Inner.saveCount();
        }

}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
静态内部类中可以有非静态成员,不过当内部类中定义了静态成员,该内部类必须是静态的。

class Outer
{
   static class Inner//静态内部类
   {
        static void function()//静态成员
        {
           System.out.println("innner :"+x);
        }
        void show()//非静态成员
        {
            System.out.println("inner show");
        }
   }

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
1,当内部类被静态修饰时,内部类成员可以不被静态修饰..
2,但当内部类方法被静态修饰时,内部类也必须被静态修饰..

1,例如:
class Wai
{
        static class nei
        {
                void shou()
                {
                       
                        System.out.println("哈哈");               
                       
                }
        }

2例如:
class Wai
{
        static class nei
        {
                static  void shou()   //内部类成员函数被静态修饰时..内部类也必须被静态所修饰..
                {
                       
                        System.out.println("哈哈");               
                       
                }
        }
回复 使用道具 举报
不是的
当内部类中定义了静态成员,该内部类必须是static
但是,静态内部类中可以有非静态成员变量和方法
当内部类被static 修饰时,只能访问静态外部类中静态成员

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
不用,静态类也可以有实例对象,成员函数和成员变量用实例对象调用就可以了
内部类内只要有静态成分就必须也是静态的
回复 使用道具 举报
理论上是
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马