面向对象

来源:互联网 发布:办公室网络安装 编辑:程序博客网 时间:2024/06/06 01:51

1:面向对象
 (1)面向过程 强调过程,执行者
 (2)面向对象 强调对象,指挥者
 (3)面向对象思想的特点
  A:它是一种更符合人们思考习惯的思想
  B:它是复杂的内容简单化
  C:它使我们从执行者变成了指挥者
 请解释面向对象的思想?
 定义一:面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。
 定义二:面向对象方法是以认识论为基础,用对象来理解和分析问题空间,并设计和开发出由对象构成的软件系统
 (解空间)的方法。 由于问题空间和解空间都是由对象组成的,这样可以消除由于问题空间和求解空间结构上的不
 一致带来的问题。简言之,面向对象就是面向事情本身,面向对象的分析过程就是认识客观世界的过程。
 面向对象方法从对象出发,发展出对象,类,消息,继承等概念。
 面向对象方法的主要优点是:符合人们通常的思维方式;从分析到设计再到编码采用一致的模型表示具有高度连续性;
 软件重用性好。
 (4)面向对象的特点
  A:封装
  B:继承
  C:多态

2:类和对象         
 (1)类 对现实世界中事物的描述(属性和方法) Person p = new Person();
 (2)对象 现实世界中实际存在具体的个体
 (3)对象的使用以及内存图 new
 

3:局部变量和成员变量
 (1)作用范围
  局部变量:方法内
  成员变量:类中,对整个类有效{成员变量分为两种一种静态的,一种非静态的}
 (2)存储空间
  局部变量:栈内存
  成员变量:堆内存{静态的成员变量在方法区,非静态的在对象中在堆内存中}
 (3)初始化值
  局部变量:在使用前必须手动给值
  成员变量:jvm默认初始化值。

  class Person {
   int num;
   public void method(){
    int age ;
    //age = 10;
    System.out.println(num);
   }
  }

4:匿名对象的使用(了解)
 (1)当对对象中的功能只执行一次的时候使用。否则,请你使用有名字的对象。
  Person p = new Person();
  p.show();
  p.show();
  p.print();
  new Person().show();
  new Person().show();
  new Person().print();
  method(new Person());
 (2)用于作为实际参数进行传递。
 Person p = new Person();
  method(Person pp){}
  method(new Person());
  method(p);
  new Person();
  public static void method(Person p){}
 (3)是否可以用匿名对象调用属性,是否有意义?
  可以调用,但是没有意义,因为调用后没有任何的引用指向,会直接变成垃圾

4:封装
 (1)封装的好处:便于重复使用,安全性高。
 (2)private权限修饰符
  class Demo{
   int age;//把属性私有对外提供公共的访问方法,可控性提高了

   public void setAge(int age){//age = -20;
    if(age>=0 && age<=200){
     this.age = age;
    }
    else { 
     System.out.println("请回火星");
    }
   }

   public int getAge(){
    return age;
   }/*
   设置是setXxx要传参数
   获取是getXxx要返回值类型,返回值类型和属性一致
   */
  }
  class DemoTest{
   public static void main(String[] args) {
    Demo d = new Demo();
    d.setAge(-20);
    System.out.println(d.getAge());
   }
  }
5:构造函数
 class Person{
  int age;
  Person(int age){}
 }
 (1)用途:用于给对象中属性进行初始化。
  A:格式类名(){code}Person(){}
  B:Person(){}public Person(){}
 (2)特点 你不定义空参数的构造函数,系统会自动给一个空参构造,你定义了构造函数无论是有参还空参的,
  系统就不再给空参数的了。
 (3)重载构造函数,是根据参数列表来区分是哪个构造函数
  A:Person(){}//Person p = new Person();
  B:Person(int age,String name){}
  C:Person(int age){}
  D:Person(String name,int age){}

 注意:构造还可以用于给属性赋值。
class Person{
  int age;
  String name;
  Person(){}
  Person(int age,String name) {
   this.age = age;
   this.name = name;
  }
  public void speak(){
   System.out.println(age + "....." + name);
  }
}
class Demo{
 public static void main(String[] args) {
  //Person p = new Person(20,"zhangsan");
  Person p = new Person();
  p.speak();
 }
}
6:this关键字
 (1)代表当前对象的引用。使用的时候,谁调用方法,this就代表谁。
 (2)什么时候使用this呢?
  A:当局部变量和成员变量重名的时候,可以用this进行区分。
  B:写功能的时候,可能用到this。比如比较两个对象的年龄compare()
  C:构造函数中使用this
   **this() 必须放在第一行。
  
  同下面的道理:
  Person(String name){
   this.name = name;
  }

  Person(String name,int age){
   
   this("张三");//是找带一个字符串类型参数的构造方法
   this.name = name;
   this.age = age;
   //this("zhangsan");

  }
  Person p = new Person("lisi",20);
7:代码块
 (1)局部代码块 控制变量的生命周期{int x}
 (2)构造代码块 每创建一次对象就执行一次。
 (3)思考下面的问题
  Person p = new Person();
  它在内存中做了哪些事情?
  A:将Person.class文件加载到内存中。
  B:在栈内存中声明Person类型的变量P。
  C:在堆内存中创建一个对象Person。分配地址值
  D:把Person中的属性进行默认初始化。
  E:把Person中的属性进行显示初始化。
  F:调用构造代码块(如果没有,不执行这个操作)。
  G:调用构造函数进行初始化。
  H:把堆内存的地址(引用)赋给了栈内存中P。

  public void method() {
   {
    int x = 10;
    System.out.println(x);
   }
  }
  class Person{
   {
    System.out.println("你好");
   }
  }

  Person p = new Person();

0 0
原创粉丝点击