Java面向对象

初识面向对象

什么是对象?

  • 对象不仅在编程领域,而且在现实生活中都是一个非常重要的概念。我们需要理解一个概念,“万物皆对象”。显示存在的客观事物都是对象。比如长城,电脑,一件衣服,一只狗,一只猫都是对象。只要是现实生活中存在的都是对象。
  • 对象可以分为两部分,一种是静态的部分,比如一个人的性别,年龄,姓名等,这些称之为属性。另一种是动态的部分,比如人可以行走,吃饭,睡觉等,这些可以称之为方法。

什么是类?

  • 类可以理解成一个抽象的笼统的概称,比如小明和小李都有各自的名字和爱好,但是他们俩都有一个共同的属性和行为—人类。类就是模子,用于确定对象将会拥有的特征(属性)和行为(方法)

什么是面向对象?

  • 从字面上理解,面向对象就是与对象面对面,关注对象。从计算机的角度,就是关注现实存在的事物的各方面信息,从对象的角度出发根据事物的特征进行程序的设计。

在现实生活中,我们也可以看到类和对象的概念:

  • 比如电脑,电脑由cpu,硬盘,内存条,显卡等属性构成,电脑可以办公,娱乐,编写程序等动作方法,这些加起来可以称之为类,具体的某一台电脑可以称之为一个对象。
  • 比如水果,有苹果,梨子,桃子等,水果这个大的概念可以看作类,具体的苹果梨子可以看作是一个个对象。
  • 人有男性和女性,他们都有各自的姓名,性别,也有各自的行为,人类可以统一他们相同的属性,具体的个人可以看作是一个个对象。
  • 一张建筑图纸可以造出具体的一幢房子,建筑图纸就可以看作是类,具体造出来的房子就可以看作是具体的对象
  • 狗按体型可以分为小型犬,大型犬等,按功能可以分为家庭犬,工作犬狩猎犬等,具体的某只狗如哈士奇就可以看作是一个对象,狗这个分类就可以看作是一个类。
  • 食物可以看作是一个类,具体有米饭,面条,粥等,这些都是对象。
  • 饮料可以看作是一个类,可乐,橙汁等可以看作是一个个对象。
  • 树有松树,樟树,桃树等,具体的树可以看作是对象。
  • 汽车按品牌可以分为宝马,奥迪,大众等,按用途可以分为货车,轿车,客车等,具体的某一辆车可以看作对象。
  • 运动可以分为有氧运动,无氧运动,跑步,游泳等可以看作是一个个对象。

根据上述所说,类和对象的关系我们可以总结如下:

  • 对象是类的实例化表现
  • 类是对象的类型
  • 对象是特定类型的数据

类与对象的定义和使用

包的管理
为了便于类文件的管理,Java 中引入了包的概念 package,类的唯一性是要带包名的。
包的命名规范

  1. 英文字母小写
  2. 域名的倒序
第一层是企业的域名的反写  
    例如:com.xxx
    
第二层是企业项目的名称  
    例如:com.xxx.j96、com.xxx.crm
    
第三层是企业项目模块的名称  
    例如:com.xxx.j96.oop、com.xxx.crm.base
  • 一个Java源文件中,只能有一个package语句,而且必须放置在Java源文件的第一行。
  • 在不同的包中,是可以定义相同类名的类的。因为一个类的唯一性是包含包名的,比如com.xxx.j96.oop.Demo1叫做类的全名。
  • 在实际的企业开发中,是不允许出现没有包的类。

包的使用

  • 使用 import 关键字将本类要使用的其他包中的类进行引入。

  • 使用ALT+/可以单个引入,也可以使用CTRL+SHIFT+O全部引入。

  • 如果要引入某个包下面的所有类,可以使用通配符*,例如,引入com.ntduduke.j96.oop.*,但是要注意通配符只能出现在最后。

  • 对于 java.lang 包中的类,系统会自动的默认引入,不需要使用 import。

创建类

class 类名称 {
         属性 (变量) ;
         行为 (方法) ;
}
public class Cat{
    //成员属性(属性指有什么)、昵称、年龄、体重;
    String name;//昵称
    int age;//年龄
    
    //方法(方法指能做什么):跑步、吃东西 
    //成员方法
    //跑步的方法
    public void run(){ 
        System.out.println("我会跑步");
    }
    //吃东西的方法
    public void eat(){
        System.out.println("我会吃鱼");
    }
}

类创建完成后依靠对象来展现属性和调用方法。那对象如何来的呢,这里就要引入到一个实例化的概念。

实例化对象
方式:

类名称 对象名称 = new 类名称 () ;
或者
类名称 对象名称 = null ;
对象名称 = new 类名称 () ;
public class CatTest{
    public static void main(String[] args) {
        Cat one= new Cat();
        one.eat();
        one.run();
        System.out.println(one.month);//有默认值
    }
}

当一个实例化对象产生之后,可以按照如下的方式进行类的操作:
对象.属性:表示调用类之中的属性;
对象.方法():表示调用类之中的方法。

根据上述的例子,我们总结如下几点:

  1. 当几个类同属于一个包时,相互之间可以直接使用。
  2. 类存在动态的行为和静态的特征
    a. 静态的特征就是具体的属性,就是类的成员所拥有的属性
    b. 动态的行为就是方法,类的成员所拥有的方法
  3. 类的成员就是对象
  4. 类的属性和方法只有对象可以使用

new关键字
通过new关键字可以实现对象的实例化过程,实际上也就是对象的创建过程。

类名 对象名 = new 类名();

实例化对象的过程可以分为两部分:

  • 声明对象 Cat one;
  • 实例化对象 new Cat();

声明对象:是在内存的"栈"空间里开辟了一块空间,取名叫one,此时里面为空(null),并且对它的属性和方法的调用是不允许的。所以因为这样我们并不能像真正的对象那样使用它
实例化对象:是在内存的堆空间里开辟了一块空间,完成了对象相关信息的初始化操作

声明对象和实例化对象是在内存的两个不同的空间去完成的,接着通过赋值符号"="把两个空间关联起来关联,将堆空间中的内存地址存放到了栈空间中,在栈当中存储的实际上是堆当中地址的引用。

在这里插入图片描述
当实例化对象时,栈内存和堆内存各自都开辟了空间并联系起来,所以类的属性都存在默认值(未进行初始化时)。
new关键字的作用,实际上就是去开辟新的内存空间。

Cat one= new Cat();
Cat two= new Cat();
//引用数据类型打印出来是类全名+@+内存地址的哈希值
//如果两个对象时同一个对象,那么内存地址相同
System.out.println(one);
System.out.println(two);
//== ,比较两个引用数据类型,判断内存地址是否相同
System.out.println(one == two);

在这里插入图片描述

Cat one= new Cat();
Cat two= one;//将one所代表的内存地址复制给了two

此时,如果对one对象进行修改,则会影响到two对象
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值