1.点
    构造方法的作用以及定义要求
    匿名对象的使用
    构造方法:
        只要出现()的都表示方法
        构造方法就是类构造对象时调用的方法,主要用来实例化对象。

>>>>
    2.1构造方法
        首先看一个格式:实例化对象操作。
            ①类名称 ②对象名称 = ③new ④类名称();
        每个组成部分的意义;
            “①类名称”:用于标记对象的类型,因为对象开辟空间后需要开辟堆内存,堆内存保存属性,属性在类中定义;
            “ ②对象名称”:如果要想操作类中的属性或者方法,那么必须依靠对象名称完成;
            “ ③new”:类属于引用数据类型,开辟新的堆内存空间,一定使用 new 完成;
            “④类名称()”:只要出现“()”的都表示方法,................这个实际上就是构造方法。

只要是 方法就一定能重载
构造方法重载的时候不需要 考虑方法名称 因为必须跟类名称一样 只需要考虑参数类型或者个数即可
    构造方法重载需要注意 按照参数的个数顺序降序或 升序排列
 
    而且需要注意:类中的基本组成属性构造方法,普通方法,在编写的时候也要注意顺序
 
 实际上在进行JAVA 代码的编译的过程之中系统会自动加入一些代码
 如果发现你现在定义的类中没有 定义构造方法 那么系统会自动帮助用户提供一个无参的什么都做的构造方法
 这样就可以保证每一个类中都一定会有一个以上的构造方法

构造方法的定义要求:
            要求方法名称与类名称相同,并且没有返回值类型声明
        范例:

class Student{
public Student(){ // 方法名称与类名称相同,无返回值声明
System.out.println("*************************");
}
}
public class javaDemo{
public static void main(Srting args[]){
Student stu = null; // 声明对象 //没有调用构造方法
stu = new Student(); // 实例化对象时调用构造方法
}
}

通过以上的代码执行可以发现,所有类中的构造方法都在使用关键字 new 实例化新对象的时候才会被使用到。一使用 new 就需要构造方法。
        但是在之前没有定义构造方法

        实际上在进行JAVA 代码的编译的过程中,系统会自动加入一些代码。所以这个时候如果发现你现在的类中并没有定义构造方法,那么系统会自动帮助用户提供一个无参的什么都不做的构造方法,类似如下:
  public Student(){//方法名称与 类名称相同,无返回值声明
  }

        这样就可以保证每一个类中都一定会至少存在一个构造方法。所有的类都肯定有构造方法,至少有一个。

        那么这个构造方法有什么用呢?
            构造方法是在使用关键字 new 实例化对象的时候才会被调用,那么实例化对象的时候实际上也就属于内存空间的开辟,也就属于属性的初始化过程,但是发现,默认情况下属性初始化后的内容都是其对应数据类型的默认值。所以如果现在希望可以在对象实例化时传递一些属性的内容,那么就可以依靠构造方法完成。

        一旦类中定义了有参构造方法,则默认的构造方法不会出现

        分析:如果按照传统的无参呢构造形式处理,则对象创建之后需要明确的调用 stter 设置属性内容

class Person { //现在定义一个类
//定义类中的两个属性
private String name; // 表示人的姓名
private int age; // 表示人的年龄
public Preson(){
}
public void tell(){
system.out.println("姓名:" + name +"年龄:" + age);
}
public void setName(String n){
name = n;
}
public void getName(){
return name;
}
public void setAge(int a){
if(a >= 0&&a <= 100){
age = a;
}
}
public void getAge(){
return age;
}
}
public class T{// 另一个类
public static void main (String args[]){
Person per = new Person();
per.setName("少爷");
per.setAge(18);
System.out.println(per.getInfo());
}
}

  分析:如果有构造方法呢

class Person { //现在定义一个类
//定义类中的两个属性
private String name; // 表示人的姓名
private int age; // 表示人的年龄
public Preson(String n,int a){
setName(n); // 调用本类普通方法
setAge(a);
}
public void tell(){
system.out.println("姓名:" + name +"年龄:" + age);
}
public void setName(String n){
name = n;
}
public void getName(){
return name;
}
public void setAge(int a){
if(a >= 0&&a <= 100){
age = a;
}
}
public void getAge(){
return age;
}
}
public class T{// 另一个类
public static void main (String args[]){
Person per = new Person(“少爷”,18);
System.out.println(per.getInfo());
}
}

// 以上代码执行可以发现,所有类中的构造方法都在使用关键字 new 实例化对象时候才会被使用到
// 一使用 new  就需要构造方法

所以现在可以发现构造方法最大的用处在于:对象实例化的同时可以为类中的操作进行初始化准备
        构造方法本身算是方法的定义范畴,所以来讲构造方法也是允许重载的,不过与普通方法的重载不同,构造方法在进行重载的时候只需要考虑参数的类型以及个数不同即可

class Person { //现在定义一个类
//定义类中的两个属性
private String name; // 表示人的姓名
private int age; // 表示人的年龄
public Preson(); // 构造方法重载
public Preson(String n ){ // 单参构造方法
setName(n );
}
public Person(String n,int a){ // 定义有参构造
setName(n);
setAge(a);
}
public void tell(){
system.out.println("姓名:" + name +"年龄:" + age);
}
public void setName(String n){
name = n;
}
public void getName(){
return name;
}
public void setAge(int a){
if(a >= 0&&a <= 100){
age = a;
}
}
public void getAge(){
return age;
}
}
public class T{// 另一个类
public static void main (String args[]){
new Person("少爷",-3).tell();
}
}

对于构造方法的总结如下:
            每当使用关键字 new 开辟新对象时一定会调用构造方法,构造方法只会在对象实例化的时候调用唯一一次
            构造方法要求名称与类名称保持一致,并且无返回值定义 ,不能够使用 void(变为普通方法)
                所有的类都肯定有构造方法,至少有一个。
                如果发现你现在的类中并没有定义构造方法,那么系统会自动帮助用户提供一个无参的什么都不做的构造方法

/*

  此时的程序在实例化 Person 类对象的时候会自动的将 name 与 age 属性传递到对应的属性之中, 这样的做得好处相当于省略了一系列的sett 方法的调用

疑问 既然构造方法没有返回值为什么不使用void声明?
      构造方法是在实例化对象的时候只能调用一次,
      而所有的普通方法呢 可以利用对象调用多次
      如果说构造当现在定义为  public void Person(){}   这就属于普通方法

/*  匿名对象
  匿名就是没有名字,匿名对象指的是没有名字的对象,只使用一次的对象由于其没有任何栈内存的指向,所以一次之后将成为垃圾
  对象的名字都保存在栈内存之中在整个对象操作之中,真正有用的不是栈内存,因为栈内存指向的是堆内存,真正用的是堆内存堆内存依靠 new 来开辟,·所以此时的代码可以直接用“new Person("少爷",-3)”来调用类中方法

public class T{// 另一个类
public static void main(String args[]){
new Person("少爷",-3).tell();
}
}

但是此时的对象由于没有名字,所以使用一次后会自动成为垃圾
*/
/*>>>>>
    1 开辟新的堆内存空间除去使用关键字new 之外还要调用构造方法
    2 只使用一次的对象可以使用匿名对象完成 匿名对象的本质就是只有堆内存空间没有栈引用的对象
*/

菜鸡的Java笔记 第十二 - java 构造方法与匿名对象的更多相关文章

  1. 菜鸡的Java笔记 第二十二 - java 对象多态性

    本次只是围绕着多态性的概念来进行讲解,但是所讲解的代码与实际的开发几乎没有关系,而且多态一定是在继承性的基础上才可以操作的,        而本次将使用类继承的关系来描述多态的性质,实际的开发中不会出 ...

  2. 菜鸡的Java笔记 第二十八 - java 包的定义

    包的主要作用以及定义    包的导入操作    系统常见的开发包    jar 程序命令        包的定义        在任何的操作系统之中都有一个统一的共识:同一个目录下不能够存在有相同的文 ...

  3. 菜鸡的Java笔记 第十九 - java 继承

    继承性的主要目的,继承的实现,继承的限制                继承是面向对象中的第二大主要特点,其核心的本质在于:可以将父类的功能一直沿用下去                为什么需要继承? ...

  4. 菜鸡的Java笔记 第十八 - java 代码块

    代码块  code block                content (内容)        在程序结构之中使用"{}"定义的内容就称为代码块,但是会根据其声明的位置以及关 ...

  5. 菜鸡的Java笔记 第二十九 - java 单例设计模式

    SingleCase 单例设计模式        1.单例设计模式的特点        2.多例设计模式的特点    内容    单例设计模式        现在如果说有这么一个程序类 class S ...

  6. 菜鸡的Java笔记 第二十六 - java 内部类

    /*    innerClass        从实际的开发来看,真正写到内部类的时候是在很久以后了,短期内如果是自己编写代码,几乎是见不到内部类出现的        讲解它的目的第一个是为了解释概念 ...

  7. 菜鸡的Java笔记 第二十四 - java 接口的基本定义

    1.接口的基本定义以及使用形式        2.与接口有关的设计模式的初步认识        3.接口与抽象类的区别                 接口与抽象类相比,接口的使用几率是最高的,所有的 ...

  8. 菜鸡的Java笔记 第十六 - java 引用传递

    referenceDelivery    引用传递是整个java 的精髓,也是所有初学者最难学的地方        引用的本质:同一块堆内存可以被不同的栈内存所指向    下面通过三道程序来进行引用传 ...

  9. Java笔记(十二) 文件基础技术

    文件基础技术 一.文件概述 一)基本概念 1.文件的分类: 1)文本文件:文件中每个二进制字节都是某个可打印字符的一部分.如.java文件 2)二进制文件:文件中每个二进制字节不一定用来表示字符,也可 ...

随机推荐

  1. CreateRemoteThread创建远程线程

    要实现线程的远程注入必须使用Windows提供的CreateRemoteThread函数来创建一个远程线程 该函数的原型如下: HANDLE CreateRemoteThread( HANDLE hP ...

  2. 测试开发【提测平台】分享12-掌握日期组件&列表状态格式化最终实现提测管理多条件搜索展示功能

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 本章内容思维导图如下,由于需要各种状态下的菜单操作,所以需要先实现提测信息的列表基础页面,然后再推进其他需求开发 基本知识点学习 Date ...

  3. TWAIN-v2.4-说明文档翻译(1)介绍

    介绍 Introduction 一致性需求(Need for Consistency) 对于扫描仪,数字摄像仪,以及其他图像获取设备,用户渴望发现将图像合并到他们的文档以及其他工作的价值.然而,支持展 ...

  4. WinForm事件与消息

    WinForm事件与消息 消息概述以及在C#下的封装 Windows下应用程序的执行是通过消息驱动的.所有的外部事件,如键盘输入.鼠标移动.按动鼠标都由OS系统转换成相应的"消息" ...

  5. MySQL数据库建表命名的坑

    今天建了一张表,表名为--inOut: 然后再使用中发现怎么都是SQL错误: 然后在Navacat上发现 这是一个关键词! 如果非要继续使用,只能这样: 类似的坑还有user等.

  6. MyBatis原生批量插入的坑与解决方案!

    前面的文章咱们讲了 MyBatis 批量插入的 3 种方法:循环单次插入.MyBatis Plus 批量插入.MyBatis 原生批量插入,详情请点击<MyBatis 批量插入数据的 3 种方法 ...

  7. 开源协同OA办公平台教程:O2OA服务管理中,接口的调用权限

    ​ 本文介绍O2OA服务管理中,接口的权限设定和调用方式. 适用版本:5.4及以上版本 创建接口 具有服务管理设计权限的用户(具有ServiceManager角色或Manager角色)打开" ...

  8. verilog specify

    specify block用来描述从源点(source:input/inout port)到终点(destination:output/inout port)的路径延时(path delay),由sp ...

  9. 《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)

    1.简介 在实际自动化测试过程中,我们同样也避免不了会遇到单选和多选的测试,特别是调查问卷或者是答题系统中会经常碰到.因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助 ...

  10. 在Windows上使用Docker 创建MongoDB 副本集的极简方法(翻译)

    这篇博客介绍下在Windows上使用Docker 创建MongoDB 三节点副本集的最简单的方法.以下命令需要Docker for Windows并使用Linux 容器. 1: 为每个节点创建数据卷 ...