简单学习->类和对象(1)

什么是类?

 用 关键字 class 修饰的就是一个类.

(像这样 ,我们就创建了一个类叫 Student)

类是个什么东西? 

类 可以把 它看成是一个类型 ,  就好像我们买衣服,衣服有各种类型(什么上衣,裤子,短袖,长袖之类的). 像上面我们就创建了 一个 Student类 ;

类的成员属性和成员方法

定义在类里的 变量 和 方法 , 就是这个 类的 成员属性(或成员变量) 和 成员方法;(不懂什么是变量和方法的可以看简单学习->变量和方法-CSDN博客)

public class Student {
    public String name ;
    public int num ;
    //上面的两个变量 是我们定义的 成员属性 ; 是定义在类的里面的;

    public void func(){

    }
    //这里的func 就是我们定义的 成员方法 ;
}

(注意:成员变量 和 成员方法 是定义 在 类 的 {} 大括号里头)

像这里的 num1变量,才是Student类的成员变量, 而func()方法里的num2变量只是一个局部变量;

总的来说: 成员变量时定义在 类的里面 , 方法的外面 ;

对象(类的实例化)

对象是 通过 new 关键字 ,来调用 构造方法 实例化类 ,构造出来的 ;

创建对象的格式 :  new  类名()  ;          (通过new + 类的名字+ () 小括号 来创建对象);

(我们创建的Student类,就是相当于创建一个Student类型,我们来创建一个s1引用变量, 来接收 我们创建的对象)

对象的属性

          我们创建一个对象时, 这个对象里也包含我们定义的属性和方法 ;

构造出来的s1对象, 因为我们没有给对象的属性,进行任何初始化操作, 所以这些属性的值都是默认值,默认值是0; (因为String是引用对象,引用对象的默认值是 null )

获取对象的属性

既然我们对象里也会有我们在类里定义的属性,那么如何获取对象里的属性: 通过 . 点号来访问;

格式:  对象名 . 属性名 ;     (在对象名后面跟一个 . 点号, 就可以访问 该对象的属性)

(前面我们创建了s1对象, 我们用s1. 的时候 编译器会弹出一个窗口供我们选择要访问的变量)

(用a和b来接收 s1对象属性的值, 当然因为没有初始化,所以最后 a=0,  b = null)

通过.点号修改对象属性的值

我们可以通过.点号访问对象的属性,也可以通过点号修改他们的值 ;

Student s1 = new Student();
 s1.num1 = 5 ;
 s1.name = "李四";

把s1对象的num1的值改成5 , 把name的值 改成 "李四";

对成员属性进行初始化操作
在定义成员变量时,把值赋给成员变量 ;

(在类里定义成员变量时,就把值赋给他们)

此时,我们再 创建Student对象 时, 对象里的属性就 不再是0 , 而是我们定义属性时给的值 ;

(这时候再创建s1对象,对象里的属性的值就不是0了)

通过.点号调用方法

(可以使用.点号,来调用对象的方法)

练习代码

public class Student {

    public String name = "张三"; //定义成员变量时进行初始化
    public int num1  = 18 ;   //定义成员变量时进行初始化
    public void func(){
       int num2 ;
    }
}
class Test2{
    public static void main(String[] args) {
        Student s1 = new Student();
        // new 一个对象, 用s1 来接收 ;
         s1.func();    // 调用 s1里的func()方法
          s1.num1 = 5 ;
         s1.name = "李四";      //修改对象的属性
        int a = s1.num1;       // a 接收 s1的num1的值
        String b = s1.name;;    // b 接收 s1的name的值
        System.out.println(a);
        System.out.println(b); // 输出a和b
    }
}
使用构造方法来初始化属性

前面的在定义成员变量时就初始化的方法,有一个小问题,那就是我们后面再创建的对象里的属性都是一样的;

(创建3个对象,3个对象里的属性都是一样的,name="张三",num1=1)

虽然我们可以通过.点号来修改 这些属性的值, 但是不要方便, 我们希望 一开始创建对象时就可以按照我们的要求来赋值 , 这就要靠构造方法来帮助我们

构造方法

对属性的初始化,不仅可以在类里定义时直接赋值,也可以通过构造方法来;

 类的构造方法,也是写在类里的;

定义构造方法的格式:   类名 (参数列表){       }  ;      (构造方法相比普通的方法, 没有返回类型)

(在类里写一个有两个参数的构造方法,用这两个参数来初始化对象属性)

这时候我们 创建对象时,就可以 传两个参数 来构造对象;

(这样在创建对象时,就可以根据我们给的参数,来构造出外面需要的对象)

构造方法的作用(创建一个对象的本质)

创建一个对象的本质: 是 通过 new 关键字,创建出对象, 调用 构造方法 (构造方法进行给属性初始化操作),然后返回执行这个对象的引用 ; 

要创建出对象,必需通过构造方法来,构造对象 ;

(通过构造方法,来让构造出来的对象里的属性,是我们想要的值)

总的代码:

public class Student {

    public String name = "张三"; //定义成员变量时进行初始化
    public int num1  = 18 ;   //定义成员变量时进行初始化

    public void func(){
       int num2 ;
    }
    public Student(){
    }
     //Student的构造方法 ;
    public Student (int a , String b){
        num1 = a ;      //  把a的值赋给 num1 ;
        name = b ;      // 把b的值赋给 name ;
    }

}
class Test2{
    public static void main(String[] args) {
        Student s1 = new Student();
         s1.num1 = 5 ;
         s1.name = "李四";

        // new 一个对象, 用s1 来接收 ;
        int a = s1.num1;       // a 接收 s1的num1的值
        String b = s1.name;;    // b 接收 s1的name的值
        System.out.println(a);
        System.out.println(b); // 输出a和b
        Student s2 = new Student(20 , "赵云");
        Student s3 = new Student(30 , "张飞");     // 在构造对象时,给属性赋值
    }
}

问题: 我们前面没有在Student类里写构造方法,为什么可以创建出Student对象?

因为:当我们没有给类写任何的构造方法时,编译器会自动给我们创建一个不带参数,方法体里什么都没有的构造方法;

public class Apple {
    int num ;
    String name ;
}
class Test3{
    public static void main(String[] args) { 
        Apple apple1 = new Apple();   // 创建一个Apple对象
    }
}

Appale类里我们没有写任何的构造方法, 下面创建Apple对象时 ,编译器会默认创建一个不带参数的,方法体里没有任何东西的构造方法 ;

相当于这样的构造方法:

(编译器给我们创建的构造方法,没有参数,方法体里什么都没有)

如果我们在类里 ,写了 构造方法, 已经有构造方法了,那么编译器就不会给我们创建构造方法;

(带一个参数的构造方法)

此时我们下面创建对象就会报错了 ;

 这里创建对象,编译器给我们报错了, 因为Apple类里已经有构造方法了,所以编译器不会自动创建构造方法, 这里我们new一个对象,用的构造方法是没有参数的, 但是类里只有 带一个参数的构造方法,所以给我们报错 ;

 给构造方法传一个参数就不会报错了 ;

构造方法的特点

1. 构造方法的名字必须和类名一样, 并且不能有返回值;

2. 什么时候会调用构造方法,就是创建对象时,会调用一次构造方法 ;

3. 如果我们没有自己写构造方法,那么会自动创建一个不带参数的构造方法,写了就不会自动创建 ;

4.构造方法可以构成方法的重载 ;

最后

如果大家没有对象,我可以帮大家 new 几个对象;

public class GirFriend {
    String name = "美铝";  //名字
    int height = 160 ;    // 身高 :cm
    int width = 48 ;      //体重:kg
}

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值