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();
    }
}

原文地址:https://www.cnblogs.com/0328dongbin/p/9073001.html

时间: 2024-10-07 20:36:44

Java学习(匿名对象、内部类、包、import、代码块)的相关文章

匿名对象,内部类,包的声明与访问,访问修饰符,代码块,java的API equals toString方法整理

匿名对象  匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. public class Person{ public void eat(){ System.out.println(); } }创建一个普通对象person p=new person();创建一个匿名对象new person(); 匿名对象的特点: 1创建匿名对象直接使用,没有变量名. new Person().eat() //eat方法被一个没有名字的Person对象调用了. 2,匿名对象在没有指定其

匿名对象+内部类+包

匿名对象 匿名对象的概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 匿名对象的特点 1.创建匿名对象直接使用,没有变量名. 2. 匿名对象在没有指定其引用变量时,只能使用一次. 3.匿名对象可以作为方法接收的参数.方法返回值使用 内部类 内部类概念  什么是内部类: 将类写在其他类的内部,可以写在其他类的成员位置(类里面)和局部位置(方法里面),这时写在其他类内部的类就称为内部类.其他类也称为外部类. 什么时候使用内部类: 在描述事物时,若一个事物内部还包含

匿名对象 内部类 包的声明与访问 访问修饰符

匿名对象       没有变量名,只能使用一次对象,可以作为方法接收的参数.方法返回值使用 内部类 分为成员内部类与局部内部类 匿名内部类     匿名内部类是创建某个类型子类对象的快捷方式 使用匿名对象的方式,将定义子类与创建子类对象两个步骤由一个格式一次完成,.虽然是两个步骤,但是两个步骤是连在一起完成的 package com.orcle.demo03; //外部类 public class Out { //外部类方法 public void outt(){ System.out.prin

java学习中,DVD管理系统纯代码(java 学习中的小记录)

java学习中,DVD管理系统纯代码(java 学习中的小记录)作者:王可利(Star·星星) class DvdMain{ public static void main (String[] args){ DvdMgr dvd = new DvdMgr(); //初始化dvd dvd.initial(); //开始进入切换菜单 dvd.startMenu(); } } 1 class DvdSet { 2 3 //定义三个属性 4 String[] name = new String[50];

[Java学习笔记]对象克隆

对象克隆: 浅克隆: 被克隆的对象中的值类型数据被复制一份新值,但是引用的对象只被复制其引用传递给新克隆出来的对象 深克隆: 被克隆的对象中的值类型数据被复制一份新值,并且其中引用的对象会重新创建新的对象,把新对象的引用传递给新克隆出来的对象 Java中实现克隆: Java中Object中定义了clone方法,默认为浅克隆操作,即你只是简单super.clone得到的结果是浅克隆的结果,如果需要深克隆,则需要实现Cloneable接口,并且重写clone方法 查看Java源代码发现Object中

Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)

最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展,并重新打包文件,替换原有的 jar 文件,满足测试开发自身的需求. 下面以修改 eclipse 默认注释中的 ${date} 和 ${time} 对应的返回样式(如下图所示),进行实例说明. 整个二次开发的过程如下所示: 0.未修改之前,生成注释的日期.时间显示格式如下所示: 1.获取对应的 jar

Java中this和static关键字及代码块

this: 可以使用this表示类中的属性------this.name=name 可以使用this强调调用的是本类的方法 可以使用this调用本类的构造方法------this();调用本类中无参构造方法 可以使用this表示当前对象(调用方法的对象)----最重要的用途 static: 声明属性---------属性则为全局变量 声明方法---------Person.setName("Tom");使用类名称调用static方法 普通代码块:直接在方法或是语句中定义的代码块 pub

Java之内部类、包及代码块

个人通俗理解: 1.内部类:有点类似于写在父类中的子类,根据位置不一样为不同的名字,和相应的访问方式不同:不过要访问外部类的话,需要充分运用好this(本类)的这个关键字:要是需要快速的创建子类对象的话,可以用到匿名内部类. 2.包:其实就是个放类的文件夹,当需要用的别的包里的类的时候,则需要导包.不过存在四种不同的修饰符,则对应四种访问权限(default只是理论上的,实际上是不需要写的,直接默认了) 3.代码块:按优先级的话,静态代码块的肯定在第一次使用的时候就执行这唯一的一次了,一般都是用

Java学习笔记之 内部类

1. 什么是Java中的内部类 内部类(Inner Class)就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. 它的主要作用: a. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类. b. 内部类的方法可以直接访问外部类的所有数据,包括私有数据. c. 内部类所实现的功能使用外部类同样可以实现.只是有时使用内部类更加方便. d. 内部类可分为:成员内部类,静态内部类,方法内部类,匿名内部类 四种. 简单实例: //外部类HelloWo

对于匿名对象,内部类这块的理解

一,匿名对象 1.什么是匿名对象以及匿名对象的使用环境 平常我们所实例化的对象可以重复使用,但是匿名对象,因为没有变量名所以只能使用一次,总的来说,匿名对象真实存在,但我们却无法明确的指出他来,所以他只能在创建之初使用一次. 使用环境:当我们想要通过一个对象仅仅调用一次某个方法时我们就可以使用匿名对象,局限性较大,用的不好就会造成代码量比不用还多的情况 2.格式(通过代码来看看使用正常对象和匿名对象之间的不同之处) package it.cast.demo10; public class Rai