Java构造器浅析
Java构造器
问题引出
1.先看一段简单创建对象的例子:
public class constructTest {
public static void main(String[] args) {
Index t = new Index();
t.dance();
}
} class Index{
public void dance(){
System.out.println("跳舞.....");
}
}
构造器分析
① 代码中有Index t = new Index()这样一条语句,可能你会觉得这不就是创建对象吗?有什么好分析的…可是下面的类名是Index,而不是Index(),按道理来说,如果是创建对象,那我们应该写成Index t = new Index,为什么加了括号呢?一般都是在调用方法的时候才加括号,没错,其实这里也就是类似于调用方法,只不过这里是调用类的构造器(构造器不是方法,但是类似于方法,在官方文档中,他和方法是并列的。)

②当按住Ctrl 键再点击上面的Index()的时候,就会跳转到下面的Index这里,也就说明在创建对象的时候,确实是调用下面的构造器。
③初始化信息
public class constructTest {
public static void main(String[] args) {
Index t1 = new Index();
Index t2 = new Index("小芳",1);
t1.demo();
t2.demo();
}
}
class Index{
public String name;
public int age;
public Index(){
}
public Index(String name, int age){
this.name = name;
this.age = age;
}
public void demo(){
System.out.println(name+"刚出生,今年"+age+"岁了!");
}
}
//输出结果
null刚出生,今年0岁了!
小芳刚出生,今年1岁了!
②可以这样理解,当创建一个对象的时候,就像一个小孩的出生,我们会给他取名,并且默认规定他就是一岁。而对于对象来说,也可以类似的在创建的时候默认的给他初始化一些信息。而这些操作就把他放到构造器里面去,当实例化对象的时候,构造器里的内容也被执行,那么我们需要的初始化信息也就有了。
总结构造器作用
1.创建对象
2.初始化对象的信息。
其他注意事项
1.构造器定义方法: 权限修饰符 类名 ( 形参列表){ }
2.当创建对象的时候,如果没有
显式的写出构造器,那么系统会默认使用自带的构造器,只是这个构造器没有初始化功能,因为他也不知道你要初始化那些属性,所以一般都会显式的对构造器进行重写。3.构造器还可以进行重载,当重载以后,创建对象的时候会根据构造器参数列表信息来选择使用哪个构造器。如果自己写了构造器,那么系统默认的构造器就不再使用!
4.构造器不能是abstract, static, final, native, strictfp, 或者synchronized修饰,原因如下:
①构造器不是通过继承得到的,所以没有必要把它声明为final的。
(被
final修饰的变量就是常量,方法不能被重写但可以重载,类不能被继承。) ② 一个抽象的构造器将永远不会被实现,所以也不能声明为abstract的。
③构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。
④没有实际的需要把构造器定义成同步的,因为它将会在构造的时候锁住该对象,直到所有的构造器完成 它们的工作,这个构造的过程对其它线程来说,通常是不可访问的。 (synchronized)
⑤本地化的方法情况特别复杂,所以JVM调用起来非常麻烦,需要考虑很多种情况,没有native关键字的 情况下,JVM实现起来比较容易。
Java构造器浅析的更多相关文章
- scjp考试准备 - 7 - Java构造器
题目——如下代码的执行结果: class Hello{ String title; int value; public Hello(){ title += " World!"; } ...
- JAVA构造器,重载与重写
1. java构造器 构造器也叫构造方法(constructor), 用于对象初始化. 构造器是一个创建对象时被自动创建的特殊方法,目的是对象的初始化. 构造器 的名称与类的名称一致. JAVA通过n ...
- Java NIO浅析 转至 美团技术团队
出处: Java NIO浅析 NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服 ...
- 浅谈Java构造器
Java构造器 每个类都有构造方法.如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法. 在创建一个对象的时候,至少要调用一个构造方法.构造方法的名称必须与类同名,一个类可以 ...
- java构造器级简单内存分析
java构造器的使用(基础篇) 构造方法也叫构造器,是创建对象时执行的特殊方法,一般用于初始化新对象的属性. 基本定义语法: 访问控制符 构造方法名([参数列表]){ 方法体 } 注:"访问 ...
- java构造器
java的构造器不是方法,因为没有返回值. 构造器可以重载. 构造器的访问说明符: private:只有本类可以使用这个构造器. protected:这个类的子类和包中的类都可以使用此构造器. pub ...
- Java构造器和方法的区别
摘要要学习Java,你必须理解构造器.因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆.但是,构造器和方法又有很多重要的区别.原作者:Robert Nielsen 原站:www.javawor ...
- JAVA构造器、this、super
构造器是为了创建一个类的实例.这个过程也可以在创建一个对象的时候用到: Platypus p1 = new Platypus(); 相反,方法的作用是为了执行java代码. 修饰符,返回值和命名的不同 ...
- Java构造器的深入理解
[构造器与方法的深入理解] 构造器的深入理解 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 [博客地址]http://www.cnblogs.com/grl2 ...
随机推荐
- ESP8266 智能配网 断电重连
ESP8266 智能配网 断电重连 #include <ESP8266WiFi.h> bool autoConfig() { WiFi.begin(); for (int i = 0; i ...
- 【python测试开发栈】带你彻底搞明白python3编码原理
在之前的文章中,我们介绍过编码格式的发展史:[文章传送门-todo].今天我们通过几个例子,来彻底搞清楚python3中的编码格式原理,这样你之后写python脚本时碰到编码问题,才能有章可循. 我们 ...
- SpringBoot 源码解析 (七)----- Spring Boot的核心能力 - 自定义Servlet、Filter、Listener是如何注册到Tomcat容器中的?(SpringBoot实现SpringMvc的原理)
上一篇我们讲了SpringBoot中Tomcat的启动过程,本篇我们接着讲在SpringBoot中如何向Tomcat中添加Servlet.Filter.Listener 自定义Servlet.Filt ...
- 024.掌握Pod-部署MongoDB
一 前期准备 1.1 前置条件 集群部署:Kubernetes集群部署参考003--019. glusterfs-Kubernetes部署:参考<附010.Kubernetes永久存储之Glus ...
- [apue] FIFO:不是文件的文件
众所周知,FIFO中文译为命名管道,是PIPE的升级版.而PIPE是管道,系统提供的一种进程间通讯方式,FIFO与PIPE有以下方面不同: 1) FIFO需要先在文件系统创建(mkfifo),之后使用 ...
- PostGIS 存储过程返回类型
Postgresql存储过程返回值的方式有很多,在此先只记录一下自己用到过的,慢慢拓展 1.type型,这里geometry可以是任何postgresql支持的类型(integer/text/char ...
- Hadoop运行模式
Hadoop运行模式 (1)本地模式(默认模式): 不需要启用单独进程,直接可以运行,测试和开发时使用. 即在一台机器上进行操作,仅为单机版. 本地运行Hadoop官方MapReduce案例 操作命令 ...
- Vue.js大屏数字滚动翻转效果
================================ 大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果,以下是最 ...
- JavaScript笔记四
1.运算符 逻辑运算符 ! - 非运算可以对一个布尔值进行取反,true变false false边true - 当对非布尔值使用!时,会先将其转换为布尔值然后再取反 - 我们可以利用!来将其他的数据类 ...
- Redis的面试问题总结,面试跳槽必备
1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库 ...