构造器(构造器不是方法也不是类的成员)

以前创建对象的方式,

public class Constructor{

public static void main(String[] args){

person p = new Persen();

p.name = "李四“

p.age = 15

Person p2 = new Person();

p2 = "王五”;

p.age = 16;

public

class Persen{

String name;

int age;

}

}

1 每创建一个对象,都需要进行初始化。

2 创建于初始化是分离操作,这可能会导致创建对象后,忘记初始化。

构造器的声明

构造器名字与类名相同,并且没有返类型(没有返回类型与返回类型为void不同),访问权限与参数列表与普通方法相同,没有限制。

构造器会在new创建对象时执行(调用),每创建一个对象,构造器都会执行一次。

class Person{

String name;

int age;

publice Person()//构造器

{

System.out.println("我执行了");

}

}

通过含有参数的构造器可以实现更加灵活地实现初始化。

默认的构造器

如果我们现实的声明任何构造器。则编译器会自动的为我们生成一个构造器。默认的构造器访问权限与类的访问权限相同,参数列表为空。

如果我们显示声明了构造器,不管我们声明的构造器是什么样子,默认的构造器都将不复存在。

构造器重载

如果在一个类中声明了多个构造器,则多个构造器必定重载。

通过构造器重载,可以实现不同可以提供类的不同初始化方式。

与方法重载相同,构造重载时,应优先考虑使用一个构造器,调用另外一个构造器来实现,调用原则与方法重载的调用原则相同

public ConOverloard{

int x;

int y

public ConOverloard(int x, inty){

this.x = x;

this.y = y;

}

public ConOverload(){

this (0, 0);

}

public static void main (String[] args){

ConOverload c = new ConOverload();

ConOverload c2 = ner ConOverload(5, 3);

}

}

与方法重载相同

构造器调用的语法规则:

1 调用构造器不能通过构造器的名字来调用而是通过this来调用。(调用方式))

2 调用构造器必须在另一构造器之中通过this调用,不能再构造器至外地调用。(调用位置)

3 this 调用构造器必须是构造器的第一条语句。(调用语句)

关键词this使用

1 this用于任何实例方法内,指向当前对象

2 this 可以用来调用构造器

实例变量的初始化

1 在变量声明处初始化

2 使用初始化块(一对儿花括号“{}”是声明在类的内部不是方法中,有别于语句块。在创建对象时,初始化块会自动执行。

3 使用构造器

public class Init {

//变量声明出初始化
int x = 10;

//使用初始化块
{System.out.println("初始化块1");}

//使用构造器
public Init (){

System.out.println("构造器");}

{System.out.println ("初始化块2");}

public static void main(String[] args){
    new Init();

   }

}

输出为

初始化块1

初始化块2

构造器

因此初始化块在构造器之前执行

变量声明处初始化与初始化块根据在类中声明的顺序执行,谁先声明先执行谁。

可变参数方法

可变参数使用...表示。可以接受0至多个参数

可变参数类型底层是一个数组。

main方法的String[] args实际就是一个可变参数。因此,main方法也可以这样声明:

public static void main(String... args) {

}

可变参数类型必须作为参数列表的最后一个参数。这就意味着,一个方法至多只能有一个参数为可变参数类型。

以求和为例

public class VarParam{

//可以改为public static void main(String... args){

public stic void main(String[] args) {

VarParam v = new VarParam() ;

System.out.println(v.add(new int[]){2, 3});

}

//使用数组可行,能进行不定数值的求和,但是依然比较繁琐。

public int add (int[] x)

{ int sum = 0;

for (int i : x) {

sum += i;}

return sum;

}

}

}

应用可变参数求和

public class VarParam {
    public static void main(String... args) {
        VarParam  v = new VarParam();

System.out.println(v.add());
        System.out.println(v.add(1, 2, 3));
        System.out.println(v.add(1, 2, 3, 4, 5));
    }

public int add(int... x) {
        int sum = 0;
        //0个参数时System.out.println(x[0]);
        for (int i : x) {
            sum += i;
        }
        return sum;
    }
}

可变参数类型必须作为参数列表的最后一个参数,这意味着,一个参数列表中最多只能有一个可变参数。

可变参数参与重载

可变参数参与重载的时候可变参数的优先级低于非可变参数.这是因为可变参数是后来才加入java的,为了兼容以前的程序。

可变参数底层就是一个数组,因此相同类型的可变参数与数组不能构成重载。

public class VarOverloard {

public static void main(String[] args) {

VarOverloard v = new VarOverloard ();

v.f(10);

v.f(10, 9);

v.f(10, 9, 6);

}

public void f(int x){

      System.out.println("f(int x)");

}

public void f(int x, int y){

     System.out.println("f(intx, int y)");

}

//可变参数参与重载时不会影响,优先级低于费可变参数
public void f(int... x){

      System.out.println("f(int... x)");

}

//编译出现错误
/*public void f(int[]){
}

}

输出值为

java 构造器学习笔记的更多相关文章

  1. Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  2. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  3. JAVA Web学习笔记

    JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...

  4. Kotlin for Java Developers 学习笔记

    Kotlin for Java Developers 学习笔记 ★ Coursera 课程 Kotlin for Java Developers(由 JetBrains 提供)的学习笔记 " ...

  5. Java IO学习笔记七:多路复用从单线程到多线程

    作者:Grey 原文地址:Java IO学习笔记七:多路复用从单线程到多线程 在前面提到的多路复用的服务端代码中, 我们在处理读数据的同时,也处理了写事件: public void readHandl ...

  6. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  7. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. java JDK8 学习笔记——助教学习博客汇总

    java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...

  9. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

随机推荐

  1. 2.14. 删除托管对象(Core Data 应用程序实践指南)

    删除托管对象,只要调用托管对象上下文的deleteObject 或 deleteObjects就可以了.同样,真正的删除,要在调用save:之后.

  2. 排序问题思考(要求时间和空间复杂度尽可能的低)【Part 2】

    继上篇博文,今天我将先介绍一下什么是计数排序,将计数排序描述清楚后,再进行后续的桶排序方法解决这个问题. 通常情况下,一提到排序,大家第一反应就是比较,其实,今天我要说的这个计数排序,不是基于比较的排 ...

  3. 如何使用php session

    学会php session可以在很多地方使用,比如做一个后台登录的功能,要让程序记住用户的session,其实很简单,看了下面的文章你就明白了.   PHP session用法其实很简单它可以把用户提 ...

  4. linux下安装openmpi

    之前在win10的bash下折腾很久没有成功,后来经高人指点,发现其实一条命令就行了. sudo apt-get install libopenmpi-dev openmpi-bin 对的,就这一条命 ...

  5. js模块化开发——模块的写法

    随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ...

  6. Java线程:线程安全类和Callable与Future(有返回值的线程)

    一.线程安全类 当一个类已经很好的同步以保护它的数据时,这个类就称为线程安全的.当一个集合是安全的,有两个线程在操作同一个集合对象,当第一个线程查询集合非空后,删除集合中所有元素的时候,第二个线程也来 ...

  7. js数组快速排序

    <script type="text/javascript"> var arr = [1, 2, 3, 54, 22, 1, 2, 3]; function quick ...

  8. HoloLens开发手记 - 开始使用Vuforia Getting started with Vuforia

    Vuforia在6.1版本的Unity SDK里实现了对HoloLens的支持. 查看 Developing for Windows 10 in Unity 这篇文章来了解如何配置Unity和Visu ...

  9. 使用数字签名实现数据库记录防篡改(Java实现)

    本文大纲 一.提出问题 二.数字签名 三.实现步骤 四.参考代码 五.后记 六.参考资料 一.提出问题 最近在做一个项目,需要对一个现成的产品的数据库进行操作,增加额外的功能.为此,需要对该产品对数据 ...

  10. 实现jul 日志重定向到 slf4j

    需求背景 jul 指的是java.util.logging,是 java 内置的日志模块,目前流行的Java日志组件还包括 jcl(common-logging).slf4j/log4j/logbac ...