java(2) 面向对象

1.类的封装
    *在定义一个类时,将类中的属性私有化,即使用prviate关键字来修饰,私有属性只能在它所在的类中被访问。为了能让外界访问私有属性,需要提供一些使用public修饰的公有方法,其中包括用于获取属性值的getXxx()方法和设置属性值的setXxx()方法。
    
    class Student {
        private String name; //将name 属性私有化
        private int age;     //将 age 属性私有化
        
        //下面是公有的getXxx() 和 setXxx()方法。
        public String getName(){
            return name;
        }
        
        public void setName(String stuName){
            name = stuName;
        }
        
        public int getAge(){
            return age;
        }

        public void setAge(int stuAge){
        
            //对传入的参数进行检查
            if(stuAge <= 0 ){
                System.out.println("年龄不合法.......");
            }else{
                age = stuAge;
            }
        
        }
        
        public void introduce(){
            System.out.println("大家好,我叫"+ name + ",我今年"+ age + "岁!");
        }
    }

    public class ExampleTest{
        public static void main(String[] args){
            Student stu = new Student();
            stu.setAge(-30);
            stu.setName("liming");
        }
    }


    
2.this 关键字
    * 通过 this 关键字可以明确地去访问一个类的成员变量,解决与局部变量名称冲突问题。

        class Person{
            int age;
            public Person(int age){
                this.age = age;
            }
            
            public int getAge(){
                return this.age;
            }
        }
            
    * 通过 this 关键字调用成员方法
    
        class Person{
            public void openMonth(){
                .....
            }
            
            public void speak(){
                this.openMonth();
            }
        }    
    
    * 构造方法是在实例化对象时被java虚拟机自动调用的,在程序中不能像调用其他方法一样去调用构造方法,但可以在一个构造方法中使用this关键字的形式来调用其他构造方法
      
        class Person{

            public Person(){
                System.out.println("无参构造方法被调用了......");
            }
                
            public Person(String name){
            
                this();
                System.out.println("有参构造方法被调用了......");
            }
        }

        public class ExampleTest{
            public static void main (String[] args){
                //实例化Person对象
                Person p = new Person("itcast"); 
            }
        }    
    
    * 在使用this调用类的构造方法时,应该注意以下两点
        1.只能在构造方法中使用this调用其他的构造方法,不能在成员方法中使用
        2.在构造方法中,使用this调用构造方法的语句必须放在第一行,且只能出现一次。
        
            public Person(){
                String name = "小名";
                this(name);  //由于不在第一行,编译错误
            }    


            
3.static 关键字

    * 静态变量,在一个java类中,可以使用 static 关键字来修饰成员变量,该变量被称作静态变量。静态变量被所有实例共享,可以使用"类名.变量名"的形式来访问。

        class Student{
            static String schoolName; //定义静态变量
        }

        public class ExampleTest{
            public static void main(String[] args){
                Student stu1 = new Student();
                Student stu2 = new Student();
                
                Student.schoolName = "阳明圣院";     //为静态变量赋值
                System.out.println("我的学校是"+stu1.schoolName);
                System.out.println("我的学校是"+stu2.schoolName);
            }

        }
        
        注意:static关键字只能用于修饰成员变量,不能用于修饰局部变量
    
    
    * 静态方法 ,在一个java类中,方法前有 static 关键字修饰,我们称这种方法为静态方法。不需要创建类即可访问,访问方式"类名.方法名"。
    
        class Person{
            public static void sayHello(){        //定义静态方法
                System.out.println("hello");   
            }
        }    

        class ExampleTest{

            public static void main(String[] args){
                Person.sayHello();
            }
        }    
        注意:在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问。

    * 静态代码块,用 static 关键字修饰的代码块称为静态代码块。当类被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块之执行一次。



4.单例模式
    * 单例模式是java中的一种设计模式,它是指在设计一个类时,需要保证在整个程序运行期间针对该类只存在一个实例对象。
        
        class Single{
            //自己创建一个对象
            private static Single INSTANCE = new Single();
            private Single(){}                                //私有化的构造方法
            public static Single getInstance(){                  //提供返回对象的静态方法
                return INSTANCE;
            }
        }
        
    * 单例模式具备如下特点
        1.类的构造方法使用private修饰,声明为私有,这样就不能在类的外部使用new关键字来创建对象了
        2.在类的内部创建了一个该类的实例对象,并使用静态变量INSTANCE引用该对象,由于变量应该禁止外界直接访问,因此使用private声明为私有成员
        3.为了让类的外部能够获得类的实例对象,定义了一个静态方法getInstance(),用于返回该类实例INSTANCE.外界可以通过" Single.getInstance() "来获取该实例

 

posted @ 2017-07-04 16:31  PoleStar  阅读(418)  评论(0编辑  收藏  举报