Jonas596

一、面向对象简述

  在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。
在面向对象定义之中,也规定了一些基本的特征:
(1)封装:保护内部的操作不被破坏;
(2)继承:在原本的基础之上继续进行扩充;
(3)多态:在一个指定的范围之内进行概念的转换。

二、类与对象的基本概念

  :类是一个模板,它描述一类对象的行为和状态。
  对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

  类名一般遵循的规则:
  1.由一个单词组成,类名首字母要大写
  2.由多个单词组成,每个单词首字母要大写
  变量名和方法名一般遵循的规则
  1.由一个单词组成,用小写
  2.由几个单词组成,第一个单词首字母小写,其余单词首字母大写

*局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
*成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。

分为两种:实例变量和静态变量

实例变量:不用关键词static修饰;一个类中不同对象的实例变量将分配不同的存储空间;只能通过对象访问实例变量;

静态变量(类变量):用关键词static修饰;一个类中所有对象的某个静态变量被分配同一个内存,所有对象共享这个静态变量;可以通过 类名访问静态变量,也可以通过某个对象访问静态变量;
  如果一个成员变量修饰为final,那么就变成了常量(习惯用大写字母)    

 

*this关键字
 this.属性名称      指的是访问类中的成员变量,用来区分成员变量和局部变量
 this 可以出现再实例方法和构造方法中,但是不可以出现在类方法中
 构造方法:代表使用该构造方法所创建的对象
 实例方法:代表使用该实例方法所创建的对象

使用this区分成员变量和局部变量:

如果成员变量和局部变量的名称相同,则成员变量被隐藏,即成员变量在方法内暂时失效,如想在方法中使用成员变量,对于实例方法,应使用“this.成员变量”,对于类方法,应使用“类名.成员变量”;this不能省略;



*构造方法:类创建对象时,需要使用构造方法完成对象的初始化工作
      构造方法的名称必须与类名相同
      构造方法没有任何返回数据类型,包括关键字void
      对象不可以调用构造方法
      任何一个类都有构造方法。如果我们没有显式的定义,系统会定义一个默认的无参数的构造方法。一旦我们定义了构造方法,这个默认的无参数的构造方法就不再创建
       一个类中可以有若干个构造方法(名称相同),但参数必须不同
*一般方法:实例方法和类方法
*实例方法:方法声明中不用static修饰,必须通过对象来调用
*类方法(静态方法):方法声明中用static修饰,可以通过类名调用

*参数传值

(1)基本数据类型参数的传值:实参和形参占有不同的内存空间,形参的改变不影响实参;实参的级别要低于形参的级别

例:

 1 class Exchange{
 2       int a,b;
 3       void exchange(int a, int b){
 4           this.a=a;
 5           this.b=b;
 6           int temp = this.a;
 7           this.a=this.b;
 8           this.b=temp;
 9      }   
10  }
11 
12 public class TestBasicParameter{
13      public static void main(String[] args){
14          int x = 10;
15          int y = 20;
16          System.out.println("交换前,x=" + x + ";y=" + y);
17          Exchange test=new Exchange();
18          test.exchange(x,y);
19          System.out.println("交换后,x=" + x + ";y=" + y);
20      }
21  }

x,y是实参,test.exchange中的x,y传到exchange方法中是形参,形参的改变不会改变实参,所以交换后x,y还是10、20。

(2)引用类型参数的传值:引用类型数据包括对象、数组以及接口和泛型等;

                                            实参和形参指向共同的内存,改变形参引用的实体会导致实参实体发送同样的变化

 1 class Exchange{
 2       int a,b;
 3       void exchange(Exchange u){
 4           int temp = u.a;
 5           u.a=u.b;
 6           u.b=temp;
 7      }   
 8  }
 9 
10 public class TestClassParameter2{
11      public static void main(String[] args){
12          Exchange test=new Exchange();
13          test.a=10;
14          test.b=20;
15          System.out.println("交换前,test.a=" + test.a + ";test.b=" + test.b);
16          test.exchange(test);
17          System.out.println("交换后,test.a=" + test.a + ";test.b=" + test.b);
18      }
19  }

 


三、对象的创建
(1)格式一:声明并实例化对象
类名称 对象名称 = new 类名称 () ;

(2)格式二:先声明对象,然后实例化对象:
类名称 对象名称 = null ;
对象名称 = new 构造方法名 () ;

   对象的使用:通过使用运算符".",对象可以实现对自己的成员变量和成员方法的访问

   对象名.成员变量

   对象名.成员方法


四、对象引用传递分析
 范例一:

class Person {     
         String name ;
         int age ;
         public void tell() {        
                   System.out.println("姓名:" + name + ",年龄:" + age) ;
         }
}
public class TestDemo {
         public static void main(String args[]) {
                   Person per1 = new Person() ;         // 声明并实例化对象
                   per1.name = "张三" ;
                   per1.age = 20 ;
                   Person per2 = per1 ;  // 引用传递
                   per2.name = "李四" ;
                   per1.tell() ;
         }
}

对应内存分配:

范例二:

 1 class Person {
 2          String name ;
 3          int age ;
 4          public void tell() {
 5                    System.out.println("姓名:" + name + ",年龄:" + age) ;
 6          }
 7 }
 8 public class TestDemo {
 9          public static void main(String args[]) {
10                    Person per1 = new Person() ;         // 声明并实例化对象
11                    Person per2 = new Person() ;
12                    per1.name = "张三" ;
13                    per1.age = 20 ;
14                    per2.name = "李四" ;
15                    per2.age = 30 ;
16                    per2 = per1 ;// 引用传递
17                    per2.name = "王五" ;
18                    per1.tell() ;
19          }
20 }

对应内存分配:

分类:

技术点:

相关文章:

  • 2021-12-21
  • 2021-08-07
  • 2021-11-27
  • 2021-11-27
  • 2021-11-27
  • 2021-11-27
猜你喜欢
  • 2021-11-27
  • 2021-11-27
  • 2021-08-19
  • 2021-12-21
  • 2021-11-27
  • 2019-05-26
相关资源
相似解决方案