java08 面向对象

一.设计对象并使用

1.类和对象

        类:是对象共同特征的描述,抽象的     对象:是真实存在的具体的东西,具体的    比如:学生和小明     在Java中必须先设计类,才能获得对象

        定义类:public class 类名 {1.成员变量(属性)2.成员方法(行为)3.构造器 4.代码块 5.内部类}

        对象:类名 对象名 = new 类名();   访问对象的属性:对象名.成员变量  访问行为:对象名.方法名()

    public class phone{
       //属性
        String brand;
        double price;
        //方法
        public void call(){
            System.out.println("打电话");
        }
        public void playgame(){
            System.out.println("玩游戏");
        }
    }
public class phonetest {
    public static void main(String[] args){
        //创建手机对象
        phone p = new phone();
        //给手机赋值
        p.brand = "小米";
        p.price = 3999.95;
        //获取手机对象的值
        System.out.println(p.brand);
        System.out.println(p.price);
        //调用手机中的方法
        p.call();
        p.playgame();
    }
}

        注意事项:a.类的首字母建议大写,类名需要见名知意,驼峰模式;

                          b.一个Java文件中可以定义多个class类,且只能有一个类是public修饰的,而且public修饰的类名必须是代码文件,实际开发中还是一个文件定义一个类

                          c.成员变量的完整定义格式:修饰符 数据类型 变量名称 = 初始化值,一般无需指定初始化值,存在默认值(基本数据类型默认值是0/0.0/false,引用数据类型的默认值是null)

二.封装——对象代表什么,就得封装对应的数据,并且提供数据对应的行为

封装告诉我们拿到一个需求之后,如何正确设计对象的属性和方法

1.private 权限修饰符——保证数据的安全性

        a.可以修饰类的成员变量和成员方法,被private修饰的成员只能在本类中才能被访问;

        b.用private实现对非法数据的过滤:针对每一个私有化的变量成员,都为其提供一个get和set的方法,set方法给成员变量赋值(不需要返回值,需要形参),get方法对外提供成员变量的值(需要返回值,返回值类型与成员类型一致,不需要形参)

    public class phone{
       private String brand;
       private double price;

        public void setBrand(String b){
           brand=b;
       }//给外界的对象进行赋值的,所以需要形参,不需要返回值
        public  String getBrand(){
           return brand;
        }//对外提供brand属性的

        public void setPrice(double p){
           if (p >=1000 && p<=3000){
               price = p;
           }else{
               System.out.println("非法参数");
           }
        }
        //只有满足在1000-3000的范围内,才会被赋值
        public double getPrice(){
            return price;
        }
        public void call(){
            System.out.println("打电话");
        }
        public void playgame(){
            System.out.println("玩游戏");
        }
    }
public class phonetest {
    public static void main(String[] args){
        //创建手机对象
        phone p = new phone();

        //给手机赋值
//        p.brand = "小米";
//        p.price = 3999.95;
        p.setBrand("红米");
        p.setPrice(3000000);  //输出 非法参数

        //获取手机对象的值
      System.out.println(p.getBrand());//输出 红米
      System.out.println(p.getPrice());//输出 0.0

        System.out.println("__________________");
        //调用手机中的方法
        p.call();
        p.playgame();
    }
}

三.this关键字——作用是区分成员变量和局部变量

1.成员变量和局部变量(方法里面的变量)

        当成员变量和局部变量同名的时候,采用就近原则;在方法中,如果想用成员变量就用this.变量名;

    public class phone{
       private String brand;
       private double price;

        public void setBrand(String brand){
            //等号的右边 局部原则 表示的是测试类中调用方法传递过来的数据 "红米"
            //等号的左边 表示成员位置的name
           this.brand=brand;
       }
        public  String getBrand(){
           return brand;
        }
        public void setPrice(double price){
           if (price >=1000 && price<=3000){
               this.price = price;
           }else{
               System.out.println("非法参数");
           }
        }
        public double getPrice(){
            return price;
        }
    }

四.构造方法

构造方法也叫构造器,构造函数,作用是在创建对象的时候给成员变量进行赋值的,初始化

1.构造方法的格式

        修饰符 类名(参数){方法体}

2.注意事项

        a.方法名与类名相同,大小写也要一致

        b.没有返回值类型,连void也没有

        c.没有具体的返回值(不能由return带回结果数据)

        d.创建对象的时候由虚拟机调用,不能手动调用构造方法;每创建一次对象,就会调用一次构造方法

3.无参构造和带参构造

如果在类中没有定义构造方法,系统将给出一个默认的无参构造方法;如果定义了构造方法,系统将不再提供默认的构造方法,在实际开发中,最好写上无参构造和带全部参数的构造方法

        a.无参构造:初始化对象的时候,成员变量的数据均采用默认值; 给成员赋值的话,就用set方法

        b.带参构造:初始化对象的时候,同时可以为对象进行赋值

    public class phone{
       private String brand;
       private double price;
       //空参构造
       public phone(){
           System.out.println("执行");
       }
       //带参数的构造
       public phone(String brand,double price){
           this.brand = brand;
           this.price = price;
       }
        public void setBrand(String brand){
           this.brand=brand;
       }
        public  String getBrand(){
           return brand;
        }
        public void setPrice(double price){
           if (price >=1000 && price<=3000){
               this.price = price;
           }else{
               System.out.println("非法参数");
           }
        }
        public double getPrice(){
            return price;
        }
    }
public class phonetest {
    public static void main(String[] args){
    //创建手机对象
        //调用的空参构造
        phone p = new phone();
        //调用空参构造,如果想要赋值的话,就用setBrand,setPrice
        p.setBrand("红米");
        p.setPrice(2400);

        //带参构造
        phone p1 = new phone("小米",2300);

    //获取
        System.out.println(p.getBrand());//输出红米
        System.out.println(p.getPrice());//输出2400
        System.out.println(p1.getBrand());//输出小米
        System.out.println(p1.getPrice());//输出2300

    }
}

五.标准的javaBean类

要求:1.类名需要见名知意   2.成员变量使用private修饰   3.至少提供两个构造方法(无参构造,带全部参数的构造)    4.成员方法(提供每一个成员变量对应的set()/get())

安装插件ptg一键生成

六.对象内存图

1.方法区:字节码文件加载时进入的内存;栈:方法运行时所进入的内存,变量也是在这里; 堆:new出来的东西会在这块内存中开辟空间并且产生新的地址;

2.一个对象的内存图

        student s = new student();

        a.加载class文件到方法区 b.声明局部变量 c.在堆内存中开辟一个空间 4.默认初始化 5.显示初始化 6.构造方法初始化

3.两个引用指向同一个对象     

        

4.this的内存原理

this的本质:代表方法调用者的地址值

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值