自学java (day11):类和对象

//java中,程序员不能直接操作堆内存,只能通过引用去访问堆内存中的实例变量,访问格式是:::引用.变量名

//要是想要引用自己创建的类,就要在当前的包里创建一个公共的类(public)
public class DiaoYong {
    public static void main(String[] args){

            //通过一个类可以实例化N个对象
            //实例化就想的语法: new 类名();
            //new是java语言中的一个运算符
            //new运算符的作用是创建对象,在JVM堆内存当中开辟新的内存空间    new
            //U是一个引用数据类型
            //s1是一个变量名
            //s1是一个局部变量【在栈内存中存储】,可以叫做引用,作用是赋值,,,引用是变量,它保存了另一个java对象的地址【在堆内存中】
        U s1=new U();

            //读取数据:引用.变量名
            //第一种方式
        int uAge=s1.age;
        String uName=s1.name;//没有修改数据,就默认空(null)
        int uXuehao=s1.xuehao;

        System.out.println("年龄:"+uAge);
        System.out.println("姓名:"+uName);
        System.out.println("学号:"+uXuehao);

            //修改数据:引用.变量名=值
        s1.age=77;//修改数据
        s1.xuehao=1;
       s1.name="卢";
        System.out.println(s1.age);//77
        System.out.println(s1.name);//null
        System.out.println(s1.xuehao);
    }

}
class U {

    //xuehao   age   name   都属于实例变量

    int xuehao;
    int age;
    String name;
}


/**
        局部变量在栈内存中存储
        成员变量的实例变量在堆内存中的java(实例)对象中存储
 */

2、

    //用户类
public class User {

        //下面这些是属性【都是成员变量的实例变量】
        //用户编号
        //no是一个实例变量
        int no;

        //用户名
        //name是一个实例变量
        //String是引用数据类型,,表示字符串
        //name是一个引用,存在于栈内存中
        String name;

        //家庭住址
        //Address是一个引用数据类型,,表示家庭住址
        //addr是一个实例变量  是一个引用
        Address addr;

}

    //家庭住址类
class Address{

    //一下这三个也是属性
                 //城市
            String city;

            //街道
            String street;

            //邮编
            String zipcode;

    }
public class DiaoYongUandAdd {
    public static void main(String[] args){

        //创建User对象
        //u是局部变量
        //u是引用  存储在栈内存中,指向堆内存的User对象  引用是一个变量
        User u=new User();

        //输出User对象内部实例变量的值
        System.out.println("用户编号:"+u.no);//0
        System.out.println("用户名:"+u.name);//null
        System.out.println("家庭住址:"+u.addr);//null

        //修改User对象内部实例变量的值
        u.no=35;
        u.name="卢";

        //子继承父
 //         u.addr=new Address();//等同于下边这两行
        Address a=new Address();
        u.addr=a; // 一行变两行

 //       u.addr.city="衡水";
        a.city="北京";
        u.addr.street="搭设街道";
        u.addr.zipcode="05616";

        //输出User对象内部实例变量的值
        System.out.println("用户编号:"+u.no);//35
        System.out.println("用户名:"+u.name);//卢
        System.out.println("家庭住址:"+u.addr);//家庭住址:ceshi.Address@7cd84586
        System.out.println(u.name+"居住在"+a.city+"这个城市");//卢居住在北京这个城市
  //      System.out.println(u.name+"居住在"+u.addr.city+"这个城市");//卢居住在衡水这个城市
        System.out.println(u.name+"居住在"+u.addr.street+"这个街道");//  卢居住在搭设这个街道
        System.out.println(u.name+"的邮编是"+u.addr.zipcode);//  卢的邮编是05616

    }
}

3、类的关联

        //类的关联


public class DiaoYongHnsandW {
    public static void main(String[] args){

        //创建一个丈夫对象
        Husband huangxiaoming=new Husband();
        huangxiaoming.name="黄晓明";

        //创建一个妻子对象
        Wife baby=new Wife();
        baby.name="杨颖";

        //结婚【通过丈夫可以找到妻子,通过妻子可以找到丈夫】
        huangxiaoming.w=baby;
        baby.h=huangxiaoming;

        //得到以上黄晓明妻子的名字
        System.out.println(huangxiaoming.name+"的妻子是"+huangxiaoming.w.name);

    }
}
//丈夫类
public class Husband {

    //姓名
    String name;

    //丈夫对象应包含妻子引用
    Wife w;
}
class Wife{

    //姓名
    String name;

    //妻子对象应包含丈夫引用
    Husband h;
}
import java.util.concurrent.Callable;

public class DiaoYongCustomer {
    public static void main(String[] args){
        Customer c=new Customer();
        System.out.println(c.id);

        c=null;
        //编译可以通过
        //空引用访问“实例”相关的数据一定会出现空指针异常 java.lang.NullPointerException
        //“实例”相关的数据表示,这个数据的访问必须有对象的参与
        System.out.println(c.id);
    }
}
class Customer {

    int id;
}

面向对象的三大特征:封装

/**
    面向对象的三大特征:
    --封装
    --继承
    --多态

    当前主要讲封装,为什么要封装?封装的好处?
      封装的好处
       1、封装之后,对于那个事物来说,看不到这个事物比较复杂的一面,只能看到事物简单的一面
       复杂性封装,对外提供简单的操作入口。照相机就是一个简单的封装的例子,照相机实现原理比较复杂,使用比较简单。电视机也是

       2、封装之后才会实现真正的“对象”,真正的“独立体”

       3、封装就意味着以后的程序可以重复使用。并且这个事物应该适应力强,在任何场所都能使用

       4、封装之后,对于事物本身,提高了安全性
 */
public class FengZhuang {
    public static void main(String[] args){

        //创建 FengZhuang1对象
        FengZhuang1 user = new FengZhuang1();

        //age 在 DuiXiang.FengZhuang1 中是 private 访问控制
        //age属于私有化属性,在外部程序中不能直接访问
        //System.out.println(user.age);

        //修改setter
        user.setAge(100);

        //读取getter
        user.getAge();
        System.out.println( user.getAge());

    }

}
/**
    封装的步骤:
     1、所有属性私有化,使用 private 关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问

     2、对外提供简单的操作入口,也就是说以后外边的程序想要访问age属性,必须通过简单的入口进行访问
        ----对外提供连个方法get方法和set方法
        ----想读取age属性调用get方法
        ----想修改age属性调用set方法

     3、set方法的命名规范:
            public  void  set+属性名首字母大写(形参){}
                引用这里的例子:::
                    public void setAge(int a){
                        age=a;
                    }

       4、get方法的命名规范:
            public  int getAge(){
                return age;
            }

    回想一下,属性的访问形式?
    ----读取数据   ,  读取【get】
    ----修改数据   ,  修改【set】

    需要记住:
    ---getter和setter方法没有static关键字
    ---有static关键字修饰的方法怎么调用:类名.方法名(实参);
    ---没有static关键字修饰的方法怎么调用:引用.方法名(实参);

 */
public class FengZhuang1 {

    //属性私有化
    private int age;

    //setter(修改)
    public void setAge(int a){

       // age=a;

        //直接在这写代码
        if(a<0||a>150){
            System.out.println("输入的年龄不合法");
            return ;
        }
        age=a;
    }

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

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值