5.类和对象

1.  对象
通常将对象划分成两个部分, 静态方法和动态部分
静态方法, 就是不动的部分,这个部分被称为 “属性” , 任何对象都会就要自身的属性,如一个人,其属性包括高矮,胖瘦等。
动态部分 是这个人具有的 行为 ,如微笑,行走等
(1)  抽象出对象
(2)  识别对象的属性(静态属性)
(3)  识别对象的动态行为
可以将这些属性和行为封装在一起来描述这个对象
2. 
不能将所谓的一个事物描述成一类事物,如一个鸟不能说成鸟类,如果要对一类事物统称,就需要引入类这个概念。
类是一类事物的统称,如人类,鸟类。类是构造对象所依赖的规范,如一只鸟有一对翅膀,它可以利用翅膀来飞行,而基本上所有的鸟类都具有翅膀和飞行的技能,这样具有相同属性和行为的一类事物就定义类
3.  面向对象的三个特征
1.  封装性
   将对象的属性和行为封装在一起,其载体是类 类通常对客户隐藏其实现的细节。
保证了类内部数据结构的完整性,应用该类的用户不能轻易直接操作此数据结构 ,只能执行类允许公开的数据。这样就避免外部操作内部数据的影响,提高了程序的可维护性
2.  继承性
类与类之间同样具有关系,主要利用特定对象之间的特定的共有属性 ,例如, 平行四边形是四边型,正方形和矩形也是四边形,可以把平行四边形看作四边形的延伸 ,平行四边形复用了四边形的属性和行为,同时添加了平行四边形独有的属性和行为,这里可以将平行四边形看作是从四边形类中继承的。平行四边形称为子类,四边形称为父类,子类的事例都是父类的事例。
3.  多态性
    每个图型都有自己的特征,抽象类不能实例化对象 。在多态的机制中,父类通常定义为抽象类,在抽象类中提供给一个方法的标准,而不给出的具体的实现流程,实际上这个方法也是抽象的,在多态机制中,比抽象类更方便的方式是将抽象类定义为接口,其抽象方法组成的集合就是接口。
1.  成员变量
java 中对象的 属性 也称为成员变量
 
2.  成员方法
  java 语言中使用成员方法对应类对象的 行为
权限修饰符 返回值类型 方法名 (参数类型 参数名) {
// 方法体
Return 返回值
}
3.  权限修饰符
1. Private
如果一个类的成员变量或成员方法被修饰为 private, 则该成员变量只能在 本类 中被使用 ,在子类也是不可见的,并且对其他包的类也是不可见的。
2. Public
除了在本类中使用这些数据外,还可以在子类和其他包的类中使用。
3. Protected
只有本包内的该类的子类能够使用
访问包位置
 
类修饰符
 
Private
protected
public
 
 
本类
可见
可见
可见
 
 
同包其他类或子类
不可见
可见
可见
 
 
其他的包类或子类
不可见
不可见
可见
 
 
Class anyclas{
  Public void doString(){
...// 方法体
}
}
如果一个类不被 public private protected 设置类的权限,则这个类预设为包存取范围,其只有一个包中的类可以调用这个类的成员变量或成员方法。 上面这个例子中使用默认修饰符,即只有一个包内的其他类和子类可以对该类进行访问, 但是 doString() 方法是被 public 修饰,但是根据 JAVA 语言的规定, 类的权限设定会约束类成员的权限设定
4.  局部变量
成员方法 中定义一个变量,那么这个变量被称为局部变量
局部变量是在方法被执行时创建,在方法执行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化。
Public String getName(){
Int id=0;    // 局部变量
setName( java );
Return id+this.name;
}
5.  局部变量的有效范围
可以将局部变量的有效范围称为变量的作用域,局部变量的有效范围从该变量的声明开始到该变量的结束为止
6. this 关键字
有以下例子
public void setName(String name){ // 定义一个 setname ()方法
    T his.name =name;   // 将参数值赋予类中的成员变量
}
java 语言规定中, this 关键字来代表 本类对象 的引用 This 关键字被隐式地用于引用对象的成员变量和方法,在上述代码中, this.name 指的就是 BOOK 类中的 name 成员变量,而 this,name=name 中的第二个是形参 name.
事实上, this 引用的就是本类的一个对象 ,当局部变量或方法参数覆盖了成员变量时,上面这个例子就是 添加 this 关键字明确引用的是类成员还是局部变量或方法参数
如果省略 this 关键字直接写成 name=name; 么只是把参数 name 赋值给参数变量本身而已,成员变量 name 的值并没有改变
Public Book getBook(){
Return this;  // 返回 BOOK 类的引用
}
方法的返回值类型为 book 类,所以方法体中使用 return  this 这种形式将 book 类的对象进行返回
4.  类的构造方法
   在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法。 构造方法是一个与类名的方法,对象的创建就是通过构造方法完成的。每当实例化一个对象时,类会自动调用构造方法。
构造方法有以下特点 :
1.  构造方法没有返回值
2.  构造方法的名称要与本类的名称相同。
3.  格式为:
         public book(){
       ...// 构造方法体
}
 
在构造方法中可以为成员变量赋值 这样当实例化一个本类对象时,相应的成员变量也将被初始化
如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认的构造方法。
5. 静态变量,常量和方法
static 修饰的变量,常量和方法被称为静态常量,静态变量,静态方法
静态成员属于类所有 ,区别于个别对象,可以在本类或其他类使用类名和 . 符调用静态成员。
class  $5{
     final  static  double  PI =3.1415; // 此处如果没有用 static 修饰,在别的方法里面无法调用
        int id;
       public  static  void  method1() {
       System. out .println("6666");
      }
       public  void  method2() {
       System. out .println($5. PI );
        System.out.println ( $5.id ) ; // 此处无法调用参数 Id,非静态变量
       $5. method1 ();
      }
}
Java 语言规定对于静态方法有两点规定:
1.  在静态方法中不可以使用 this 关键字。
2.  在静态方法中不可以直接调用非静态方法
3.  不能将方法体内部的局部变量定义为 static
4.  如果执行类时,希望先执行类的初始化动作,可以先使用 static 定义一个静态区域。
 Public class example{
    Static{
//some
}
}
红色块先执行
6. 类的主方法
Public class example(){
Public static void main(String[] args){
//dosomethings
}
}
1.  主方法是静态的,所以如要在主方法中调用其他方法,则该方法也要是静态的。
2.  主方法没有返回值 void
3.  主方法的形参为数组。其中 args[0]-args[n] 分别代表程序的第一个参数到第 n 个参数,可以使用 args.length 获取参数个数
7.  对象
Java 是一门面向对象的语言,对象由类抽象出来,所有的问题通过对象来处理,对象可以操作类的属性和方法 解决相应的问题。
1.  对象的创建
Test      test          =new                Test();
类名     创建 Test 类对象     创建对象操作符  构造方法的参数
test 被创建出来后,就是一个对象的引用,这个引用在内存中为对象分配了存储空间
 
 
 
2. 访问对象的属性和行为
$4 test = new  $4();
test .showArrays( array );
test .transfer( array , array2 );
System. out .println();
test .showArrays( array2 );
2.  对象的引用
    类名 对象引用名称
3.  对象的比较
String c1 = new  String( "abc" );
String c2 = new  String( "abc" );
String c3 = c1 ;
System. out .println(( c2 == c3 )); // 比较对象的地址 false
             System. out .println((c2.equals(c3))); //true,形式上比较
              System. out .println(( c1 == c3 )); // 引用相同所以是 true
4.  对象的销毁
每个对象都有生命周期, 当对象的生命周期结束时,分配给对象的内存地址将会被回收,在其他语言中需要手动回收废弃的对象,但 java 拥有一套完整的垃圾回收机制
以下两种情况
1.  对象的引用超过其作用范围,这个对象将被视为垃圾
{
     Example e =new Example();
}
 
 
2.  将对象赋值为 Null
{
Example e= new Example();
     e=null;  // 此时对象消亡
           }
虽然垃圾回收机制已经很完善,但只能回收由 new 操作符创建的对象 。如果某些对象不是通过 New 操作符在内存中获取一块内存区域,这种对象可能不能被垃圾回收机制所识别, 所以在 java 中提供了一个 finalize() 方法。 这种方法是 object 类,它被声明为 protected, 用户可以在自己的类中定义这个方法。如果用户在类中定义了 finalize ()方法 , 在垃圾回收时会首先调用该方法,在下一次垃圾回收动作发生时,才能真正被对象占用
有时候垃圾回收机制没有按预期的来执行, java 提供了 System.gc() 方法强制启动垃圾回收器。
                                          作 
1.  尝试编写一个类,定义一个 private 变量,并定义两个成员方法,一个成员方法实现为此成员变量赋值,另一个方法获取这个成员变量的值,保证其他的类继承时能获取该成员变量的值。
 
public  class  $89 {
public  static  void  main(String[] args ) {
// TODO  自动生成的方法存根
              $78 test = new  $78();
               test .test();
}
 
}
 
class  test2 {
private  int    a ;  // 只允许本类使用这个变量
     void  method( int  a ) {
     this . a = a ;
    }
     public    int  method2() {
     return  a ;
    }
}
 
class  $78 extends  test2{
     public    void  test(){
      super .method(78); //super 关键字调用父类方法利用 method 方法修改 a 的值
      int  a = super .method2(); // 将修改改过的值赋给 a
     System. out .println( a );
    }
}

 

转载于:https://www.cnblogs.com/cainame/p/10091934.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值