精华内容
下载资源
问答
  • 1.创建匿名对象直接调用方法,没有变量名。 new Scanner(System.in).nextInt(); 2.一旦调用两次,就会执行两次new,就会创建两个对象。 new Scanner(System.in).nextInt(); new Scanner(System.in).nextInt

    概念:

    创建对象时,只有new 类名();这种创建对象的语句,却没有把对象地址赋值给某个变量。这是一种创建对象的简化写法,应用范围有限。

    格式:

    new 类名(参数列表);

    应用场景:

    1.创建匿名对象直接调用方法,没有变量名。

    new Scanner(System.in).nextInt();

    2.一旦调用两次,就会执行两次new,就会创建两个对象。

    new Scanner(System.in).nextInt();
    new Scanner(System.in).nextInt();

    一个匿名对象,只能使用一次。

    3.匿名对象可以作为方法的参数和返回值

        作为参数:

    class Test {
    
        public static void main(String[] args) {
            // 普通方式
            Scanner sc = new Scanner(System.in);
            input(sc);
    
            //匿名对象作为方法接收的参数
            input(new Scanner(System.in));
        }
    
        public static void input(Scanner sc){
            System.out.println(sc);
        }
    }

        作为返回值:

    class Test2 {
    
        public static void main(String[] args) {
            //普通方式
            Scanner sc = getScanner();
        }
    
        public static Scaanner getScanner(){
            //普通方式
            Scanner sc = new Scanner(System.in);
            return sc;
    
            //匿名对象作为方法返回值
            return new Scanner(System.in);
        }
    }

     

    展开全文
  • 3.匿名对象 1.在java中 所以的方法都要用具体的对象来调用 下面看看代码 这里我创建了一个dog这个类,然后里面有一些成员常量方法。 package face; public class dog { String colour; int age; ...

    1.方法的重载

    2.构造函数

    3.匿名对象


    1.在java中

    所以的方法都要用具体的对象来调用

    下面看看代码

    这里我创建了一个dog这个类,然后里面有一些成员常量和方法。

    package face;
    
    public class dog {
    	String colour;
    	int age;
    	String name;
    	 
    	void shout(){
    		System.out.print(name+" is shorting!");    //      <span style="color:#ff0000;">这里注意,按理说一个类中的两个方法是不可以有相同名字的,但是这里却可以。</span>
    <span style="white-space:pre">								</span>//<span style="color:#ff0000;">是因为我改变了方法的参数,所以两个方法可以用同一个名字。这就是方法的重载。</span><span style="white-space:pre">											</span>
    	}<span style="white-space:pre">												</span>
    	void shout(int a){
    		System.out.print("i hit "+name+a+"times!"+name+"is shouting!");
    		
    	
    	}
    	
    
    }

    那两个相同名字的方法如何调用呢》?

    package face;
    
    public class test {
    	public static void main(String args []) {
    		dog a=new dog();
    		a.name="LALA";
    		a.age=12;
    		a.colour="red";
    		
    		a.shout();
    		a.shout(321);   <span style="color:#ff0000;">在这里我调用了shout方法,通过传入不同的参数来调用</span>
    
    		
    				
    	}
    	
    
    }

    2.

    构造函数

    类一定至少有一个构造函数,用于对象的生成!

    在你创建一个类时,如果你没有手动写一个构造函数,这系统会自动帮你写一个空的构造函数。

    package face;
    
    public class cat {
    	String name;
    	int age;
    	String colour;
    	
    	cat(){
    		
    	}<span style="white-space:pre">			</span>如果你自己不写,系统会自动帮你加一个这样的空的构造函数。
    	
    	cat(String A,int B){
    		name=A;
    		age=B;<span style="white-space:pre">		</span>这里加了一个构造函数,可以在生成对象的时候直接赋值,如果要生成很多对象就可以省下
    	}<span style="white-space:pre">			</span>很多时间,更加方便。
    	
    下面看看如何调用这两个构造函数。
    package face;
    
    public class test {
    	public static void main(String args []) {
    		cat a=new cat();
    		cat b=new cat("coco", 12);<span style="white-space:pre">	</span><span style="color:#ff0000;">这里就可以在创建对象的时候直接赋值
    		</span>
    		System.out.print(b.name+" is "+b.age+"years old!");
    				
    	}<span style="white-space:pre">					</span><span style="color:#ff0000;">打印的时候要注意,在调用变量的时候,要写清楚是哪个对象的变量。
    	</span>
    
    }
    

    3.匿名对象

    就是一次性的对象,比如

    new cat();  这个就创建了一个匿名对象;

    new cat().jump();

    就这样直接用了。而且只能用一次,用完就没了。



    展开全文
  • Java中也采用了构造器,并且提供了“垃圾回收器”。对于不在使用的内存资源,垃圾回收器能自动将其释放。本篇文章主要介绍Java的构造方法以及匿名对象。 构造方法的定义语法与调用时机 什么是匿名对象以及匿名对象...

    前言

    在编写程序时不安全的初始化会导致程序发生发生重大错误。为了使程序可以被安全地初始化,C++引入了构造器(也可以成为构造方法)的概念,这是一个在创建对象时被自动调用的特殊方法。Java中也采用了构造器,并且提供了“垃圾回收器”。对于不在使用的内存资源,垃圾回收器能自动将其释放。本篇文章主要介绍Java的构造方法以及匿名对象。

    • 构造方法的定义语法与调用时机

    • 什么是匿名对象以及匿名对象的基本使用

    构造方法的定义语法与调用时机

    构造方法的定义语法:

    构造方法是在创建对象时被编译器自动调用,所以编译器应该知道构造方法的名字然后去调用它,为构造方法任意取名都可能会与类的某个成员冲突。于是Java采用了同C++中一样的方法:构造方法采用与类相同的名称

    在Java编程代码规范中要求:“每个方法首字母小写”,构造方法与类名是完全相同的,这个规范不适合构造方法,需要注意一下。
    构造方法一般定义为如下三种方式:

    class Student{
      public Student(){     //①
        ...
      }
      ...
    }
    class Student{
      Student(){      //②
        ...
      }
      ...
    }
    class Student{
      private Student(){    //③
        ...
      }
      ...
    }

    以上三种构造方式涉及到了访问权限的问题:

    第①种方式,构造方法采用了public修饰表示该类的对象是可以被不同包的其他类创建。

    第②种方式,默认为包访问属性,仅限于同包的类可以创建该类的对象。

    第③种方式,使用private修饰使得构造方法对外不可见,该类的对象无法被创建。多用来实现单例模式。

    在上面见了三种访问修饰符,如果学过C++那么还知道一种没有出现就是protected,本包中的子类可访问,不同包中的子类可以访问,不是子类不能访问。

    所以需要注意:在子类中使用父类的对象或者使用其类对象访问父类的protected成员是不行的!

    这里对包做一个解释:包类似于电脑中的文件夹,文件多了需要存于不同文件夹中方便管理,同样如此,类多了就需要放在不同的包里面方便管理。

    关于被这四种修饰符修饰的属性会方法的可访问性做一个小结:

    范围 private default(什么都不写) protected public
    同一个类 O O O O
    同一个包中的子类 X O O O
    同一个包中的其他类 X O X O
    不同包中的子类 X X O O
    不同包中的非子类 X X X O

    构造方法的调用时机:

    前面一直在说构造方法的调用是在类创建时,与普通方法不同,构造方法在实例化新对象(使用new开辟空间后)调用一次。普通方法是在对象被实例化后可以调用多次。构造方法也可以重载(重载的概念在后面介绍)。

    我们可以跟踪一下是如何调用类的构造方法的。

    以下面这个程序进行跟踪:

    class Person{
          private long pid=123456789;
          public Person(){
              System.out.println("Person()");
          }
          public Person(long pid){
            System.out.println("Person(long pid)");
            System.out.println("在使用传进来的pid赋值前:pid:"+this.pid);
            this.pid = pid;
            System.out.println("在使用传进来的pid赋值后:pid:"+this.pid);
          }
    }
    public class Student extends Person{   //extends 实现继承关系
      private String name;
      private int age=0;
      public Student(){
          System.out.println("Student()");
      }
      public Student(long pid, String name, int age){
        super(pid);         //调用父类的构造函数一定要写在最前面不然会报错
        System.out.println("Student(long pid, String name, int age)");
        this.name = name;
        this.age = age;
      }
      public getName(){
        return name;
      }
      public static void main(String[] args){
        Student stu1 = new Student();
        Student stu2 = new Student(123456,"Sakura",20);
      }
    }
    /*
    output:
    Person()
    Student()
    Person(long pid)
    在使用传进来的pid赋值前:pid:123456789
    在使用传进来的pid赋值后:pid:123456
    Student(long pid, String name, int age)
    */

    可以输出结果看出Java中的初始化顺序如下:

    • 在任何其他事情发生之前,会将分配给对象的存储空间初始化成二进制零。
    • 调用基类的构造函数。
    • 按照声明顺序调用属性的初始化方法。在Person中先将pid赋值为1234556789然后在返回到构造函数中将123456赋值给pid。
    • 调用导出类的构造函数。若是Student中属性有给定初始值,那么依旧如第三步后再进入构造函数进行其他初始化操作。

    什么是匿名对象以及匿名对象的基本使用

    什么是匿名对象?

    我们来看一步就创建对象的语法:

        ①类名称 ②对象名称 = ③new ④类名称()

    ①:规定了对象的类型

    ②:对象的名字,唯一标识对象

    ③:开辟新的堆内存空间,存储对象的内容,若是没有new,则没有内存空间,对象也就无法实例化

    ④:调用构造方法初始化对象

    上面的这条语句在内存中开辟了两个空间,一个栈空间存储引用变量对象名称,一个使用new开辟的堆空间用于存储对象内容。

    对象名称指向了在对堆中的对象,于是我们可以使用对象名称去操作对象。

    1099419-20181118111516858-1988634205.png

    若是我们只有"new 类名称();"这部分的话,那就是只是在堆中开辟了一个空间来保存对象信息,没有栈去指向它。也就是这个空间是没有名字的。

    所以,没有栈指向的对象就叫做匿名对象

    匿名对象的使用:

    new Student(123456,"Sakura",20).getName();

    由此就创建了一个匿名对象,可以向操作有名对象一样操作它。

    由于没有引用变量指向匿名对象,所以只能使用一次,然后就会成为垃圾对象等待被GC回收,



    小结



    本篇博文主要总结了Java中构造方法的定义和作用(为了在类对象实例化时设置属性初始化)由此涉及到到类访问权限,然后对类访问权限做了一个小结,以及Java程序初始化的顺序。最后介绍了匿名对象,即没有栈指向的对象。

    转载于:https://www.cnblogs.com/myworld7/p/9977000.html

    展开全文
  • Java中也采用了构造器,并且提供了“垃圾回收器”。对于不在使用的内存资源,垃圾回收器能自动将其释放。本篇文章主要介绍Java的构造方法以及匿名对象。 构造方法的定义语法与调用时机 什么是匿名对象以及匿...

    前言

    在编写程序时不安全的初始化会导致程序发生发生重大错误。为了使程序可以被安全地初始化,C++引入了构造器(也可以成为构造方法)的概念,这是一个在创建对象时被自动调用的特殊方法。Java中也采用了构造器,并且提供了“垃圾回收器”。对于不在使用的内存资源,垃圾回收器能自动将其释放。本篇文章主要介绍Java的构造方法以及匿名对象。

    • 构造方法的定义语法与调用时机

    • 什么是匿名对象以及匿名对象的基本使用

    构造方法的定义语法与调用时机

    构造方法的定义语法:

    构造方法是在创建对象时被编译器自动调用,所以编译器应该知道构造方法的名字然后去调用它,为构造方法任意取名都可能会与类的某个成员冲突。于是Java采用了同C++中一样的方法: 构造方法采用与类相同的名称 。

    在Java编程代码规范中要求:“每个方法首字母小写”,构造方法与类名是完全相同的,这个规范不适合构造方法,需要注意一下。

    构造方法一般定义为如下三种方式:

    class Student{
      public Student(){     //①
        ...
      }
      ...
    }
    class Student{
      Student(){      //②
        ...
      }
      ...
    }
    class Student{
      private Student(){    //③
        ...
      }
      ...
    }

    以上三种构造方式涉及到了访问权限的问题:

    第①种方式,构造方法采用了public修饰表示该类的对象是可以被不同包的其他类创建。

    第②种方式,默认为包访问属性,仅限于同包的类可以创建该类的对象。

    第③种方式,使用private修饰使得构造方法对外不可见,该类的对象无法被创建。多用来实现单例模式。

    在上面见了三种访问修饰符,如果学过C++那么还知道一种没有出现就是protected,本包中的子类可访问,不同包中的子类可以访问,不是子类不能访问。

    所以需要注意: 在子类中使用父类的对象或者使用其类对象访问父类的protected成员是不行的!

    这里对包做一个解释:包类似于电脑中的文件夹,文件多了需要存于不同文件夹中方便管理,同样如此,类多了就需要放在不同的包里面方便管理。

    关于被这四种修饰符修饰的属性会方法的可访问性做一个小结:

    范围 private default(什么都不写) protected public
    同一个类 O O O O
    同一个包中的子类 X O O O
    同一个包中的其他类 X O X O
    不同包中的子类 X X O O
    不同包中的非子类 X X X O

    构造方法的调用时机:

    前面一直在说构造方法的调用是在类创建时,与普通方法不同,构造方法在实例化新对象(使用new开辟空间后)调用一次。普通方法是在对象被实例化后可以调用多次。构造方法也可以重载(重载的概念在后面介绍)。

    我们可以跟踪一下是如何调用类的构造方法的。

    以下面这个程序进行跟踪:

    class Person{
          private long pid=123456789;
          public Person(){
              System.out.println("Person()");
          }
          public Person(long pid){
            System.out.println("Person(long pid)");
            System.out.println("在使用传进来的pid赋值前:pid:"+this.pid);
            this.pid = pid;
            System.out.println("在使用传进来的pid赋值后:pid:"+this.pid);
          }
    }
    public class Student extends Person{   //extends 实现继承关系
      private String name;
      private int age=0;
      public Student(){
          System.out.println("Student()");
      }
      public Student(long pid, String name, int age){
        super(pid);         //调用父类的构造函数一定要写在最前面不然会报错
        System.out.println("Student(long pid, String name, int age)");
        this.name = name;
        this.age = age;
      }
      public getName(){
        return name;
      }
      public static void main(String[] args){
        Student stu1 = new Student();
        Student stu2 = new Student(123456,"Sakura",20);
      }
    }
    /*
    output:
    Person()
    Student()
    Person(long pid)
    在使用传进来的pid赋值前:pid:123456789
    在使用传进来的pid赋值后:pid:123456
    Student(long pid, String name, int age)
    */在此我向大家推荐一个架构学习交流裙。交流学习裙号:821169538,里面会分享一些资深架构师录制的视频录像 

    可以输出结果看出Java中的初始化顺序如下:

    • 在任何其他事情发生之前,会将分配给对象的存储空间初始化成二进制零。
    • 调用基类的构造函数。
    • 按照声明顺序调用属性的初始化方法。在Person中先将pid赋值为1234556789然后在返回到构造函数中将123456赋值给pid。
    • 调用导出类的构造函数。若是Student中属性有给定初始值,那么依旧如第三步后再进入构造函数进行其他初始化操作。

    什么是匿名对象以及匿名对象的基本使用

    什么是匿名对象?

    我们来看一步就创建对象的语法:

    ①类名称 ②对象名称 = ③new ④类名称()

    ①:规定了对象的类型

    ②:对象的名字,唯一标识对象

    ③:开辟新的堆内存空间,存储对象的内容,若是没有new,则没有内存空间,对象也就无法实例化

    ④:调用构造方法初始化对象

    ④:在此我向大家推荐一个架构学习交流裙。交流学习裙号:821169538,里面会分享一些资深架构师录制的视频录像 

    上面的这条语句在内存中开辟了两个空间,一个栈空间存储引用变量对象名称,一个使用new开辟的堆空间用于存储对象内容。

    对象名称指向了在对堆中的对象,于是我们可以使用对象名称去操作对象。

    若是我们只有"new 类名称();"这部分的话,那就是只是在堆中开辟了一个空间来保存对象信息,没有栈去指向它。也就是这个空间是没有名字的。

    所以, 没有栈指向的对象就叫做匿名对象 。

    匿名对象的使用:

    new Student(123456,"Sakura",20).getName();

    由此就创建了一个匿名对象,可以向操作有名对象一样操作它。

    由于没有引用变量指向匿名对象,所以只能使用一次,然后就会成为垃圾对象等待被GC回收,

    小结

    本篇博文主要总结了Java中构造方法的定义和作用(为了在类对象实例化时设置属性初始化)由此涉及到到类访问权限,然后对类访问权限做了一个小结,以及Java程序初始化的顺序。最后介绍了匿名对象,即没有栈指向的对象。

    展开全文
  • 匿名类和匿名对象

    千次阅读 2018-06-20 17:25:40
    匿名类和匿名对象在的Java中有匿名类和匿名对象概念,有名字可知他们是因为没有名字二指定为匿名类的。匿名类匿名类(也叫匿名内部类)他是内部类的一种匿名类在类中只能使用一次,它通常用来简化代码的编写,但...
  • 对象和类的概念 对象:真实存在的唯一事物 类:同一事物的公共属性与行为的抽取 面向对象的核心思想:找适合的对象做适合的事情 找对象的方式:1.自定义类,然后创建对象 2.使用sun给我们提供的类创建对象 3.在java...
  • java中为什么说匿名内部类只能使用一次 首先了解一下类和对象(实例)的概念: 类:类是一个模板,是个抽象的概念,用来模拟一类事物,一旦定义了一个类,这个类就永远存在。在写代码的时候,我们都会写各种类,一般...
  • 1.1 final的概念 继承的出现提高了代码的复用性,并方便开发。但随之也有问题,有些类在描述完之后,不想被继承,或者有些类的部分方法功能是固定的,不想让子类重写。可是当子类继承了这些特殊类之后,就可以对...
  • 心得感悟今天的内容也大多都是概念文字,要消化领悟还是要靠自己多多思考,还好在我多次百度+问老师后,我终于还是理解了。...1. 目的一、加深数组类的使用熟练度二、了解类和对象三、了解对象的内存表现...
  • 内部类的概念与分类 1、内部类的概念:如果一个事务的内部包含另一个事务,...内部类使用外部类的成员变量成员时可以随意访问,但是外部类使用内部类的成员变量成员方法时需要内部类对象 2、两种调用内部成员的方式
  • 今天的内容主要是对前面知识的简单回顾,以及介绍一个新的概念匿名对象。 回顾 一、类与对象 定义类: 创建对象: 类名 对象名 = new 类名(实参); 二、封装 1.使用private关键字修饰 2.可以修饰成员变量、成员...
  • Java和对象的详解

    2019-04-22 18:10:53
    上篇:讲解了类和对象的基本概念,定义和使用,以及对象引用传递的初步分析; 下篇:讲解面向对象的封装性,类的构造方法和匿名对象等。 上篇: 一、面向对象简述 面向对象是一种现在最为流行的程序设计方法,...
  • 讨论Java中的内部类和匿名

    千次阅读 2011-02-26 15:58:00
    转自:http://www.enet.com.cn/article/2007/1227/A20071227974941.shtml内部类:一个内部类的定义是定义在另一个内部的类。... 提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有
  • 内部类:一个内部类的定义是定义在另一个内部的类。原因是:1.一个内部类的对象能够访问...提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者
  • 该篇博客目录 1、JAVA封装 2、JAVA中的包 ...4、JAVA中this关键字 ...5、JAVA内部类(成员内部类,静态内部类,方法内部类,匿名内部类) ...简单的说就是指隐藏对象的属性实现细节,仅对外提供公共访问方式
  • JAVA—面向对象

    2020-12-22 12:08:23
    匿名对象 两种使用情况 封装: 概念: 好处: 封装的原则: 如何实现? 构造函数 特点: 作用: 隐藏机制: 构造函数一般函数的不同 构造代码块: 作用: 特点: 构造代码块构造函数的区别: this: Static...
  • 下面,我打算从三个方面来讲解内部类的使用,并验证内部类的概念: 一、普通类定义内部类(不常见) "内部类"虽然有不同于普通类的特性,但是它终归是类,是类就必须能创建对象并调用其中的方法来执行功能,这是...
  • 上季内容回顾: 1、 类与对象的关系 2、 对象实例化之后才可以使用,如果使用了没有实例化(开辟了堆内存空间的)的对象则会出现...又通过构造方法的概念详细讲解了对象实例化时的每一步操作及匿名对象使用。...
  • Java_面向对象(上)

    2018-02-23 10:06:16
    类的概念类的定义对象的使用方法的形参匿名对象封装private关键字this关键字构造方法static关键字静态变量成员变量的区别 类的概念 类:是一组相关的"属性""行为"的集合; 对象:是该类事物的具体体现; 类的...
  • Java之面向对象(下)

    2020-04-05 20:08:54
    文章目录final修饰符final修饰成员变量final修饰局部变量final修饰基本类型引用类型的区别final修饰方法final修饰类抽象类概念使用接口概念使用接口抽象类之间的区别枚举类概念枚举类的成员变量、方法、构造器...
  • 接口抽象类是Java设计最基本的概念,它们都不能实例化对象,都可以实现多态,也都能用来创建匿名内部类。但实际使用上还有很多的不同。 两者的语法定义不同,对应的设计抽象关系也不同,接口主要是对行为的抽象...
  • Java中的接口抽象类

    2018-04-26 20:20:00
    接口抽象类是Java设计最基本的概念,它们都不能实例化对象,都可以实现多态,也都能用来创建匿名内部类。但实际使用上还有很多的不同。 两者的语法定义不同,对应的设计抽象关系也不同,接口主要是对行为的...
  • java内部类之成员内部类、局部内部类和匿名内部类

    千次阅读 多人点赞 2018-07-15 16:13:30
    内部类概念 一个类包含另外一个类。 分类 1、成员内部类。 2、局部内部类(包含匿名内部类)。...内部类使用外部,可以随意访问,但是外部类使用内部类要借助内部类的对象使用成员内部类 两种方法: 1...
  • 首先把概念理一下,Java 允许在一个类定义另一个类,这样的类被称为嵌套类,而嵌套类又可分为四种:静态嵌套类 - 声明为另一个类的静态成员内部类 - 声明为另一个类的实例成员本地内部类 - 声明在一个类的实例方法...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 185
精华内容 74
关键字:

java中匿名对象概念和使用

java 订阅