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学习-UITabBarController的使用
UITabBarController具体实例如下图 我们最常见的就是微信最下面的四个按钮,通过这四个按钮可以导航到不同的界面. UITabBarController是一个容器,以下的例程中给UITab ...
- CSS实现导航条Tab切换的三种方法
前面的话 导航条Tab在页面中非常常见,本文说详细介绍CSS实现导航条Tab的三种方法 布局 根据上图所示,先规定几个定义,上图的模块整体叫做导航,由导航标题和导航内容组成.要实现上图所示的布 ...
- 把div 当文字来进行布局控制
两边对齐 text-align: justify; text-justify: distribute-all-lines;/*ie6-8*/ text-align-last: justify;/* i ...
- HDU 1813 Escape from Tetris
TMDTMD IDA*没跑了.什么是IDA*? 就是迭代深搜+A*估个价. 然而为什么调了一天? n<=2的时候我输出了东西.... 看了一天. #include<iostream> ...
- WGCNA算法研究笔记
转自:http://www.gogoqq.com/ASPX/8390905/JournalContent/1303140588.aspx 研究了近半年的算法,记录下来给自己一个交代,也应该是考G前地最 ...
- Java获取异常堆栈信息
方法一: public static String getStackTrace(Throwable t) { StringWriter sw = new StringWriter(); PrintWr ...
- Delphi中ShellExecute的妙用
ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制.有几个API函数都可以实现这些功能,但是在大多数情况下Shel ...
- 才一年,H5的发展就成这样了......
关于H5的发展,分享几个最近看到的惊人数据和新闻: 1.截至2015,有80%的App将全部或部分基于HTML5.这意味着大部分App的内容都将是以网页的形式呈现,典型的例子包括微信.Facebook ...
- 【angularjs】【学习心得】路由继续研究篇
原文:http://www.imooc.com/wenda/detail/236998 其实路由的功能是比较复杂的,我们实际应用中页面的状态也是非常多的,上面简单的路由是肯定不能满足我们的需求的,所以 ...
- TIMESTAMP和DATETIME哪个好
日期范围 TIMESTAMP 支持从'1970-01-01 00:00:01′ 到 '2038-01-19 03:14:07′ UTC. 这个时间可能对目前正在工作的人来说没什么问题,可以坚持到我们退 ...