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

以前创建对象的方式,

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. [osg]osg显示中文信息

    转自:http://www.cnblogs.com/feixiang-peng/articles/3152754.html 写好了在osg中实时显示中文信息的效果.中间遇到两个问题,一个是中文显示,一 ...

  2. Jquery的AJAX应用详解

    案例一:取得服务端当前时间 简单形式:jQuery对象.load(url),返回结果自动添加到jQuery对象代表的标签中间 <body> 当前时间: <span id=" ...

  3. 职业定位(移动端、ios开发、Android开发)

    移动端 移动端webapp开发必备知识:http://www.chinaz.com/manage/2012/1128/283974.shtml 设计一款好的移动App,有哪些基本规则?http://w ...

  4. iOS 引导页

    1. 目标需求 引导页无限轮播,且轮播到最后一张时没有跳转到头一个的感觉 pageControl的显示为可选项 是否无限轮播为可选项 手动切换图片,并再次启动自动轮转 实现点击事件 2. 实现思路 初 ...

  5. 《疯狂Java讲义》(七)---- 方法

    一 方法的参数传递机制 Java方法的参数传递方式只有一种:值传递.就是将实际参数值的副本传入方法内,而参数本身不会受到任何影响. eg. 基本类型的值传递 public class Primitiv ...

  6. jQuery replaceWith replaceAll end的用法

    jQuery replaceWith replaceAll end的用法 <%@ page language="java" import="java.util.*& ...

  7. Spring aop:decare-parent 为类增加新的方法

    Spring aop:decare-parent 为类增加新的方法: 使用XML配置的方式: XML: <?xml version="1.0" encoding=" ...

  8. 给Ubuntu 16.04更换更新源

    给自家的Ubuntu下载软件速度有点慢,毕竟是从国外下载软件,就想更换到国内比较好的更新源(就是这些软件所在的服务器),一般直接百度Ubuntu更新源就能出来一大堆,这时候最好是找和自己Ubuntu版 ...

  9. [CSS3] 学习笔记-CSS入门基本知识

    1.CSS概述 CSS指层叠样式表 CSS样式表极大的提高了工作效率 1)CSS基础语法: selector{ propery:value } 例1:h1{color:red;font-size:14 ...

  10. 语句 if else

    语句 语句是指程序命令,都是按照顺序执行的.语句在程序中的执行顺序称为“控制流”或“执行流”. 根据程序对运行时所收到的输入的响应,在程序每次运行时控制流可能有所不同. 语句间的标点符号必须是英文标点 ...