• Java学习(匿名对象、内部类、包、import、代码块)


    一、匿名对象

    概念:匿名对象是指在创建对象时,只有创建的语句却没有把对象地址值赋给某个变量

    特点:

    (1)匿名对象直接使用,没有变量名。当做形参使用。

    new Person().name="张三";

    (2)匿名对象只能调用一次方法,再次调用相当于又创建了一个新的匿名对象

    new Person().setName("小明");
    System.out.println(new Person().getName());  //输出为空,因为又创建了一个新的匿名对象,跟上一个并没有关系

    (3)作为返回值使用传递

    public Person getPerson(){
            //Person p=new Person();    //这一步骤省略直接用匿名对象来做返回值
            //return p;
            return new Person();
        }

    实例:

    package com.oracel.demo03;
    //匿名对象 自定义类
    public class Person {
        private String name;
        private int 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;
        }
        public boolean compare(Person p){
            return this.age==p.age;
        }
        //匿名对象作为返回值来传递
        public Person getPerson(){
            //Person p=new Person();
            //return p;
            return new Person();
        }
    }
    package com.oracel.demo03;
    //测试类
    public class Test {
        public static void main(String[] args){
            //有名对象
    //        Person p=new Person();
    //        p.setName("张三");
    //        p.getName();
    //        //匿名对象(只能调用一次方法)     new:创建   Person():对象  合起来就是创建对象
    //        new Person().setName("阿莱");
    //        System.out.println(new Person().getName());
    //        //匿名对象当做形参传递
    //        p.compare(new Person());
            //匿名对象的三个作用:1.调用一次方法2.当做形参传递3.作为返回值来传递
        }
    }

    二、内部类

    概念:类写在其他类的内部,可以写在其他类的成员位置局部位置,称为内部类,而“其他类”则称为外部类

    什么时候会使用

    在描述一个事物时,若事物内部还包含有其他可能包含的事物,比如在描述汽车时,汽车内部还包含着发动机,则发动机就可以用内部类来描述。

    格式:

    class Car{                      //car      就是外部类
          class FaDongJi{        //fadongji    就是内部类
        }       
    }                

    内部类的分类

    内部类还可以分为成员内部类局部内部类。成员内部类就是在成员位置的内部类,而局部内部类则是在局部方法内的内部类。

    定义内部类时,就是一个正常定义类的过程,同样包含各种修饰符 、继承与实现关系等。在内部类中可以直接访问外部类的所有成员

    2.1成员内部类

    定义格式:

     class 外部类名称{
        修饰词 class 内部类名称{
        }
    }

    访问方式:

    外部类名称.内部类名称   变量名称=new 外部类名称().new 内部类名称();
    Car.FaDongJi cf=new Car().new FaDongJi();

    2.2局部内部类

    定义格式:

    class 外部类名称{
        public void method(){     //外部类的局部方法
               class 局部内部类名称{     //局部内部类
        
            }  
        }           
    }        

    访问方式:在外部类方法中创建局部内部类的对象,进行访问

    package com.oracel.demo03;
    
    public class Jeep {
        public void show(){  //外部类的方法
            //局部内部类
            class gulu{
                public void method(){
                    System.out.println("这是轱辘的方法");
                }
            }
            //局部类访问方法:在外部类方法中,创建内部类对象,进行访问
            gulu g=new gulu();    //内部类的对象
            g.method();
        }
    }
    //在main方法中,创建外部类对象,调用局部方法,就可以访问局部内部类了
    public class demo01{
         public static void main(String[] args){
                Jeep j=new Jeep();
                j.gulu();    
    
        }   
    }    

     内部类的实际应用---匿名内部类

    概念:最常用到的内部类就是匿名内部类,它是局部内部类的一种。

    定义的匿名内部类有两种含义:

    (1)临时定义某一指定类型的子类

    (2)定义后即刻创建刚刚定义的这个子类的对象

     作用与格式:

     作用:匿名内部类是创建某个类型子类对象的快捷方式。

    格式:

    new 父类或接口(){
       //进行方法重写   
    };

    练习题:编写一个抽象类Phone,两个抽象方法,call()  sendMessage()
          两个子类OldPhone 和 NewPhone , 其中NewPhone想添加一个玩游戏的功能.
          请根据接口的思想实现,并用匿名内部类的方式调用玩游戏的功能.

    //父类
    package com.oracel.homework;
    
    public abstract class Phone {
         public abstract void call();
         public abstract void sendMessage();
    }
    //旧手机子类
    package com.oracel.homework;
    
    public class OldPhone extends Phone{
        public void call() {
            System.out.println("旧手机打电话");
        }
        public void sendMessage() {
            System.out.println("旧手机发短信");
        }
    
    }
    //接口:玩游戏
    package com.oracel.homework;
    
    public interface PlayGame{
        public abstract void playgames();
    }
    //新手机子类
    package com.oracel.homework;
    
    public class NewPhone extends Phone implements PlayGame{
        public void call() {
            System.out.println("新手机打电话");
        }
        public void sendMessage() {
            System.out.println("新手机发短信");
        }
        public void playgames(){
            
        }
    }
     //测试类
    package
    com.oracel.homework; public class Test { public static void main(String[] args) { new OldPhone().call(); new OldPhone().sendMessage(); new NewPhone().call(); new NewPhone().sendMessage(); //用匿名内部类 重写方法 输出方法 new NewPhone(){ public void playgames(){ System.out.println("新手机玩游戏"); } }.playgames(); } }

     三、包的声明和格式

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

    当类文件很多的时候,通常我们会采用多个包进行存放管理他们,这种方式称为分包管理

    在项目中,我们将相同功能的类放到一个包中,方便管理。并且日常项目的分工也是以包作为边界

    类中声明的包必须与实际class文件所在的文件夹情况相一致即类声明在a包下,则生成的.class文件必须在a文件夹下,否则,程序运行时会找不到类

     声明格式:

     通常使用公司网址反写,可以有多层包,包名采用全部小写字母,多层包之间用”.”连接

    package  包名.包名.包名....;

     如:Oracle.com包名反写为com.oracle

    注意:包的声明,必须在有效代码的第一行!!!!!!!!

     包的访问:

    访问类时,为了能够找到该类,必须使用含有包名的类全名(包名.类名)

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

    前提:包的访问与访问权限密切相关,这里以一般情况来说,即类用public修饰的情况。

    类的简化访问:

    当我们要使用一个类时,这个类与当前程序在同一个包中(即同一个文件夹中),或者这个类是java.lang包中的类时通常可以省略掉包名,直接使用该类。

    Person p=new Person();

      当我们要使用的类,与当前程序不在同一个包中(即不同文件夹中),要访问的类必须用public修饰才可访问

    package com.oracle02;
    public class Person {}

     四、import导包

    概念: 我们每次使用类时,都需要写很长的包名。很麻烦,我们可以通过import导包的方式来简化

        可以通过导包的方式使用该类,可以避免使用全类名编写(即,包类.类名)。

     格式:

      import     包名.类名;

    注意: import导包代码书写的位置:在声明包package后,定义所有类class前,使用导包import包名.包名.类名;

     五、访问修饰符

     Java中提供了四中访问权限修饰符:

    public        protected      default    private

    下图为访问能力:

    总结:

    (1) 要想仅能在本类中访问使用private修饰;

    (2)要想本包中的类都可以访问不加修饰符即可

    (3)要想本包中的类与其他包中的子类可以访问使用protected修饰

    (4)要想所有包中的所有类都可以访问使用public修饰

     注意:如果类用public修饰,则类名必须与文件名相同一个文件中只能有一个public修饰的类

     六、代码块

    1.局部代码块

    定义:局部代码块是定义在方法或语句中

    特点:

    1).以”{}”划定的代码区域,此时只需要关注作用域的不同即可

    2.方法和类都是以代码块的方式划定边界的

    2.构造方法块

    构造代码块是定义在类中成员位置的代码块

    特点:

    1).优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作

     

    2.每创建一个对象均会执行一次构造代码块

    3.静态代码块

    定义:静态代码块是定义在成员位置,使用static修饰的代码块。

    特点:

    1). 优先于主方法执行优先于构造代码块执行,当以任意形式第一次使用到该类时执行。

     

    2.  该类第一次创建对象时执行,该类不管创建多少对象,静态代码块只执行一次。

    (3).可用于给静态变量赋值,用来给类进行初始化

     

    练习题:

    package com.oracel.demo03;
    //匿名对象 自定义类
    public class Person {
        private String name;
        private int 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;
        }
        public boolean compare(Person p){
            return this.age==p.age;
        }
        //匿名对象作为返回值来传递
        public Person getPerson(){
            //Person p=new Person();
            //return p;
            return new Person();
        }
    }
  • 相关阅读:
    自动生成A~Z的按字母查询可以用到(不用一一去写A.B.C……Z)
    GridView导出Excel
    简单的遮罩层弹出框(弹出一个表单,里面包含验证码,验证码正确方可提交)
    根据IP地址返回IP的详细信息(Web Service)
    九方格游戏的代码(此逻辑算法适用于任意方格数)
    for循环的变量设置
    注意TextField文本宽高
    两个重叠显示对象的层级调整(第二种方法时候来补充的
    用数组来存储显示对象
    DisplayObjectContainer的getChildAt()方法
  • 原文地址:https://www.cnblogs.com/0328dongbin/p/9073001.html
Copyright © 2020-2023  润新知