note_doit_day10

1.代码块:
    1.局部代码块:用来限制变量的作用域范围
    2.构造代码块(成员代码块)
        当创建对象时 成员代码块会执行 创建一次 执行一次 优先于构造方法
    3.静态代码块
        当类加载时 静态代码块会执行 类只加载一次 所以静态代码块只执行一次
        创建类的对象时
        访问静态的成员变量
        访问静态的方法
        创建子类对象
    
    tips:静态代码块>构造代码块>构造方法
    EXP:
        static {
        System.out.println("静态代码块");
        }

        //成员代码块 构造代码块
        {
            System.out.println("成员代码块");
        }


        public Person(){
            System.out.println("构造方法");
        }


        public static void method(){
            System.out.println("静态成员方法");
        }

2.权限:
     public     公共权限:可以修饰,类,方法,成员变量,任意包下都可以访问
     default     默认什么都不写,包权限,可以修饰,类,方法,成员变量,只能在当前包下访问
     protected     受保护的权限,可以修饰,方法,成员变量,当前包和其他包下的子类可以访问
     private     私有的权限,可以修饰,方法,成员变量,本类中可以访问

     abstract     抽象的,可以修饰,类,方法
     final      最终的修饰符,可以修饰,类,方法,变量
     static     静态修饰符,可以修饰,方法,成员变量

    tips:
    1.private只能在本类中访问,子类看不到,不能重写,而abstract要求子类必须重写
    2.final修饰的类,子类不能继承,而abstract修饰的类,要求子类必须继承
    3.static 和abstract都可以修饰方法,但是static修饰的方法,类名可以直接访问,而abstract修饰的方法没有方法体
    在同包下的无关类中 private不能访问
    同包下的子类  private不能访问
    EXP:(4个权限可以互相访问)
        public class Person {

        public void method1(){
            System.out.println("public");
        }

         void method2(){
            System.out.println("默认权限 default");
        }

        protected void method3(){
            System.out.println("protected");
        }

        private void method4(){
            System.out.println("private");
        }


        public void funtion(){
            method1();
            method2();
            method3();
            method4();
        }
    }
    
3.匿名内部类:
    定义:属于局部内部类的一种
    作用:临时创建一个类的子类对象的快捷方式

    格式:
        new 父类/接口(){
            重写方法
        };
    
        1.定义了这个类子类
        2.同时创建了这个子类的对象
    需要Fly接口的实现类对象
        1.定义实现类实现Fly接口
        2.重写抽象方法
        3.创建实现类对象 调用方法
    EXP:
        public class Bird implements Fly {
        @Override
        public void open() {
            System.out.println("张开小翅膀 我要上天了");
        }

        @Override
        public void fly() {
            System.out.println("我已经上天了");
        }

        @Override
        public void close() {
            System.out.println("掉下来了");
        }
    }
    
        public interface Fly {
        public abstract  void  open();
        public abstract  void fly();
        public abstract  void close();
    }
    Test:
        public class Test {
        public static void main(String[] args) {

            Fly f = new Bird();
            f.open();
            f.fly();
            f.close();

            new Bird().fly();

            System.out.println("--------------------------");

            Fly fj = new Fly(){

                @Override
                public void open() {
                    System.out.println("open");
                }

                @Override
                public void fly() {
                    System.out.println("fly");
                }

                @Override
                public void close() {
                    System.out.println("close");
                }
            };
            fj.open();
            fj.fly();
            fj.close();
            new Fly(){

                @Override
                public void open() {
                    System.out.println("open");
                }

                @Override
                public void fly() {
                    System.out.println("fly");
                }

                @Override
                public void close() {
                    System.out.println("close");
                }
            }.fly();
        }
        public static void method(Fly f){

        }
    }
    引用类型作为方法的参数和返回值:
        public class Test {
        public static void main(String[] args) {

            Person p = new Person();
            //传入当前类对象
            method(p);
            method(new Person());

            //传入当前类的子类对象 因为多态
            Student s = new Student();
            method(s);
            Person p2 = new Student();
            method(p2);
            method(new Student());
            Person p3 =  method2();//null   new Person();  new Student();
        }

        //具体类作为方法的参数,可以传入当前类的对象,也可以传入当前类的子类对象
        public static void method(Person p ){
        }
        //具体类作为方法的返回值类型
        public static Person method2(){
            //可以返回Person对象
            //return new Person();
            //可以返回Person的子类对象
            return new Student();
            //可以返回null
            //return null;

        }
    }

4.经理员工案例:
    公司类:
        public class GongSi {
        private double zongZiChan;
        private ArrayList<YuanGong> list;

        public GongSi() {
        }

        public GongSi(double zongZiChan,ArrayList<YuanGong> list){
            this.zongZiChan = zongZiChan;
            this.list = list;
        }

        //定义一个方法 可以查看公司信息
        public void show(){
            System.out.println("总资产"+zongZiChan);

            for(int i = 0 ;i<list.size();i++){
                YuanGong yg =  list.get(i);
                System.out.println("姓名:"+yg.getName());
                System.out.println("工号:"+yg.getId());
                System.out.println("存款:"+yg.getCunKuan());
                System.out.println("工资:"+yg.getGongZi());
                //如果员工要是经理 需要打印奖金
                if(yg instanceof  JingLi){

                    //向下转型
                    JingLi jl = (JingLi)yg;
                    System.out.println("奖金:"+jl.getJiangJin());
                }

                System.out.println("------------------------------");
            }
        }
        public void  faGongZi(){
            //遍历集合 依次获取到每个员工
            for(int i = 0 ;i<list.size();i++){
                YuanGong yg= list.get(i);
                // 公司的总资产减少
                //减去每个员工的工资
                zongZiChan -= yg.getGongZi();

               // 员工的存款增加
                //原来的存款+ 工资
                yg.setCunKuan( yg.getCunKuan() + yg.getGongZi());


                // 如果这个员工是经理还要减去奖金
                if(yg instanceof  JingLi){
                    JingLi jl = (JingLi)yg;
                    zongZiChan -= jl.getJiangJin();

                    // 如果员工是经理 还要加上奖金
                    //原来的存储+奖金
                    jl.setCunKuan(jl.getCunKuan() + jl.getJiangJin());
                }
            }
        }
        //定义一个给员工调整薪资的方法
        public void  updateGongZi(YuanGong yg,double money)
        {
            //设置员工的工资为 原来的工资 + 调整的薪资
            yg.setGongZi(yg.getGongZi() + money);
        }


        //定义一个抽取幸运员工的方法
        public YuanGong getLucky(){
            //在集合的索引范围内生成一个随机索引
            Random r = new Random();
            int index = r.nextInt(list.size());

            return list.get(index);
        }
        //接口作为方法的参数 只能传入其实现类对象
        public void  party(Service s){
            System.out.println("开会");
            s.service();
        }

        public void setList(ArrayList<YuanGong> list){
            this.list = list;
        }
        public ArrayList<YuanGong> getList(){
            return list;
        }

        public double getZongZiChan() {
            return zongZiChan;
        }

        public void setZongZiChan(double zongZiChan) {
            this.zongZiChan = zongZiChan;
        }
    }
    员工类:
        public class YuanGong {
        private String name;
        private String id;
        private double cunKuan;
        private double gongZi;

        public YuanGong() {
        }

        public YuanGong(String name, String id, double cunKuan, double gongZi) {
            this.name = name;
            this.id = id;
            this.cunKuan = cunKuan;
            this.gongZi = gongZi;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public double getCunKuan() {
            return cunKuan;
        }

        public void setCunKuan(double cunKuan) {
            this.cunKuan = cunKuan;
        }

        public double getGongZi() {
            return gongZi;
        }

        public void setGongZi(double gongZi) {
            this.gongZi = gongZi;
        }
    }
    经理类(继承员工):
        public class JingLi extends YuanGong {

        private double jiangJin;

        public JingLi(){

        }

        public JingLi(String name, String id, double cunKuan, double gongZi,double jiangJin){
            super(name,id,cunKuan,gongZi);
            this.jiangJin = jiangJin;
        }

        public double getJiangJin() {
            return jiangJin;
        }

        public void setJiangJin(double jiangJin) {
            this.jiangJin = jiangJin;
        }
    }

5.Object类:
    java.lang.Object 所有类的超类 每个类都直接或者间接继承自Object
    方法
    String  toString()  将对象转换为字符串    对象的数据类型 + @ + 地址值(哈希值)
        在Object类中 或者 子类不重写 打印的是地址值
        而一般情况 子类都会对这个方法进行重写 返回 属性内容
    EXP:
        public class Demo01_Object {
        public static void main(String[] args) {
            Object obj = new Object();
            String s = obj.toString();
            System.out.println(s);
            System.out.println(obj);


            Person p = new Person("柳岩",38);
            //当打印对象名时 会默认调用其toString方法
            System.out.println(p);
            System.out.println(p.toString());

            //由于字符串 重写了toString方法 所以 打印字符串的变量名时 打印的是字符串的内容
            
            String str = "abc";
            System.out.println(str);
            System.out.println(str.toString());

            /*
                 ArrayList重写了toString方法  打印的是内容 并不是地址值
             */
            ArrayList<Integer> list=new ArrayList<>();

            list.add(10);
            list.add(20);

            System.out.println(list);
            System.out.println(list.toString());
        }
    }

6.API的使用:
    应用程序接口.(JDK API 1.6版本的API有官方中文版)
    1.索引:直接搜索关键词
        实现了哪些接口,继承了哪个类,从哪个版本开始...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值