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驱动程 ...
随机推荐
- cookie设置
问题: cookie设置好后,谷歌浏览器下-->只有本页面有值,但是在其它浏览器下正常. $.cookie("userName",$("#loginName&quo ...
- 利用curl验证ssl网站(webservice)
curl的用法: http://linux.about.com/od/commands/l/blcmdl1_curl.htm DER格式的cert转换为PEM格式(curl只接受PEM格式): ope ...
- web 前端routine
HTML:check CSS : check Javascript: struggling 框架:—— SQL:—— http://www.cnblogs.com/kzang/tag/SQL/ web ...
- [Angular Tutorial] 2-Angular Templates
是时候用AngularJS生成我们的动态页面了. 通常我们有很多方法来构建一个应用的代码.对于Angular的应用,我们鼓励使用MVC设计模式来解耦代码并且实现职责独立.记住这个,现在让我们在我们的应 ...
- SQL四种语言
1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...
- Core Data需求
大家都在讨论怎么使用Core Data,但是什么时候用到Core Data,这好像是大家很少讨论的问题 我们使用Core Data ,主要用来存储两种类型的数据:固定的数据,和 可能变化的数据. 1. ...
- PHP使用JPG生成GIF动画图片,基于php_imagick_st-Q8.dll
PHP使用php_imagick_st-Q8.dll类库,把JPG图片连接生成GIF动画图片,需要事先下载好php_imagick_st-Q8.dll,文件,并配置php.ini文件,启用php_im ...
- php正则表达式简介
正则表达式简介 正则表达式Regular Expression,使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.代表性书籍<正则表达式之道>里面有详细论述,本书籍为个人查阅之用力 ...
- js bool true false 比较
.想到一个好玩的,运行如下 javascript : if ('0') alert("'0' is true"); if ('0' == false) alert(" ...
- 建立、配置和使用Activity——启动其他Activity并返回结果
Activity还提供了一个startActivityForResult(Intent intent,int requestCode)方法来启动其他Activity.该方法用于启动指定Activity ...