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

以前创建对象的方式,

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. ecshop--标签数组

    $properties  商品属性 array(1) { ["商品属性"]=> array(1) { [178]=> array(2) { ["name&qu ...

  2. mybatis sql中if判断传入Integer类型,传入0时,判断没有执行

    数据库中字段 isDisable 0:否:1:是 xml中判断 <if test="isDisable != null and isDisable !='' "> AN ...

  3. 创业类网站建设日志1——搭建服务器svn以及前端开发环境

    1.需要在linux环境的服务器下搭建node和npm还有Grunt,所以先需要一个叫putty的工具连接服务器命令行终端 2.双击putty工具,在HostName一栏输入项目服务器地址:172.1 ...

  4. 如何设置打开jsp页面速度加快?

    1.

  5. IE6中让png的icon图标也透明的完整代码段

    一个引用了在IE6中让img图标也可引用png图片的js插件代码的html是这样写的,兼容IE6: <a class="btn btn-select" href=" ...

  6. C# windows服务的创建与调试

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  7. js原生设计模式——12装饰者模式

    1.面向对象模式装饰者 <!DOCTYPE html><html lang="en"><head>    <meta charset=&q ...

  8. php生成PDF文件(FPDF)

    首先要下载FPDF http://www.fpdf.org/  附件可以在我的资源里下载http://yunpan.cn/c3RJ5BpPfX6dL  访问密码 f1f2 FPDF文档:http:// ...

  9. Java Swing Graphics Graphics2D的一般用法

    Java Swing Graphics Graphics2D的一般用法: 贝塞尔曲线参考:http://www.zhangxinxu.com/wordpress/2014/06/deep-unders ...

  10. IIS 挂载android的apk文件进行下载

    需要进行MIME的映射处理: 添加MIME映射:文件扩展名:.apk,MIME文件类型:application/vnd.android