黑马程序员技术交流社区

标题: 静态内部类的小问题 [打印本页]

作者: 明锦添    时间: 2013-3-20 14:40
标题: 静态内部类的小问题
静态内部类中的成员变量和函数是不是都得用静态修饰呢?
作者: 赵晓东    时间: 2013-3-20 15:00
理论上是
作者: 孙晋学    时间: 2013-3-20 15:08
不用,静态类也可以有实例对象,成员函数和成员变量用实例对象调用就可以了
内部类内只要有静态成分就必须也是静态的
作者: 我手心里的宝    时间: 2013-3-20 15:09
不是的
当内部类中定义了静态成员,该内部类必须是static
但是,静态内部类中可以有非静态成员变量和方法
当内部类被static 修饰时,只能访问静态外部类中静态成员
作者: 芦青    时间: 2013-3-20 15:20
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("哈哈");               
                       
                }
        }
作者: 刘国涛    时间: 2013-3-20 15:32
静态内部类中可以有非静态成员,不过当内部类中定义了静态成员,该内部类必须是静态的。

class Outer
{
   static class Inner//静态内部类
   {
        static void function()//静态成员
        {
           System.out.println("innner :"+x);
        }
        void show()//非静态成员
        {
            System.out.println("inner show");
        }
   }
作者: MyNameIs520    时间: 2013-3-20 15:36
本帖最后由 吴上波 于 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();
        }

}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2