java 构造器学习笔记
构造器(构造器不是方法也不是类的成员)
以前创建对象的方式,
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 构造器学习笔记的更多相关文章
- Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- JAVA Web学习笔记
JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...
- Kotlin for Java Developers 学习笔记
Kotlin for Java Developers 学习笔记 ★ Coursera 课程 Kotlin for Java Developers(由 JetBrains 提供)的学习笔记 " ...
- Java IO学习笔记七:多路复用从单线程到多线程
作者:Grey 原文地址:Java IO学习笔记七:多路复用从单线程到多线程 在前面提到的多路复用的服务端代码中, 我们在处理读数据的同时,也处理了写事件: public void readHandl ...
- 20145213《Java程序设计学习笔记》第六周学习总结
20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java JDK8 学习笔记——助教学习博客汇总
java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...
- java JDK8 学习笔记——第16章 整合数据库
第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...
随机推荐
- IOS开发-UI学习-NSMutableAttributedString(带属性的字符串)的使用
带属性的字符串: NSString *aa = @"hellochinaIloveYou!"; NSMutableAttributedString *mas = [[NSMutab ...
- Java web入门
1.java 设计模式:http://blog.csdn.net/JAVE_LOVER/article/category/2379703 2.Java web框架的思考:http://www.osch ...
- vs2015编译mysql c++ connector
目前MySQL Connector/C++的binary版本最高只支持VS2008,VS2015需要下载源码自行编译. 1.CMAKE 到官网下载最新的稳定版本 把bin目录添加到环境变量PATH中 ...
- ZOJ 1108 & HDU 1160 - FatMouse's Speed
题目大意:给你n只老鼠的体重w和速度s,让你找出最长的子序列使得w[i] < w[j] 且 s[i] > s[j] (i < j).求最长序列的长度并输出该序列. LIS(Longe ...
- java基础面试
1. String类为什么是final的. 安全性:如果字符串是可变的,那么会引起很严重的安全问题.譬如,数据库的用户名.密码都是以字符串的形式传入来获得数据库的连接,或者在socket编程中,主机名 ...
- QStandardItemModel的简单应用
The QStandardItemModel class provides a generic model for storing custom data. QStandardItemModel提供了 ...
- java me 旋转的X案例
package com.xushouwei.cn; import javax.microedition.lcdui.Command;import javax.microedition.lcdui.Co ...
- MVC使用HandleErrorAttribute自定义异常
MVC中,有一个Filter可以捕捉错误,但是它的用法是利用Attribute来实现的,而且只能加在Controller和Action上,所以不能捕捉别出的错误 其实理论上所有的错误肯定产生于Cont ...
- SQL Server 手把手教你使用profile进行性能监控
200 ? "200px" : this.width)!important;} --> 介绍 经常会有人问profile工具该怎么使用?有没有方法获取性能差的sql的问题.自 ...
- HDU5475
An easy problem Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...