努力,拼搏,奋发,有为

——积累,传递,分享,进步!

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

Java基础(5)--类和对象
5.1 面向对象概念
5.2 类与对象的关系
5.3 封装
5.4 构造函数
5.5 this关键字
5.6 static 关键字
5.7 单例设计模式

 

5.1 面向对象概念--一种思想
1.面向过程:强调过程
  面向对象:强调具体事务
2. 面向对象的特点:
   a.符合人们思考习惯的一种思想。
   b.可以将复杂的事情简单化
   c.将执行者变成指挥者

3. 面向对象开发过程:创建对象、使用对象、指挥对象做事情。
   面向对象设计过程:管理和维护对象之间的关系。
   面向对象的特征:封装encapsulation、继承inheritance、多态polymorphism。

4. :对事物的描述。对共性内容的抽象。
   对象:具体存在的实体。

5.成员变量局部变量的区别
  a. 成员变量:类中,作用范围在整个类中有效。
  b. 局部变量: 在方法中,作用范围仅在方法内部。

6. 匿名对象
   a. 对象的简化用法:直接 new Car();
   b. 一般用于对象只用一次的情况。

class ClassDemo 
{

    //属性
    int num;//成员变量
    
    //行为
    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
    }
}

 

5.3 封装
1. 封装:隐藏对象的属性和实现细节,对外提供公共访问方式
   优点:隔了变化、便于使用、提高重用、安全可靠。
   原则:只有一个门(内部内容隐藏)、把钥匙看好(把成员变量隐藏,提供公共方法对其访问);


2. 访问修饰符:private 私有;类内部使用。
                    public 公有:整个程序使用。
                    protect 保护;相关类中使用。

3. 定义set/get方法对成员变量进行访问

4. 私有仅仅是封装的表现形式之一,类、函数都是封装,隐藏细节,暴露入口;
    私有只能修饰成员变量。

class Person
{
    private int age; //age私有化--钥匙;通常将类中成员变量都私有化,对外提供方法访问,让其具有可控性。

    public void setAge(int age) //将局部变量赋值给成员变量;看好了钥匙
    {
        if(age<0)//加入健壮性、安全性判断;对成员变量进行控制
        {
            this.age=age;
        }
        
    }
    public int getAge()//看好了钥匙
    {
        return age;
    }

    void speak() //
    {
        System.out.println("age="+age);
    }
}
class ClassDemo 
{

    public static void main(String[] args) 
    {
        Person p = new Person();
        //p.age= 20;
        //p.speak();

        p.setAge(20);
        System.out.println("age="+p.getAge());
        p.speak();
    }
}

 

5.4 构造函数
1. 特点:函数名与类名相同;不用定义返回值;没有具体返回值。
   作用:给对象初始化
   注意:默认构造函数的特点;多个构造函数是以重载的形式存在的。

2. 构造函数和一般函数有什么不同
   a.构造函数用于给对象初始化时只执行一次,一般函数可以调用多次。

class Person
{
    private String name;
    private int age;
    //定义一个构造函数;如果不定义,系统默认一个空的构造函数。对对象进行初始化!
    //如果自己定义了构造函数,默认的构造函数就没有了!
    public Person()
    {
        System.out.println("我是构造函数!");
    }
    //构造函数重载,一个类中有多个构造函数。
    public Person(String n, int a)
    {
       if(a<0)
         return;
       name=n;
       age=a;
    }
    
}

class ClassDemo 
{

    public static void main(String[] args) 
    {
        //每一个对象被创建的时候都要被初始化
        Person p = new Person(); //当对象创建的时候,就要调用构造函数。
        Person p2= new Person("王三",12); //创建对象时,初始化对象
    }
}

 

5.5 this关键字
1. this 关键字代表其所在函数所属对象的引用,即本类对象的引用
2. 什么时候使用this关键字呢?
   (1)当函数内需要用到调用该函数的对象时,就用this.
   (2)当成员变量和局部变量同名时,可以用this来区分。
   (3)使用this(参数)的方式就可以实现构造函数之间的调用。
    注意:构造函数之间调用时,this语句只能放在构造函数的第一行。
3. 当功能内部使用到本类对象时,用this表示

class Person
{
    private String name;
    private int age;
    perosn(String name)
    {
        this.name = name;
    }
    perosn(String name,int age)
    {
        this.name = name;//1.this使用1:this 代表当前对象,实际为对象的引用,谁调用就this就是谁
        this("小米");// 2. this使用2:构造函数调用,this
        this.age = age;
    }

    void speak()
    {
        System.out.println("name:"+name+"age"+age);
    }

    public boolean compare(Person n)
    {
        if(this.age = n.age)//3. 当功能内部使用到本类对象时,用this表示
            return true;
        else
            return false;
    }
}
class ThisClass
{
    public static void main(String[] args)
    {
        Person p = new Person("王五",24);
        p.speak();
    }
}

 

5.6 static 关键字
1. static用于修饰成员函数和成员变量
2. 被修饰后的成员具备以下特点
   (1)随着类的加载而加载
   (2)优先于对象的存在而存在--生命周期过长!
   (3)被所有对象所共享
   (4)可以被类名直接调用
3. 使用注意
   (1)静态方法只能访问静态成员
   (2)静态方法中不可以写this/super关键字
   (3)主函数是静态的

4. 成员变量和静态变量的区别
   (1)生命周期
        成员变量随着对象的出现而出现,随对象的消失而消失。
        静态变量随着类的出现而出现,随类的消失而消失。
  (2)内存的存储地址
        成员变量存在堆内存的对象中
        静态变量存储在方法区的静态区中
   (3) 存储数据的特点
         成员变量存储的数据是对象的特有数据
         静态变量存储的数据是对象的共享数据
   (4)调用方式
         成员变量:只能被对象调用
         静态变量,能被对象和类名同时调用。
5. 静态的使用
   (1)当成员变量的数据所有对象都是一样的,该数据可以用Static修饰。
   (2)函数是否有访问类中的静态成员变量.

6. 静态代码块,随着类的加载而执行,而且只执行一次,用于给类初始化。
   static
   {

   }
7. 构造代码块和局部代码块
   {//构造代码块,创建对象时,给所有对象初始化。而构造函数给对应的对象初始化。

   }

   {//局部代码块,控制局部变量的生命周期

   }

 

class Person
{
    String name="Wang";
    static String country="CN";
}

class StaticDemo
{
    public static void main(String[] args)
    {
        System.out.println(Person.country);//类名直接调用
    }
}

 

5.7 单例设计模式
1. 单例设计模式:保证一个类在内存中的对象唯一性。
2. 如何保证对象的唯一性?
   a. 不让其他程序创建该类对象,因为数量不可控。————>构造函数为private,不让其初始化。
   b. 自己创建一个本类对象。
   c. 让其他程序对该对象有公共的访问。
3. 单例设计模式的两种方式

//饿汉式--建议用
class Single
{
    Single s = new Single(); //创建一个对象
    //构造函数私有化
    private Single()
    {

    }
    public Single getInstance(int age)//创建公方法获取该类对象
    {
        if(age > 20)
        {
            return s;
        }
        return null;
    }
}
//l懒汉式,延迟加载过程
class  Single2
{
    private static Singles2 s = null;
    private Single2(){};
    public static Single2 getInstanc()
    {
        if(s==null)
        {
            s =new Single2();
        }
        return s;
    }
}

说明:本博客是作者学习传智播客毕向东老师的JAVA基础课程所摘抄和记录的笔记,在此感谢传智播客,感谢毕向东老师。如有侵犯知识产权行为,请及时联系作者(swl880716@gmail.com)删除!

posted on 2013-09-22 20:46  孤剑独行  阅读(205)  评论(0)    收藏  举报