8.Java 对象和类的概念

Java对象和类

在这里插入图片描述

1.对象的概念

对象:对象是类的一个实例,有状态和行为。
例如,一条狗是一个对象。
它的状态有:颜色、名字、品种;(名词,是什么类型)
行为有:摇尾巴、叫、吃等。(动词,具有什么功能)

软件对象也有状态和行为。
软件对象的状态就是属性,行为通过方法体现。
在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。

1.1.面向对象思想特点
  • 是一种更符合我们思想习惯的思想(懒人思想)

  • 可以将复杂的事情简单化

  • 将我们从执行者变成了指挥者

  • 角色发生了转换

1.2.面向对象开发
  • 就是不断的创建对象,使用对象,指挥对象做事情。
1.3.面向对象设计
  • 其实就是在管理和维护对象之间的关系。
2.类的概念

类:类是一个模板,它描述一类对象的行为和状态,可以看成是创建Java的模板。

public class Dog{      //类,定义一个狗类
    String breed;       //成员变量(类中的变量)
    int age; 
    String color; 
    void barking(){ }   //方法
    void hungry(){ }    //在实现方法的时候,需要变量,
    void sleeping(){ }   //局部变量(方法中的变量)
}
  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。

  • 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。

一个类可以拥有多个方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog类的方法。

2.1.Java中最基本的单位是类,Java中用class描述事物也是如此
  • 成员变量 就是事物的属性

  • 成员方法 就是事物的行为

2.2.定义类其实就是定义类的成员(成员变量和成员方法)
  • 成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。

  • 成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。

2.3.类和对象的概念
  • 类:是一组相关的属性和行为的集合

  • 对象:是该类事物的具体体现

  • 举例:

          类     学生
    
          对象  具体的某个学生就是一个对象
    
3.构造方法
3.1.构造方法概述和作用
  • 给对象的数据(属性)进行初始化
3.2.构造方法格式特点
  • 方法名与类名相同(大小也要与类名一致)

  • 没有返回值类型,连void都没有

  • 没有具体的返回值return;

 class Demo1_Constructor{      //Constructor构造
           public static void main(String[] args) {
            Person p = new Person();              
            //在一创建对象的时候,系统就帮我调用了构造方法
            
            //p.Person();   //构造方法不能用对象调用
            
            p.show();
            Person p2 = new Person();      //再次创建对象
            p2.show();
           }
    }
class Person {
           private String name;
           private int age;
           
        //构造方法
        public Person() {
        System.out.println("Hello World!");
        return; //构造方法也是有return语句的,格式是return;
            name = "张三";
                  age = 23;
           }
           public void show() {
                  System.out.println(name + "..." + age);
           }
    }
3.3.总结:
  1. 每个类都有构造方法。

  2. 如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。

  3. 在创建一个对象的时候,至少要调用一个构造方法。

  4. 构造方法的名称必须与类同名,一个类可以有多个构造方法。

构造方法注意事项:

  • 如果我们没有给出构造方法,系统将自动提供一个无参构造方法。

  • 如果我们给出了构造方法,系统将不再提供默认的无参构造方法。

注意:
这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法

4.创建对象

对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。

创建对象需要以下三步:

  1. 声明:声明一个对象,包括对象名称和对象类型。

  2. 实例化:使用关键字new来创建一个对象。

  3. 初始化:使用new创建对象时,会调用构造方法初始化对象。

public class Puppy{ public Puppy(String name){ //这个构造器仅有一个参数:name 
    System.out.println("小狗的名字是 : " + name ); 
} 
public static void main(String[] args){ 
// 下面的语句将创建一个Puppy对象 
Puppy myPuppy = new Puppy( "tommy" ); 
    } 
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E5bOwR7r-1570343976629)(en-resource://database/723:1)]

5.访问实例变量和方法

通过已创建的对象来访问成员变量和成员方法。

/* 实例化对象 */
Object referenceVariable = new Constructor();
/* 访问类中的变量 */
referenceVariable.variableName;
/* 访问类中的方法 */
referenceVariable.methodName();

public class Puppy{ 
int puppyAge; 
public Puppy(String name){
// 这个构造器仅有一个参数:name 
System.out.println("小狗的名字是 : " + name );
    }
public void setAge( int age ){
puppyAge = age;
    } 
public int getAge( ){ 
System.out.println("小狗的年龄为 : " + puppyAge ); return puppyAge; 
    } 
public static void main(String[] args){ 
/* 创建对象 */
Puppy myPuppy = new Puppy( "tommy" ); 
/* 通过方法来设定age */
myPuppy.setAge( 2 ); 
/* 调用另一个方法获取age */ 
myPuppy.getAge( ); 
/*你也可以像下面这样访问成员变量 */ System.out.println("变量值 : " + myPuppy.puppyAge ); 
    }
}

结果:
小狗的名字是 : tommy
小狗的年龄为 : 2
变量值 : 2

6.源文件声明规则

当在一个源文件中定义多个类,并且还有import语句和package语句时。

要特别注意这些规则:

  • 一个源文件中只能有一个public类

  • 一个源文件可以有多个非public类

  • 源文件的名称应该和public类的类名保持一致。

例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。如果一个类定义在某个包中,那么package语句应该在源文件的首行。

  • 如果源文件包含import语句,那么应该放在package语句和类定义之间。

  • 如果没有package语句,那么import语句应该在源文件中最前面。

  • import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。

7.匿名对象
7.1.什么是匿名对象
  • 没有名字的对象
7.2.匿名对象应用场景
  • 调用方法,仅仅只调用一次的时候。

那么,这种匿名调用有什么好处吗?

  • 节省代码

注意:
调用多次的时候,不适合。
匿名对象调用完毕就是垃圾,可以被垃圾回收器回收。
匿名对象可以作为实际参数传递

7.3.演示

匿名对象应用场景

class Demo2_Car {
       public static void main(String[] args) {
             Car c1 = new Car();          //创建有名字的对象
              c1.run();
              c1.run();
              new Car().run();           //匿名对象调用方法
              new Car().run();        //匿名对象只适合对方法的一次调用,因为调用多次就会产生多个对象,不如用有名字的对象    
        //匿名对象是否可以调用属性并赋值?有什么意义?    
       // 匿名对象可以调用属性,但是没有意义,因为调用后就变成垃圾
        //如果需要赋值还是用有名字对象
              new Car().color = "red";
              new Car().num = 8;
              new Car().run();
       }
}

class Car {
    String color;          //颜色
    int num;               //轮胎数
       public void run() {
              System.out.println(color + "..." + num);
       }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值