zoukankan      html  css  js  c++  java
  • java的 匿名对象、内部类、包的声明与访问、访问修饰符、代码块

    匿名对象:

    匿名对象创建
    匿名对象调用方法
    package com.oracle.demo01;
    
    public class test {
            public static void main(String[] args) {
                //匿名对象创建
                new  person();
                //匿名对象调用方法
                new person().eat();
                //注意这里的new person()和上面的new person()不是一个,切记        
            }        
    }
    匿名对象可以作为方法接收的参数使用
    匿名对象可以作为方法方法返回值使用
    package com.oracle.demo01;
    
    public class person {
         public  void  eat(){
             System.out.println("吃饭");
         }
         //匿名对象可以作为方法方法返回值使用
         public  person name(){
             /* person  p  =  new person();
              return  p;*/
             return  new person();
         }
        //匿名对象可以作为方法接收的参数使用
         public  void  test(){
             ceshi(new person());
             System.out.println("..");
         }
         public void  ceshi(person p){
             System.out.println("1111");
         }
    }

    内部类:

    成员内部类

    创建成员内部类对象
    成员内部类对象调用方法
    package com.oracle.demo02;
    
    public class test {
    
        public static void main(String[] args) {
            //创建成员内部类对象
            outer.name    na = new  outer().new name();
            //成员内部类对象调用方法
            na.eat();
            na.get();
        }
    }

    具体取值:

    package com.oracle.demo02;
    //外部类
    public class outer {
                int i = 1;
             //成员内部类  处于成员位置
            class   name{
                int i = 2;
                public  void  eat(){        
                    System.out.println("吃饭");
                }
                public void  get(){
                    int   i = 3;
                    System.out.println(i);            //3  取到成员内部类中的局部变量
                    System.out.println(this.i);            //2  取到成员内部类中的成员变量
                    System.out.println(outer.this.i);           //1  取到外部类中的成员变量
                }
            }                  
    }

    局部内部类:

    利用外部类对象访问局部内部类方法
    package com.oracle.demo02;
    
    public class test2 {
            public static void main(String[] args) {
                //创建外部类对象
                  outer2  o = new outer2();
                  //利用外部类对象访问局部内部类方法
                  o.name();
            }
    }
    在外部类的成员方法中创建局部内部类对象
    package com.oracle.demo02;
    //外部类
    public class outer2 {
           public  void    name(){
               //局部内部类  处于局部变量的位置
               class  Inter{
                   public  void eat(){
                       System.out.println("吃饭");
                   }
               }
               //在外部类的成员方法中创建局部内部类对象
               Inter i = new  Inter();
               //局部内部类对象调用方法
               i.eat();
           }
    }

    匿名内部类:

    创建人  类

    package com.oracle.demo05;
    
    public abstract class person {
             private   String  name;
             private   int  age;
             public  abstract  void eat();
            public person() {
                super();
            }
            public person(String name, int age) {
                super();
                this.name = name;
                this.age = age;
            }
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public int getAge() {
                return age;
            }
            public void setAge(int age) {
                this.age = age;
            }
             
    }

    创建匿名内部类;

    匿名内部类调用方法;

    package com.oracle.demo05;
    
    public class test {
    
        public static void main(String[] args) {
              //匿名内部类
            /*new 父类或接口(){
                //进行方法重写
            };*/
               new   person(){
                   public  void eat(){
                       System.out.println("第一个人吃饭");
                   }
               };
               //匿名内部类调用方法
               new   person(){
                   public  void eat(){
                       System.out.println("第二个人吃饭");
                   }
               }.eat();;
        }
    }

    包的声明和访问:

    java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件。

    声明:  通常将公司网址反写

    package 包名.包名.包名…;    //包的声明,必须在有效代码的第一行
    //导包

    访问:必须使用含有包名的类全名(包名.类名)

    //包名.包名….类名
         java.util.Scanner
         java.util.Random
         com.oracle.Demo
    //带有包的类,创建对象格式:包名.类名 变量名 = new包名.类名();
         com.oracle.Demo d = new com.oracle.Demo();

    import导包:

    导包的格式:

    import 包名.类名;

    访问修饰符:

     

    举个例子:

    package com.oracle.demo06;
    
    public class A {
                //public
                public int  a = 1;
                //private 
                private  int  b = 2;
                //default
                int   c = 3;   //注意默认访问修饰符千万别写在前面 
                //protected
                protected  int  d = 4;
                //同一个包中同一个类    都可以访问到
                public  void  ceshi(){
                    System.out.println(a);
                    System.out.println(b);
                    System.out.println(c);
                    System.out.println(d);
                }
    }
    package com.oracle.demo06;
    
    public class B {
        public static void main(String[] args) {
        //同一个包子类与无关类 A aa
    = new A(); System.out.println(aa.a); //System.out.println(aa.b);//private 修饰的b访问不到 System.out.println(aa.c); System.out.println(aa.d); } }
    package com.oracle.demo07;
    
    import com.oracle.demo06.A;
    
    public class C {
        public static void main(String[] args) {
            //不同包无关类
            A   aa  =  new A();
            System.out.println(aa.a);
            //System.out.println(aa.b);//private 修饰的b访问不到
            //System.out.println(aa.c);//default  修饰的c访问不到
            //System.out.println(aa.d);//protected 修饰的d访问不到
        }
    }
    package com.oracle.demo07;
    
    import com.oracle.demo06.A;
    
    public class D extends A{
        public static void main(String[] args) {
            D  dd  = new  D();
            System.out.println(dd.a);
            //System.out.println(dd.b);  private 修饰的b访问不到
            //System.out.println(dd.c);  default  修饰的c访问不到
            System.out.println(dd.d);
        }
    }

     代码块:

    静态代码块和构造代码块:

    举个例子:

    package com.oracle.demo03;
    
    public class person {
                //静态代码块
                static{
                    System.out.println("这是静态代码块");
                }
                public person(){
                    System.out.println("这是构造方法");
                }
                {
                    System.out.println("这是构造代码块");
                }
    } 
    package com.oracle.demo03;
    
    public class test {
         public static void main(String[] args) {
             person  p = new person();
                person  p1 = new person();
        }    
    }

    效果如下:

    静态代码块优先于构造代码块优先于构造方法,

    另外静态代码块只调用一次

     

     

  • 相关阅读:
    BZOJ3156 防御准备
    BZOJ1257 余数之和
    BZOJ1879 Bill的挑战
    BZOJ1811 mea
    phpcms列表页内容如何替换?
    如何解决wamp中数据库读取数据是???的情况?
    如何用phpcms将静态网页生成动态网页?
    简单介绍phpcms以及phpcms如何安装?
    cms基本概念(dedecms,phpcms)
    用php+mysql+ajax实现淘宝客服或阿里旺旺聊天功能 之 后台页面
  • 原文地址:https://www.cnblogs.com/scw123/p/9711508.html
Copyright © 2011-2022 走看看