Java面向对象

按照东西的特征和自然组织形式, 进行软件开发过程的
  组织, 是一个开发过程的方法论. 
学习面向对象: 学习如何用OO语法描述事物的特征和
  自然组织形式. 

学习面向对象思维的前提是朴素的哲学逻辑.
如: 多态, 抽象概念的具体实现是多态的,
   如:美女是多态的!

对象(Object)->东西, 啥都是东西.

类(Class)
  类是用来描述一个领域模型中的具体概念(名词)的. 
  领域模型: 一个应用软件业务范畴, 也叫业务模型.
  属性: 描述具体概念的特征.

案例:
  <图书馆管理系统>中的概念: 书 Book
  书的特征: 书号, 书名, 编号, 作者, 价格...

Java中的类语法
  修饰词 class 类名{
  修饰词 类型 属性;
  }
  
  public class Book{
  int id;
  String name;
  String[] authors;
  String isbn;
  double price;
  }

对象(Object)概念的具体实例,对象是类的具体实例!
  《山楂树之恋》是一本书,
  《和空姐同居的日子》是一本书,

引用:是指向具体对象的句柄,相当于自然语言的代词。
   
   请给我《山楂树之恋》这本书,这本书很感人。
   对不起,书卖完了!
   
   代词本身不是对象,代词引用了一个具体对象。
   在特殊情况下代词可能指空。
   经常简单的叙述事物时候,不严格区别代词与对象。
   
Java 中的引用和对象
  Book book = new Book();
  //book 引用变量,具体引用一个书的实例。
  book.name = "月子";
  book.authors = new String[]{"白云","黑土"};
  book = null;//book引用null
   
引用是null时候,访问属性或方法时候会出现: 
  空指针异常 java.lang.NullPointerException
  
案例:
  平面绘图坐标系中的一个点(Point),定义合理的属性
  坐标是int类型.
   O+-----------------------------> X
    |
    |
    |
    |
    |          . p(x,y)
    |
    |
    |
    |
    
    Y
   
构造器(构造方法) 
  用来描述对象的创建过程的.
  如: 月饼实例的创建, 使用面和馅创建.
              制作(构造器)
  月饼模子(类)  -----> 月饼(对象)
              原料(构建参数)
   
  点类型   -------->  原点 
           (0,0)
  
Java中的构造器: 声明在类内部, 方法名与类名一致
  的方法叫构造方法, 构造方法不能声明返回值类型.
  构造方法可以包含参数, 参数一般是创建对象实例
  必须依赖的条件(前提条件).




new运算: 创建对象实例
  1 根据类的属性在堆中分配对象空间.
  2 根据参数类型调用构造器.
  3 new运算返回对象的引用地址.
对象的创建过程
  1 根据类的属性在堆中分配对象空间,并且自动初始化.
  2 根据参数类型调用构造器.




this 是对当前对象的引用, 是当前对象本身.
  可以使用this明确的访问当前对象的属性或者方法
  类似于"我".
this() 是调用本类的其他构造器, 可以使用构造器的
  重用, 简化代码的实现. 
  * this() 必须写在构造器的第一行!




构造方法经常会重载
案例: Book.java
   方法签名 = 方法名+参数类型列表
   方法重载:a 方法名一样 b 方法参数不一样
     也可以说: 方法名一样, 方法签名不同的方法
   
默认构造器
  案例: ConstructorDemo.java
  1 如果类没有声明任何构造器,Javac自动提供一个
  默认构造器, 无参数默认构造器
  2 如果提供构造器声明, Javac将不再提供默认构
  造器.   
    
对象的方法, 表示对象的功能, 依赖于对象存在.
  案例: Point.java
  如: p1.distance() 和 p2.distance()
  方法是动作,是功能,一般用动词声明.  
  方法也经常重载, 重载:方法名一样, 参数不一样
  重载体现了, 功能的多态.
  重载的方法经常互相重用.
  
  
java方法参数的传递规则: 基于值的传递, 是变量值的
  复制, 基本类型就是其中值的复制, 引用类型是引用
  值(地址)的复制.
  案例: ParamaterDemo.java
  * 变量的值: a 基本类型的值是其本身,
           b 引用变量的值是一个地址值, 
             是被引用对象的首地址.
  为了避免引用参数传递的副作用, 建议一切结果使用
  返回值带回. 




数组对象
  int[] ary = new int[10];
  int[] ary1 = ary;
  //数组的复制
  int[] ary2 = new int[10];
  for(int i=0; i<ary.length; i++){
  ary2[i] = ary[i];
  }
  //ary2 是 ary 一个副本
  //java 提供了现成的复制方法:
  int[] ary3 = new int[10];
  System.arraycopy(ary, 0, ary3, 0, 10);
  //Java6 以后提供了:
  int[] ary4 = Arrays.copyOf(ary, 11);
  
元素是对象数组
  String[] authors = new String[5];
  Book[] books = new Book[]{
    new Book(1, "日子"), 
    new Book(2, "空姐")};
集体案例:
  package day08;




public class Point {
  int x;
  int y;
  public Point(int x, int y){
    System.out.println(
        "调用构造器:this.x="+this.x+",this.y=" + this.y );
    this.x = x;
    this.y = y;
  }
  // 计算当前点到原点的距离
  public double distance(){
    return Math.sqrt(this.x * this.x + 
        this.y*this.y);
  }
//计算当前点(this)到另外一点(other)的距离
  //计算当前点(this)到另外一点(other)坐标的距离
  public double distance(Point other){
//    return Math.sqrt((this.x-other.x)*(this.x-other.x)
//        +(this.y-other.y)*(this.y-other.y));
    return distance(other.x, other.y);
  }
  //计算当前点(this)到另外"坐标"的距离
  public double distance(int x, int y){
    return Math.sqrt((this.x-x)*(this.x-x)
        +(this.y-y)*(this.y-y));
  }
}
//Point o = new Point(1,2);
——————————————————————————————————
package day08;




public class ParamaterDemo {
  public static void main(String[] args) {
    Koo koo = new Koo();
    int a = 1;
    update(a);
    update(koo);
    System.out.println("a="+a+",koo.a="+koo.a);//1,2
    int b = update2(a);
    int c = update2(koo);
    System.out.println("b="+b+",c="+c);//2,3
    
  }
  static void update(int a){
    a++;
  }
  static void update(Koo koo){
    koo.a++;
  }
  
  static int update2(int a){
    a++;
    return a;
  }
  static int update2(Koo koo){
    koo.a++;
    return koo.a;
  }
}
class Koo{
  int a=1;
}





















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值