java面向对象程序设计(一)

java面向对象程序设计(一)

一.面向对象程序设计的三大特性

封装性:
    将一个对象的属性和行为封装成为一个整体,实现了信息隐蔽,实现了封装在同一对象中不同属性和方法不同级别的访问权限

继承性:
    提高了软件开发效率
   分为单继承和多继承:
        
单继承就是一个子类只有一个父类,多继承是一个子类可以有多个父类。
        Java不支持多继承,但是通过接口来弥补了不支持多继承的缺点。

多态性:
   允许程序中出现重名现象。
   有两种形态:
      方法重载:方法同名不同参数,调用同名的不同方法完成不同的功能
      对象多态:子类对象可以与父类对象相互转换,使用不同的子类对象完成不同的功能

二.类

类定义

类包含属性和方法
    class class_name
    {
       
成员变量;//属性
      方法;
    };
    
如:
     class Person
     {
        private int age;
        private char sex;
        public void setAge(int pAge){age=pAge;}
        public int getAge(){return age;}
        public void setAge(char pSex){sex=pSex;}
        public int getSex(){return sex;}
     };
     
注意:java类中的属性必须封装,在访问时只能通过settergetter进行访问。

 

三.对象
对象的两种定义方法:
   1)类名对象名称=null; //声明对象
      对象名称=new类名();//实例化对象,此时它的属性值都是取默认值
   2)类名对象名称=new类名();

  注:在java中,反是引用类型的变量都可以用类似上面的方法来定义
如:
  Person jakey=null;
  jakey=new Person();
 

  Person jakey=new Person();
声明一个对象时,会为这个对象分配一块栈内存空间A,在一个对象没有被实例化时,这块内存空间A里值为null,对象被实例化之后,会为对象分配一块堆内存空间B,其中存放的是对

象属性,这时栈内存空间A里就存放的是一个指向这块堆内存空间B的地址,B空间的大小取决于对象的属性。

  注:对象使用前一定要实例化
一个栈内存空间的变量只能指向一个堆内存空间,反过来,一个堆内存空间可以由多个栈内存空间的变量指向。Java中有垃圾回收机制GC,对于不用的内存空间,GC会自动回收。

四.构造方法

类对象是由类的构造方法来初始化的,每个类都至少有一个构造方法。如果我们不明确声明类的构造方法,那么在编译时会自动给类生成一个无参数、什么也不做的默认构造方法,实例化类对象时,会自动调用类的默认构造方法。如果我们定义了类的构造方法,那么在编译时就不会再生成默认构造方法。
   构造方法也可以重载。

 

五.匿名对象

public static void main(String[] args)
{
  new Person(38,”male”);//
匿名对象
}
匿名对象不开辟栈空间,只有堆空间,且只使用一次,便由GC回收所分配的堆空间,主要用于其它类实例化对象的参数传递。

 

六.String

String是一种特殊的类。
它有两种实例化对象的方法:
    1)直接用”=”赋值,实例化一个对象之后,如果再实例化其它等内容的对象,则不再分配新空间,这种方式实例化的对象,用==比较的结果为true.
    2
new调用构造函数,与常规的类对象实例化一样。所以用==比较结果为false,用equals()比较结果为true

比较:

==比较用new实例化的String对象的地址,比较用赋值运算符实例化的String对象的内容
    equals()比较用new实例化的String对象的内容,区分大小写
    equalsIgnoreCase()比较用new实例化的String对象的内容,不区分大小写
对象池

String字符串的内容一旦声明就不可改变
平时看到结果变了是假象,那是通过把地址断开-连接实现的,实际上字符串的内容并不变。

String常用函数

length:数组元素个数
length()String对象长度

 

七.引用传递及基本应用

引用传递就是把一个堆内存空间交由多个栈内存空间使用

在类中接受本类对象的实例,通过这个实例访问本类中的封装属性

一对一关系

 

八.this关键字

通过this调用本类中的属性
通过this调用本类中的构造函数
指明当前对象

 

九.Static关键字

   如果想把一个属性给一个类的所有对象共有,就把它声明为static;如果一个类的方法想给这个类直接调用,就把它声明为static(这种方法称为类方法)。Static修饰是全局的或说是静态的,对于static属性是放在全局数据区,不论什么方法都是放在代码区。

   static方法可以调用static方法或属性,但static方法不可以调用非static方法或属性

   静态代码块:由static声明的代码块,static代码块优先于主方法执行,在类中的static代码块优先二构造块执行,构造块优先构造方法执行,类中的static块只执行一次。如:
  static{//static

      System.out.println(“static code block”);
  }

  class Demo
  {
     {//
构造块
      System.out.println(“construct code block”);
     }
     Demo
(){}
  };

 

十.构造方法私有化-----单例设计模式

 

十一.对象数组

对象数组必须先分配空间,在使用时必须先将其中的对象分别实例化

也分为动态实例化和静态实例化
  静态实例化:
  Person child[]={new Person(100,”male”),new Person(100,”female”)};

 

十二.内部类(Inner class)
    内部类的访问权限(publicprivate)与外部类的成员变量和成员方法一样,内部类也可以方便的访问它所属外部类的私有属性
    static定义内部类,成了外部类,它不可以访问非static的外部类属性
   在外部类中访问内部类
   在方法中也可以定义内部类,但是如果方法中的内部类想要访问方法的参数,则需要在方法参数前面加final。如:public void xx(final int a){ class ic{};};

 

十三.实例
   单向链表的实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值