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驱动程 ...
随机推荐
- 2.14. 删除托管对象(Core Data 应用程序实践指南)
删除托管对象,只要调用托管对象上下文的deleteObject 或 deleteObjects就可以了.同样,真正的删除,要在调用save:之后.
- 排序问题思考(要求时间和空间复杂度尽可能的低)【Part 2】
继上篇博文,今天我将先介绍一下什么是计数排序,将计数排序描述清楚后,再进行后续的桶排序方法解决这个问题. 通常情况下,一提到排序,大家第一反应就是比较,其实,今天我要说的这个计数排序,不是基于比较的排 ...
- 如何使用php session
学会php session可以在很多地方使用,比如做一个后台登录的功能,要让程序记住用户的session,其实很简单,看了下面的文章你就明白了. PHP session用法其实很简单它可以把用户提 ...
- linux下安装openmpi
之前在win10的bash下折腾很久没有成功,后来经高人指点,发现其实一条命令就行了. sudo apt-get install libopenmpi-dev openmpi-bin 对的,就这一条命 ...
- js模块化开发——模块的写法
随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ...
- Java线程:线程安全类和Callable与Future(有返回值的线程)
一.线程安全类 当一个类已经很好的同步以保护它的数据时,这个类就称为线程安全的.当一个集合是安全的,有两个线程在操作同一个集合对象,当第一个线程查询集合非空后,删除集合中所有元素的时候,第二个线程也来 ...
- js数组快速排序
<script type="text/javascript"> var arr = [1, 2, 3, 54, 22, 1, 2, 3]; function quick ...
- HoloLens开发手记 - 开始使用Vuforia Getting started with Vuforia
Vuforia在6.1版本的Unity SDK里实现了对HoloLens的支持. 查看 Developing for Windows 10 in Unity 这篇文章来了解如何配置Unity和Visu ...
- 使用数字签名实现数据库记录防篡改(Java实现)
本文大纲 一.提出问题 二.数字签名 三.实现步骤 四.参考代码 五.后记 六.参考资料 一.提出问题 最近在做一个项目,需要对一个现成的产品的数据库进行操作,增加额外的功能.为此,需要对该产品对数据 ...
- 实现jul 日志重定向到 slf4j
需求背景 jul 指的是java.util.logging,是 java 内置的日志模块,目前流行的Java日志组件还包括 jcl(common-logging).slf4j/log4j/logbac ...