Java中的类和对象(基础详解)

Java中的类和对象

Java中的类

    Java中的类

    如何写一个类?
    使用class修饰
    注意:一个文件中只允许有一个public修饰的类

    类 里面 都有什么?
    对类的描述(属性 和 行为)
    属性: 一般都是用 名词 来修饰
    行为: 一般都是用 动词来修饰

    类中的写:
    成员变量(实例变量) 写在 类中 方法外
    成员方法(实例方法) 写在 类中

    类的写法:
    class 类名 {

    }
    注意: 类名遵循大驼峰写法

    例如:

    //创建一个动物类 有姓名 年龄 性别 品种 会介绍自己

    class Animal {
        String name = "十八";//名字
        int age = 2;         //年龄
        String gender = "公";//性别
        String kind = "金毛";//品种

        public void sayHi(){
            System.out.println("姓名: " + name);
            System.out.println("年龄: " + age);
            System.out.println("性别: " + sex);
            System.out.println("品种: " + kind);
        }
        public void sleep() {
        System.out.println(name + "睡觉");
    }

        public void eat() {
        System.out.println(name + "吃饭");
        }
    }

注意

    一个包中 类的名字不能相同

Java中的对象

    如何创建对象?
    类名 对象名 = new 类名();

    例如:(这里的类,还是上面的那个类)

    public static void main(String[] args){
        //创建一个对象
        Animal dog = new Animal();
        //访问成员变量: 对象.成员变量

        //如果成员变量在等号前面 叫赋值
        //如果dog.name 在 等号 后面 叫做获取

        //赋值
        dog.name = "八公";

        //获取
        String stringName = dog.name;
        System.out.println(stringName);//打印获取的值

        //因为 dog.name = "八公"; 这一行代码已经把"八公"赋值给了dog.name
        //所以 下面获取的时候 就是获取 "八公"
        //打印的也是"八公"

        // 调用成员方法
        dog.sayHi();
        dog.eat();
        dog.sleep();
    }

    class Animal {
        String name = "十八";//名字
        int age = 2;         //年龄
        String gender = "公";//性别
        String kind = "金毛";//品种

        public void sayHi(){
            System.out.println("姓名: " + name);
            System.out.println("年龄: " + age);
            System.out.println("性别: " + sex);
            System.out.println("品种: " + kind);
        }
        public void sleep() {
        System.out.println(name + "睡觉");
    }

        public void eat() {
        System.out.println(name + "吃饭");
        }
    }

对象在内存中的表现

成员变量和局部变量

    成员变量和局部变量的区别:

    1. 书写位置
        成员变量:类中 方法外
        局部变量:方法中 或 方法声明上
    2. 内存中的位置
        成员变量:存在于堆内存
        局部变量:加载到栈内存
    3. 初值
        成员变量:有默认初始值(堆给的)
        局部变量:没有默认值 如果要使用的话 必须要给初值
    4. 生命周期
        成员变量:随着对象的创建而创建 随着对象的销毁而销毁
        局部变量:随着方法存在

        例子: 
        // 创建一个红色法拉利 5个轮子
        public static main(String[] args){
            Car car = new car();
            Car.brand = "法拉利";
            Car.tiresNum = 5;

            //介绍自己的方法
            car.introduce();
        }

        class Car{
            String color;//颜色
            String brand;//牌子
            int tiresNum;

            public void hitMan(){
                System.out.println("会撞人")
            }

            public void move(){
                System.out.println("会动")
            }

            public void introduce(){
                System.out.println("我的颜色是: " + color);
            }
                System.out.println("我的牌子是: " + brand);
                System.out.println("我有" + tiresNum + "个轮胎")
        }
    //方法 需要什么参数 就创建什么参数
    //当参数为 引用数据类型时
    //你需要创建出这个对象 然后将地址传进去
    public static void main(String[] args) {
        Person p = new Person();
        Person person1 = fun("吴彦祖", p);
        person1.introduce();
    }

    class Person{
    String name = "吴彦祖";
    int age = 28;

    public void introduce() {
        System.out.println("我叫: " + name);
        System.out.println("我今年" + age + "岁");
    }

}

    //匿名对象:没有名字的对象
    1. 如果你知调用方法的话 这时可以使用匿名对象(测试的时候会用)
    2. 匿名对象可以当做参数进行传递

    好处: 当参数时 代码简便
    弊端: 无法直接修改里面的值
    public static void main(String[] args) {
        new Person().introduce();
        new Person().name = "苏";
        new Person().introduce();
        Person p1 = fun("吴彦祖", new Person());
    }
    public static Person fun(String name) {
        Person person = new Person();
        person.name = name;
        person.introduce();     
        return person;
    }
    public static Person fun(String name, Person person) {
        person.name = name;
        return person;
    }

}

class Person{
    String name = "吴彦祖";
    int age = 28;

    public void introduce() {
        System.out.println("我叫: " + name);
        System.out.println("我今年" + age + "岁");
    }
}

面向对象

    面向对象的特征
    1.封装
    2.继承
    3.多态

封装

    封装:将类中的属性或方法对外界隐藏 然后提供公共的访问方式

    例如:
    public static void main(String[] args) {
        Student student = new Student();
    }

    class Student{
    // 成员变量私有化(只能本类进行访问 本类以外无法访问)
    // 不能通过对象点属性来直接访问 但是 可以通过方法来间接访问

    //private 私有(权限修饰符)
    private String name;
    private int age;


    //间接方法来访问:

    public static void main(String[] args) {
        Student student = new Student();
        //使用 set/get 方法
        student.setName("苏茜孟");
        student.setAge(21);
        System.out.println(student.getName() + "  " + student.getAge());
        student.sayHi();


    }

}
class Student{

    private String name;
    private int age;

    //  get/set 方法
    //  命名规范 以set或者get开头 小驼峰 
    //  获取
    public String getName() {
        return name;
    }

    //修改
    public void setName(String name) {
        //当传入参数的名字 和类中的名字一样时
        // 提供关键字 this 代表本类的对象
        // 哪个对象调用这个方法 这个对象就是this
        this.name = name;
    }

    //获取
    public int getAge() {
        return age;
    }

    //修改
    public void setAge(int a) {
        age = a;
    }

    // 就近原则(这里会打印局部变量)
    public void sayHi() {
        String name = "?";//像这里 就是会打印出"?" 因为这里定义的 name 和类中定义的 name 名字一样 而且这里进 所以打印 这里定义的 name
        System.out.println(name + "  " + age);
    }

                                                                  Day.8 
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值