Java基础 Day08(类)

一、类的语法格式

访问修饰符 class 类名 {
         属性、特征
         方法、行为
     }

  1、类名首字母大写!
       2、类是对一组具有相同特征和行为的事物的抽象!
二、类和对象的区别
       1、类是抽象的,而对象是具体的。
       2、类的范围更广。
       3、类是对象的模板,对象是类的实例。
       4、万事万物皆对象。

public class Person {
    //特征,就是属性(成员变量),用来描述一个类中的信息
    String name;  //姓名
    String gender;//性别
    int age;      //年龄
    double height;//身高
    
    //行为、方法
    public void eat() {
        System.out.println("人在吃东西。");
    }
    public void sleep() {
        System.out.println("人在睡觉觉。");
    }
    //自我介绍
    public void introduce() {
        System.out.println("姓名:" + name + 
                            "性别:" + gender + 
                            "身高:" + height + 
                            "年龄:" + age);
    }

三、创建对象

类名 对象名 = new 构造方法;

  1、new关键字是用来创建对象的,对象本身存在于堆区
       2、person是变量名,也可以认为是对象名,存在于栈区
       3、person存储的是对象在堆区的地址,所以操作person就相当于操作对象本身

注:只要是new出来的对象,哪怕内部属性一致,他们在堆区的地址也不一样!!!

Person person = new Person();
        person.name = "花花";
        person.gender = "男";
        person.age = 18;
        person.height = 180.0;
        
        Person person1 = new Person();
        person1.name = "小小";
        person1.gender = "男";
        person1.age = 18;
        person1.height = 180.0;
        System.out.println(person);
        System.out.println(person1);    
        //类中对象方法的调用方法:对象名.方法
        person.introduce();
        //创建一个学生对象
        Student student = new Student();
        student.setName("三叔");
        System.out.println(student.getName());

四、static关键字

  1、static修饰属性:static修饰属性,则改属性称为类属性。

    那么类属性与对象属性的区别是什么呢?

    1>别名:对象属性、成员变量、非静态变量
               类属性、静态成员变量、静态变量

    2>声明周期:

      对象属性随着对象的创建而生成,对象销毁则销毁
           类属性随着类的加载而生成,jvm虚拟机终止或者程序退出
           类销毁时随之销毁。

    3>存储位置:

      对象属性属于对象所在堆区,而类属性属于类所在属于数据共享区

    4>访问方式:

      对象属性只能由对象去访问,而类属性既可以由类直接访问,
           也可以由对象访问,但是建议采用类访问。

static int count;
    private String brand;
    public void setBrand(String brand){
        this.brand = brand;
    }    
    public String getBrand() {
        return brand;
    }

  2、static修饰方法:

    1>调用时可以使用类名,也可以使用对象,但是推荐使用
             类名!而对象方法,只能由对象调用!

    2>类方法中只能直接访问类属性(static),不能直接访问
           对象属性,而对象方法中,都可以直接访问!想要在类方法中,访问对象
           属性,必须先创建对象,由对象访问

    3>静态方法中,只能直接调用静态方法,想要调用非静态方法,
           先创建对象,再由对象调用非静态方法。而非静态方法中
           既可以直接调用静态方法,也可以直接调用非静态方法!

public static void staticMethod() {
        System.out.println("我是一个静态方法,也叫类方法");
//        System.out.println(count);
//        System.out.println(brand);
    }
    public void nonStaticMethod() {
        System.out.println("我是一个非静态方法,也叫对象方法");
        System.out.println(count);
        System.out.println(brand);
    }

五、构造方法用来创建对象

  构造方法的名称与类名一致,且没有返回值,不是代表要写void,而是直接省略返回值的部分!!!

    1、一个类内部如果没有手动书写构造方法,那么系统
         默认会为此类提供一个无参数的构造方法
         2、当手动书写了有参构造方法,那么无参的就不会默认
         提供了,就需要我们手动将无参构造方法声明出来!!!

public Car() {
        
    }
    public Car(String brand) {
//        this.brand = brand;
        setBrand(brand);
    }

六、局部变量与成员变量(属性)的区别?

     1、从定义位置区分:
     属性定义在类的内部,而局部变量定义在方法内部
     2、从作用范围区分:
     属性作用于整个类,而局部变量作用于声明此变量的方法内部
     3、从初值区分:
     属性默认有初值,引用类型为null,整数为0,浮点数为0.0
     而局部变量没有默认值,使用时必须保证有初值
     4、从生命周期区分:
     属性随着对象的创建而生成,随着对象的回收而销毁
     而局部变量随着方法的调用而生成,随着方法结束而销毁
     5、当一个方法中的局部变量与属性重名时,局部变量的优先级更高
     6、不同的方法中可以保存在同名的局部变量

public class Student {
    /*
         属性的访问修饰符有四种:
         public公开的,protected受保护的,缺省,private私有
         为了满足javaBean的设计规范采用private
         将类的内部实现细节进行隐藏,不允许外界直接访问
         达到了封装的目的
     */
    /*
         this 关键字只能出现在对象方法中
         this 代表的是调用当前方法的对象!!!
     */
    private String name;
    private int age;
    /*属性私有,但是还是需要进行赋值、取值
         赋值我们称之为setter方法,完成对私有属性的赋值
         取值我们称之为getter方法,完成对私有属性的取值
    */
    /*
         setter方法赋值,为私有属性赋值是
         有参无返的方法
         并且方法要对外使用,所有访问修饰符为public
         赋值不需要返回值,所以返回值为void
         方法名:set + 属性名首字母变大写
         参数类型要与属性类型一致,并且参数名与属性名一致
     */
    public void setName(String name) {
        this.name = name;
    }
    /*
         getter方法取值
         无参有返的方法
         并且方法要对外使用,所有访问修饰符为public
         取值需要得到属性的值,所以返回值为获取的私有属性的类型
         方法名:get + 属性名首字母变大写
     */
    public String getName() {
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    } 
    public int getAge() {
        return age;
    }

 

posted @ 2019-04-01 20:08  滑稽大王  阅读(141)  评论(0编辑  收藏  举报