Java 类与对象全解析

如何创建对象和如何书写一个类?

代码举例:

public class Demo01 {
    public static void main(String[] args) {
        //实例化一个对象 名字为 animal
        Animal animal = new Animal();       
        //如何访问成员变量?  对象.变量  对象创建在堆内存有初始值 
        //如果成员变量在 = 前面叫赋值 如果在等号后面叫获取
        animal.name = "来福";
        //获取成员变量
        System.out.println(animal.name);        
        //调用方法
        animal.sayHi();
        animal.sleep();
        animal.eat();       
    }
}
//  创建一个动物类
    class Animal{
        //成员变量的作用域 整个类中都能访问到
        String name = "旺财"; //动物的姓名
        int age = 2;        //动物的年龄
        String gender = "公";        //性别        
        //成员方法 
        public void sayHi() {
            System.out.println("名字:" + name);
            System.out.println(age +"岁");
            System.out.println("性别:" + gender);
        }
        //睡觉
        public void sleep() {
            String name = "小强";      //局部变量
            System.out.println(name + "在睡觉");
        }
        //吃饭
        public void eat() {
            System.out.println(name + "在吃饭");
        }
    } 

上面我们具体代码举例了写一个类和如何示例一个类.在代码中有引入了 成员变量和局部变量概念 它们具体有什么区别呢?

  1. 书写位置
    成员变量:在类中方法外
    局部变量:在类中方法内或方法声明上

  2. 内存位置
    成员变量:在堆内存中
    局部变量:在栈内存中

  3. .初值
    成员变量:有默认值(堆赋予的)
    局部变量:无默认值 如果要使用 必须要给初值

  4. 生命周期
    成员变量: 随着对象的创建而创建 随着对象的销毁而销毁
    局部变量: 随着方法存在

有些时候一些方法需要传参,那就创建这个参数传进去 当参数为引用数据类型(类) 需要创建这个对象 然后将它传进去(传入的为内存地址!)

代码举例:

public class Demo03 {

    public static void main(String[] args) {
        //匿名对象 new Person()
        //只调用方法 这时可以使用匿名对象(测试的时候会用)
        //可以当做参数进行传递
        //好处:当参数的时候 代码简单    坏处:无法直接修改里面的值   
        new Person().name ="james";
        new Person().sayHi();           
        Person p1 = fun("Tom", new Person());
        p1.sayHi();
    }
    //封装一个更改name的方法
    public static Person fun(String name) {
        Person person = new Person();
        person.name = name;
        person.sayHi();  
         return person;

     }
    //函数的重载  功能同上    Person person 实际上和  Person person = new Person() 相同的
    public static Person fun(String name, Person person) {
    // = 后面的为传入参数name 右边的为Person类中的name 和第一个封装方法一样
        person.name = name;
        return person;  
    }
}
//创建一个类
 class Person{
     String name = "peter";
     int age = 16;  
     //方法 
     public void sayHi() {
         System.out.println("姓名:" + name + " " + "年龄:" + age);       
     }   
 } 

从上面我们可以看出 类中的属性 好像只要实例化谁都可以拿来取值赋值 能不能避免这样呢?
当然可以,只需要在属性前面加一个关键字就可以了 —private 私有的
我们来看看代码中是如何实现的

public class Dmoe04 {
    public static void main(String[] args) {
        Student student = new Student();
        //使用 set/get 方法
        student.setName("jamea"); 
        student.setAge(18); 
        System.out.println(student.getName());
        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;    
            //这里 = 右边的name 是传入的参数 左边的相当于 student.name
            //this 用来区分两个name
    }


    public int getAge() {
        return age;
    }


    public void setAge(int age) {
        this.age = age;
    }
        // 就近原则(这里会打印局部变量) 
        public void sayHi() {
            String name = "猜猜我是谁?";
            System.out.println(name + " " + age);

        }
    } 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值