java吧 关注:1,263,123贴子:12,764,309

献给同是小白的你。

只看楼主收藏回复

献给同是小白的你,希望我们早日成为大白。
先简短一介绍,楼主之前做过java一段时间,后来因为一些原因两年没做了,现在在重新学习,下面是我的学习总结,随着楼主的学习推进不断更新,面向对象之前的最基础内容不再赘述。因为你我同是小白,小白这个物种是有共同语言的,所以,我觉得我们之间的可以更好的沟通,共同学习,你我共勉。大牛如果有时间,错误的地方,还请指教一二。


1楼2015-11-30 15:10回复
    有的地方,楼主都是用白话写的,会显得有些罗嗦,希望大家不要介意。楼主很用心,希望大家给点支持。


    2楼2015-11-30 15:11
    回复
      2025-06-07 20:03:30
      广告
      public class demo {
      /**
      * @param args
      */
      public static void main(String[] args) {
      // TODO Auto-generated method stub
      }
      }
      public class Car {
      String color;
      int number;
      void run(){
      System.out.println(color+": :"+number);
      }
      }
      public class showTool {
      public static void show(Car cc){
      cc.color="red";
      cc.number=4;
      cc.run();
      }
      }
      public class CarDemo2 {
      /**
      * @param args
      */
      public static void main(String[] args) {
      // TODO Auto-generated method stub
      /*Car c=new Car();
      c.color="red";
      c.number=4;
      c.run();
      Car c1=new Car();
      c1.color="red";
      c1.number=4;
      c1.run();
      */
      /*
      * 以上代码重复,复用性比较差,只有对象不同而调用的成员和赋值都相同
      * 可以进行抽取定义一个功能。将重复代码封装*/
      /*
      * 封装功能后使用,就简单了*/
      Car c1=new Car();
      Car c2=new Car();
      Car c3=new Car();
      Car c4=new Car();
      showTool tool=new showTool();
      tool.show(c1);//可以简化成new showTool().show(new car());把匿名对象作为实际参数进行传递
      tool.show(c2);
      tool.show(c3);
      tool.show(c4);
      }
      //功能结果没有具体值,所以返回值类型是void。
      //功能的未知部分不明确,所以将其定义成参数。
      /*
      * public static void show(Car cc){
      cc.color="red";
      cc.number=4;
      cc.run();
      }
      */
      }


      4楼2015-11-30 15:13
      回复
        private 关键字 私有
        /*
        * 描述人:Person
        * 属性:年龄。
        * 行为:说话:说出自己的年龄
        * */
        /*
        * 总结:
        * 类中不需要对外提供的内容都私有化,包括属性和行为。
        * 重点:
        * 以后描述事物,属性都私有化,并提供setXxx getXxx方法对其访问*/
        public class Person {
        //属性:
        private int age;//age就是被修饰为了private私有。也就是被隐藏了,这就是封装的一种属性上的体现
        //行为:
        void speak()
        {
        System.out.print("age="+age);
        }
        /*
        * age已被私有,错误的值已无法赋值,可是正确的值也赋值不了
        * 按照之前所学习的封装的原理,隐藏后还需要提供访问方式
        * 通过方法的方式,让其他程序访问到就可以了。更重要的是
        * 可以在方法中加入逻辑判断
        *
        *
        *记住:对变量的访问操作有俩个动作:赋值(设置 set),取值(获取 get)
        *所以,对私有的变量访问的方式就是set变量 get变量————setAge getAge
        **/
        //定义一个对age赋值的方法
        void setAge(int a){
        //加入逻辑判断
        if(a>0&&a<130)
        age=a;
        else
        //System.out.print("输入非法");
        throw new RuntimeException("输入非法");//异常!一但出现,程序出现,需要修改代码。这是扩展。
        }
        //int getAge(){
        //return age;
        //}
        }
        //该类和Person类联系阅读
        public class PersonDemo {
        public static void main(String[]args){
        //测试Person.calss
        //创建对象
        Person p=new Person();
        //复制p.age=-25是可以的,因为age属性是int类型,但是却不符合现实生活中实际情况
        //怎么解决上述问题呢?
        //不让他访问就可以了,怎么在代码中实现呢?需要java中的一个关键字也是一个修饰符private(私有,权限修饰符)
        //p.age=25; age在person类中添加了private修饰符,所以不能在person类以外的程序中直接访问了
        //p.speak();
        //演示对age设置和获取方法的体现。
        p.setAge(88);
        //p.speak();
        //int age=p.getAge();
        //System.out.print(age);
        p.speak();
        }
        }


        6楼2015-11-30 15:14
        回复
          构造函数及 this
          /*
          * 需求:
          * 为了描述事物更准确,发现事物对应的很多对象一创建时,就有了一些初始化数据。
          * 在类中该如何完成?
          *
          * 通过java中的另一个技术完成,就是构造函数。
          * 对象本身就是构造出来的,构造时,需要一些动作,这些动作应该定义在函数内
          * 构造函数有什么用?
          * 可以在对对象创建进行初始化
          *
          * 构造函数怎么在代码中体现呢?
          *
          * 1.没有返回值类型,因为构造对象创建完就结束,不需要结果,没有结果。void也不要写,因为要区别与一般函数
          * 2.构造函数名称和类名是一致的
          * 3.没有具体的返回值
          *
          * 接下来,根据以上三点,在person类中定义一个构造函数
          * 对象一创建就具备姓名 年龄 性别
          *
          *
          * 发现了问题?
          * 没有学习构造函数时,对象也创建出来了。那么该对象是否有被构造呢?或者说,是否有调用构造函数呢
          *
          * 是的,必须调用!
          * 那么类中那个构造函数是什么呢
          *
          * class person{
          * //persons(){} 默认的空参构造函数
          * }
          *
          * class persondemo{
          * main{
          * Person p=new Person();
          * //这就已经调用了person类中的空参数的构造函数
          * //类中有定义该构造函数吗? 有的。只要定义一个类,
          * //该类中默认就有一个空参数的构造函数,是编译器编译时添加到class文件中的。
          * //注意:如果在类中自定义了构造函数,那么默认的空参数构造函数编译器就不再添加了
          * //原理:没有定义对象的初始化过程,编译器会添加一个默认的初始化过程
          * //如果定义了指定的初始化过程,默认的就不添加了。
          *
          * }
          * }
          *
          *
          * 构造函数的细节:
          * 1.一个类中可以有多个构造函数,他们是以重载的形式体现的
          * 2.构造函数中,也是有return语句的,用于结束初始化动作的。
          * 3.构造函数是否能被private修饰呢?能,作用:其他程序无法创建该类的对象。
          * 注:private只能修饰成员 不能修饰局部。
          * 例:
          * class person{
          * private Person(){}
          * }
          * class PersonDemo(){
          * main{
          * Person p=new Person() // 创建对象无法初始化
          * }
          * }
          *
          * 主函数和一般函数的区别:
          * 1.写法不同。构造函数没有返回值类型,函数名是固定的。(不重要)
          * 2.运行上有差别:对象一创建就会调用对应的构造函数。一般方法是对象创建后才会调用所需的一般函数。
          * 问题:有了构造函数初始化变量,那么还需要setXxx方法吗?
          * 需要,因为对象创建后,如果需要对数据进行修改,可以通过set完成
          * 3.构造函数在对象创建时,仅调用一次(初始化动作只做一次,而且先执行)。一般方法可以调用多次。
          *
          *
          * 当构造函数直接进行互相调用时, 该如何解决呢
          *
          * 构造函数是对象初始化时调用的
          * 给哪个对象初始化呢?
          * 通过this关键字来记录对象的地址,并通过this来明确被初始化的对象
          * 在构造函数中调用其他构造函数的格式:this(实参列表);就会调用对应的构造函数
          *
          * 小节:
          * this到底代表什么呢?★★★★★
          * this就代表对象,代表哪个对象呢?哪个对象调用this所在函数,this就代表哪个对象
          *
          *
          * 细节:
          * 1.构造函数可以调用一般函数,一般函数不可以调用构造函数
          * 2.调用其他构造函数的语句,必须定义在构造函数的第一行。★★★★★
          * 原因:初始化动作要先执行。
          * 3.一个构造函数中不能同时调用两个及两个以上的其他构造函数。原因同2.
          *
          *
          *个人理解(不确定对错。):
          *this=对象名称
          *构造函数名称 =对象名称
          *this=构造函数名称
          *this();=构造函数名(); 即和一般方法的调用类似,只不过用this代替了方法名
          *以上几句是个人理解
          *
          *
          * this关键字的其他用法
          * 可用this标识哪些变量是成员变量。这个标识可以省略不写
          * 但是,当局部变量与成员变量同名时,必须用this.来标识成员变量。★★★★★
          * */


          7楼2015-11-30 15:16
          回复
            static 静态
            public class StaticDemo {
            private String name;
            private String color;
            private int age;
            StaticDemo(String name,String color,int age){
            this.name=name;
            this.color=color;
            this.age=age;
            }
            void setName(String name){
            this.name=name;
            }
            void setColor(String color){
            this.color=color;
            }
            void setAge(int age){
            this.age=age;
            }
            void run(){
            System.out.println("\n"+"汽车名称:"+this.name+"\n"+"汽车颜色:"+this.color+"\n"+"轮胎个数:"+this.age);
            }
            static void show(){
            System.out.println("这里没有调用任何参数");
            }
            }
            public class StaticTest {
            /**
            * @param args
            */
            public static void main(String[] args) {
            // TODO Auto-generated method stub
            StaticDemo sd=new StaticDemo("雪弗兰","白色",6);
            //sd.run();
            //sd.show();
            /*
            * 创建对象就是为了产生实例,并进行对数据的封装。
            * 而调用该方法(show方法)时,却没有用到当前对象中封装的数据
            * 该对象的创建还有意义吗?
            * 虽然可以编译运行,但是在堆内存中空间较为浪费
            * 所以,调用该方法时,不建议创建对象
            * 那要怎么调用呢?
            * java中的解决方案就是static(静态)关键字,这是一个成员修饰符
            *
            *
            * 被静态Static修饰过的方法除了可以被对象调用外,还可以被类名调用(如下:)
            *
            *
            * */
            StaticDemo.show();
            /*
            * 注意:并不是所有的方法都可以定义成静态
            * 比如StaticDemo类中的run()方法,如果定义成静态,那么编译将不通过
            * 因为语没有创建对象,所以语句中的this.name等 变量没有产生,所以无法编译
            *
            * 那什么时候需要将方法定义成静态呢
            * 定义功能时,如果功能不需要访问类中定义的成员变量(非静态)时,该功能就需要静态(Static)修饰
            *
            * 谁访问了对象的属性就是谁就是非静态的,就不需要static修饰,反之需要static修饰
            *
            *
            * 静态方法:
            * 1.静态方法不能访问非静态的成员,但是非静态方法可以访问静态成员。
            * 说明:静态方法的弊端在于访问出现了局限性,好处是可以直接被类名调用
            * 2.静态方法中不允许出现this,super关键字
            *
            * 为什么不行呢?原来揭秘:
            * 1.静态是随着类的加载就加载了(不需要先创建对象,然后在从对象中调用,可以用类名直接调用),随着类的消失而消失
            * 2.静态优先于对象存在,但是可以被对象共享
            * 3.因为静态先存在于内存中,无法访问后来的对象中的数据,
            * 所以静态无法访问非静态,而且,内部无法书写this,因为这时,对象有可能不存在,this没有任何指向(this指向对象在堆中的内存地址)。
            *
            *
            * */
            }
            }


            9楼2015-11-30 15:18
            回复
              静态主函数(main)
              /*
              * 静态的主函数(main):
              * main方法是虚拟机执行class.文件的入口,只有通过mian方法这个入口,虚拟机才能执行编写的功能
              *
              * public:权限最大
              * static:不需要对象,(如果对象的构造函数是private的,那么对象将创建不了)直接用给定的类名就可以直接访问函数了
              * void :不需要返回值。(main面对的是虚拟机,他把值返回给虚拟机没啥用)
              * main :函数值名,该名称是固定的。(如果该名称修改就成了一般函数了)
              *String[] args:主函数的参数列表:字符串属性类型的参数
              *args :arguments:参数。该名称就是一个变量名,可以修改。
              * */
              public class MainDemo {
              /**
              * @param args
              */
              public static void main(String[] args) {
              // TODO Auto-generated method stub
              //new MainDemo().show();
              System.out.print(args);//[Ljava.lang.String;@139a55 @左边代表对象的类型,@右边代表的是对象的哈希值;
              //(哈希值:对象通过哈希算法算出来的数值)
              //根据这个结果,说明jvm传递了一个字符串类型的数组实体
              System.out.print("\n"+"\n");
              System.out.print(args.length);// 0 ,得出结论jvm传递的是new Sting[0];
              //System.out.print(args[0]);//编译将不通过,报错:java.lang.ArrayIndexOutOfBoundsException (角标越界)
              //个人理解方法:如果要往args[]传值,只能在运行java的时候传入。
              //具体操作方法: 在dos里运行class文件时,输入java main 然后在后面写上要传入的数值就可以了。
              //例:java main 12 36 58 旺旺
              //如果要调用传入的元素,只需重新在代码中写上调用方法即可。
              //以上是个人理解。
              }
              void show(){
              //System.out.print("这里是测试代码");
              }
              }


              10楼2015-11-30 15:19
              回复
                静态变量
                /*
                * 静态变量:
                * 什么时候定义静态变量呢?
                * 当该成员变量的值,每一个对象都一致时,就对该变量进行静态修饰
                *
                * 静态变量和成员变量的区别:
                * 1.所属范围不同。
                * 静态变量所属于类,成员变量所属于对象
                * 静态变量也称为:类变量
                * 成员变量也称为:实例变量或者对象变量
                *
                * 2.调用不同
                * 静态变量可以被对象和类调用(一般都用类名调用)
                * 成员变量只能被对象调用。
                *
                * 3.加载时期不同
                * 静态变量随着类的加载而加载
                * 成员变量随着对象的加载而加载
                *
                * 4.内存存储区域不同。
                * 静态变量存储在方法区中。(也称之为数据共享区)
                * 成员变量存储在堆内存中。
                *
                * 个人补充
                * 方法区(数据共享区):
                * 这是目前接触到的第三个内存区域
                * 1.栈内存:存储的是方法和局部变量
                * 2.堆内存:存储的是对象,包含成员变量(目前只写到成员变量,可能还有其他)
                * 3.方法区(数据共享区):目前还未对其进行解释
                * 个人感觉存储的是不需要实例对象就可以调用的属性和方法,可以被类名直接调用。
                *
                *
                * */
                /*
                * 方法区:
                * java运行clss文件后,要先在方法区加载(必须有主函数main否则加载不出来)
                * 怎么加载?
                * 在方法区开辟一片空间,把类对应的字节码全都加载到内存里。
                * 思考:
                * 类就是对应的字节码,把字节码数据要全都加载到内存里去,为什么?因为要用(类里的功能及属性)
                * 所以,要先在方法区里开辟空间,去存储类中的字节码数据
                *
                * 存储的内容有哪些?
                * 1.变量
                * 2.构造函数
                * 3.主函数(main)
                *
                * 这三个内容将在方法区分别存放,目前了解到的分两种
                * 1.静态区或者静态代码区
                * 2.其他代码区(我自己起的名字,用于和静态代码区区别标识)
                * 静态代码区的变量和方法可以直接用类名调用,
                * 也就是可以在不创建类的实体对象前就可以(从方法区)调用
                * 其他代码区的变量和方法需要先创建类的实体对象,才能通过对象调用
                *


                11楼2015-11-30 15:20
                回复
                  2025-06-07 19:57:30
                  广告
                  public class CirCle {
                  private double redius;//圆的半径
                  private static double pi=3.14;//定义π值
                  //π是圆中的通用属性,如果每个圆对象(类存储的是一类对象的共有属性,对象是类的实体)
                  //中都存储一份,太浪费内存空间
                  //要实现对象的共享,加入静态修饰符static就可以了
                  CirCle(double redius){
                  this.redius=redius;
                  }
                  double getArea(){
                  return redius*redius*pi;
                  }
                  }
                  public class CircleDemo {
                  /**
                  * @param args
                  */
                  public static void main(String[] args) {
                  // TODO Auto-generated method stub
                  System.out.print(new CirCle(1).getArea());
                  }
                  }
                  /*
                  * 需求:类一加载,需要做一些动作,不一定需要对象来调用
                  *
                  * 学习目标:理解其加载的顺序
                  * 静态代码块:
                  * 特点:随着类的加载而执行。注意:是执行。且仅执行一次
                  * 作用:给类进行初始化。
                  * */
                  package day_05;
                  public class StaticCode {
                  static int x=9;//静态变量有两次初始化
                  //一次是默认初始化,一次是显示初始化
                  static{//静态代码块,在静态变量显示初始化以后再运行
                  System.out.println("--------我是静态代码块-------"+x);
                  }
                  static void show(){
                  System.out.println("show run");
                  }
                  }
                  public class StaticCodeDemo {
                  /**
                  * @param args
                  */
                  public static void main(String[] args) {
                  // TODO Auto-generated method stub
                  StaticCode.show();
                  }
                  }


                  12楼2015-11-30 15:20
                  回复
                    上面还有一部分静态代码块 没有特殊标记
                    这里是构造代码块 和局部代码块
                    /*构造代码块:{}没有名字 饰符 返回值
                    *只要创建对象就会被调用,给所有的该类的对象初始化
                    *构造函数只给调用他的对象针对性的初始化
                    *(这是两者的区别)
                    *所以,构造代码块可以定义不同构造函数的共性代码
                    *(这是构造代码块的好处)
                    *
                    *个人小结:
                    *执行顺序:
                    *1.静态成员变量显示初始化
                    *2.静态代码块
                    *3.静态函数
                    *4.成员变量显示初始化
                    *5.构造代码块
                    *6.构造函数
                    *解析:
                    *因为只有在创建对象时4.5.6才能 被执行
                    *而静态先于对象
                    *所以1.2.3先于4.5.6执行
                    *
                    *
                    * */
                    public class Structure {
                    int x=4;//成员变量 。先进行默认初始化x=0,再进行显示初始化x=4
                    //当成员变量显示初始化之后,构造代码块才执行
                    {
                    System.out.println("------构造代码块-----"+x);
                    System.out.println("------构造代码块11111-----");
                    }
                    Structure(){
                    System.out.println("--->>>构造代码----->>>");
                    }
                    Structure(int x){
                    System.out.println("------>>>构造代码----->>>"+"x="+x);
                    }
                    }
                    public class StructureDemo {
                    /**
                    * @param args
                    */
                    public static void main(String[] args) {
                    // TODO Auto-generated method stub
                    new Structure();
                    new Structure(999);
                    //扩展内容
                    {//局部代码块:
                    // 作用:可以控制局部变量的生命周期,避免栈内存的空间浪费。
                    int x=5;
                    System.out.println("----局部代码块----"+x);
                    }
                    //System.out.println("----局部代码块----"+x); 该句编译不通过,找不到变量x;
                    }
                    }


                    13楼2015-11-30 15:22
                    回复
                      特殊讲一下,加载过程
                      public class CreateObjectTestDemo {
                      /**
                      * @param args
                      */
                      public static void main(String[] args) {
                      // TODO Auto-generated method stub
                      CreateObjectTest cot=new CreateObjectTest();
                      /*
                      * 1.加载CreateObjectTest.class文件进入方法区,并进行空间分配
                      * 2.如果静态变量,先默认初始化,再显示初始化
                      * 3.如果有静态代码块,要执行,仅一次
                      * 4.通过new在堆内存中开辟空间,并明确空间首地址
                      * 5.对对象中的属性进行默认初始化
                      * 6.调用对象对应的构造函数进行初始化
                      * 7.构造函数内部:
                      * 7.1调用父类构造函数super();
                      * 7.2成员变量显示初始化
                      * 7.3构造代码块初始化
                      * 7.4构造函数内容自定义内容初始化。
                      * 8.对象初始化完毕后,将地址赋值给cot引用变量
                      * */
                      }
                      }
                      public class CreateObjectTest {
                      static int x=1;
                      int y=1;
                      static{
                      System.out.println("--->静态代码块<---"+"x="+x);
                      }
                      {
                      System.out.println("--->构造代码块<---"+"y="+y);
                      }
                      CreateObjectTest(){
                      System.out.println("--->构造函数<---"+"x="+x+"\t"+"y="+y);
                      }
                      }


                      14楼2015-11-30 15:23
                      回复
                        在封装这里,最后讲一下,单例模式
                        /*
                        * 设计模式:解决某一类问题行之有效的解决办法(思想)。
                        * 单例(Singleton)设计模式:
                        * 学习设计模式必须先弄清楚他是解决什么问题的
                        * 单例是解决什么问题的呢?
                        * 可以保证一个类的对象的唯一性
                        *
                        * 场景:
                        * 比如多个程序都要使用一个配置文件中的数据,
                        * 而且要实现数据的共享和交换
                        * 必须要将多个数据封装到一个对象中
                        * 而且多个程序操作的是同一个对象
                        * 那也就是说必须保证这个配置文件对象的唯一性
                        *
                        * 怎么能保证对象的唯一性呢?(思路)
                        * 1.一个类只要提供了构造函数,就可以产生对象,
                        * 且产生的对象数量无法控制,完全无法保证对象的唯一性(只创建一个对象)
                        * 那么,既然对象数量不可控制,直接不让其他程序创建对象就可以了。
                        * 2.如果不让其他程序创建对象,那对象何在?
                        * 可以在自己的本类中创建一个对象。这样的好处是什么?可控。
                        * 3.对象创建完成后,是不是要给其他程序提供访问的方式?是的,要提供。
                        *
                        * 实现步骤:
                        * 1.怎么能不让其他程序创建对象呢?
                        * 直接私有化(private)构造函数,不让其他程序创建的对象初始化。
                        * 2.怎么在本类中创建一个对象呢?
                        * 直接在本类中new一个本类对象。
                        * 3.怎么给其他程序提供访问方式呢?
                        * 定义一个功能,其他程序可以通过这个功能,获取到本类的对象。
                        *
                        * */
                        //饿汉式
                        package day_06;
                        public class Singleton {
                        double x=0;
                        // 1. 私有化构造函数
                        private Singleton(){
                        }
                        // 2. 创建一个本类对象
                        private static /*final*/ Singleton st=new Singleton();
                        //静态只能访问静态,所以,如果getInstance这个静态方法要想反问st
                        //那么st这个变量必须也是静态的。
                        //st变量不对外提供,所以要进行私有,加private修饰
                        //final暂不解释
                        //个人小疑问:如果st可以直接定义成静态,
                        //那么在别的类中直接可以通过类名就可以调用了
                        //为什么 还要再通过在本类中创建返回值为st的方法来调用他。
                        /*上述问题的解答:★★★★★★
                        * 亲测,Singleton.st编译运行都没问题,也就是说Singleton.st可以创建对象
                        * 那么为什么还要使用getInstance方法来调用st呢?
                        * 加入方法来实现就是为了对对象可控。
                        * 所以,一般是通过类名调用方法来实现对象的创建,而不是通过类名调用变量来实现*/
                        // 3. 创建一个方法,返回这个对象
                        /*
                        * Singleton类的构造函数已经被私有化,所以其他类无法通过new创建其实例对象
                        * 但是,Singleton类已在其本类中创建了其实例对象st
                        * 所以可以调用st达到创建对象的目的
                        * Singleton已在本类中定义了返回值为st的方法getInstance
                        * 所以可以通过调用getInstance方法进而得到其返回值st,也就是Singleton的实例对象
                        * 但是通过对象调用getInstance方法已经不可能(因为其他类无法通过new创建对象)
                        * 所以,只能用类名调用,所以这个方法只能是静态方法(static)
                        *
                        * 如果getInstance这个方法在别的类中不能调用
                        * 那么Singleton这个类的其他内容都无法使用,
                        * 所以getInstance这个方法的权限要最大
                        * 即要使用public修饰符
                        * */
                        public static Singleton getInstance(){
                        return st;
                        }
                        void show(double x){
                        this.x=x;
                        System.out.println("----这里是测试码----");
                        System.out.println("----"+"x="+this.x+"----");
                        }
                        void show(){
                        System.out.println("x="+x);
                        }
                        }
                        public class SingletonDemo {
                        /**
                        * @param args
                        */
                        public static void main(String[] args) {
                        // TODO Auto-generated method stub
                        Singleton st= Singleton.getInstance();
                        Singleton st1= Singleton.getInstance();
                        st.show(8);
                        st1.show();
                        }
                        }
                        //懒汉式
                        //单例延迟加载方式
                        /*单例的另一种体现
                        * 懒汉式与饿汉式的区别:
                        * 懒汉式只有当调用getInstance方法时才会创建对象
                        * 饿汉式当类加载就会创建对象
                        *
                        *
                        * 面试中遇到的更多的是懒汉式
                        * 实际开发用饿汉式比较多
                        * 这两者不牵扯内存问题
                        * 因为类的编写就是为了对象的创建,不创建对象的类没什么用
                        * 所以,两者都需要创建对象,都需要在堆中开辟空间
                        * 只是开辟的时间不同,所以两者都要占用内存*/
                        public class Singleton2 {
                        private int x;
                        private Singleton2(){
                        }
                        private static Singleton2 st2=null;
                        public static Singleton2 getInstance(){
                        if(st2==null){
                        st2=new Singleton2();
                        }
                        return st2;
                        }
                        void show(int x){
                        this.x=x;
                        System.out.print("x="+this.x);
                        }
                        }
                        public class SingletonDemo2 {
                        /**
                        * @param args
                        */
                        public static void main(String[] args) {
                        // TODO Auto-generated method stub
                        Singleton2 st2=Singleton2.getInstance();
                        st2.show(5);
                        }
                        }


                        15楼2015-11-30 15:23
                        收起回复
                          以上是面向对象的,封装内容,我认为是比较全的,都是我自己一点一点敲的,大家如果觉的有用,希望支持一下。
                          继承,我到是也敲完了,明天再发吧,继承之后的内容会更新的比较慢了,因为我学的比较慢,我白天也要上班。


                          16楼2015-11-30 15:25
                          回复
                            有人说我在水经验,我抬手就是一巴掌,怎么说话的!!!! 人家明明是在给楼主顶贴


                            IP属地:广东来自Android客户端17楼2015-11-30 15:58
                            回复
                              2025-06-07 19:51:30
                              广告
                              我是纯小白,顶楼主。会一直关注的。


                              IP属地:浙江来自Android客户端18楼2015-11-30 16:28
                              回复