构造函数以及关键词this
Java中所有类都有构造方法,用来进行该类对象的初始化,构造方法也有名称,参数和方法体以及访问权限的设定。
1.构造方法的完整定义格式如下:
[public|protected|private]<class_name>([argument_list>])
{
[<statements>]
}
2.访问限定符(4种)
♦public :任何类都能够创建这个类的实例对象。
♦protected:只有这个类的子类以及与这个类在同一个包中的类可以创建这个类的实例对象。
♦private:没有其他类可以实例化该类,只有这个类中具有public权限的方法可以构造该类的对象。
♦没有访问权限设定:只有与该类在同一个包中的类可以创建该类的实例化对象。
3.构造方法的特点:
♥构造方法的名称必须与类名相同。
♥构造方法不能有返回值。
♥用户不能直接调用构造方法,必须通过关键字new 自动调用它。
( 补充:)
1.用class定义的类型叫做类类型。
2.一个类是用来描述一个实体(属性+行为)的抽象类型。
类(成员变量)=》实体的属性的
类(成员方法)=》实体的行为的
3.类里面的所有成员都可以做访问限定,如:public,private。。。
4.对象的成员变量如果没有初始化,会自动进行初始化的,
引用类型的变量==》null
简单类型的变量:byte,short,int,long==》0
float,double==》0.0
boolean==》false
char==》'\u0000'
5.构造方法的特点:
new对象的时候,先分配内存,然后自动调用相应的构造函数。
构造函数专门做成员变量的初始化操作。
成员变量没有返回值,只有函数名和参数列表。
构造函数的名字只能和类名相同。
6.类里面
7.static成员变量是属于类级别的,是所有这个类实例化的对象所共享的变量
普通的成员变量是属于对象级别的,是每一个对象所私有的。
8.static成员方法属于类级别,调用时通过 ( 类名. ) 进行调用,方法中没有this引用
普通的成员方法必须通过 (对象. ) 来调用,方法中没有this 引用变量。

4.默认的构造方法
在Java类中可以不定义构造方法,而其他类仍然可以通过调用new XXX()来实例化XXX类的对象。
这是因为Java在编译时,给没有定义构造方法的类自动加入了一个特殊的构造方法。这个方法不带参数,且方
法体为空,称为类默认的构造方法。
用默认构造法方法初始化对象时,由系统用默认值初始化对象。
5.重载构造方法
构造方法可以重载,即定义多个构造方法,其参数表不同,重载构造方法的目的是使类对象具有不同的初始值,为类对象的初始化提供方便。
补充:
javap -c +类名.class 该文件的反汇编
javac 类名.class 程序的编译成class字节码文件
java 类名 运行字节码文件
jps 查看运行的进程和进程号(pid)
jmap 查看堆上的对象信息
jmap -histo[:live] pid 查看堆上活着的对象
jmap -histo[:live] pid ->log.txt 并且输出到log文件中(查看该文件 start. 找到该文件打开)
this是Java使用的一个有特定意义的引用,它指向当前对象自身,
public class Student {
// 对象级别的,属于每一个对象私有的
// 学生的学号
private Integer id;
// 学生的姓名
private String name;
// 年龄
private Integer age;
// 性别
private String sex;
// 统计学生的数量 属于类级别的,所有对象共享的
private static int count;
// 类的构造函数
public Student(){
this.id = 0;
this.name = "default";
this.age = 0;
this.sex = "default";
count++;
}
public Student(Integer id, String name,
Integer age, String sex){
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
count++;
}
// 唱歌的方法
public void sing(String name){
System.out.println(this.name + " singing " + name);
}
// 打印学生的信息
public void show(){
System.out.println("id:" + this.id);
System.out.println("name:" + this.name);
System.out.println("age:" + this.age);
System.out.println("sex:" + this.sex);
}
public static void main(String[] args) {
// 类实例化了一个学生对象
Student s1 = new Student();
// 对象s调用自己的成员方法
s1.show();
Student s2 = new Student(1000,
"zhang san", 22, "男");
s2.show();
Student s3 = new Student(1000,
"li si", 22, "男");
// s2.showStudentNumber();//查询该班级人数不应该依赖于某个实例对象
Student.showStudentNumber();
}
/**
* static静态方法,属于类级别的,表示当前这个方法不依赖于具体的
* 对象了,它操作的是所有对象共享的一些信息
*/
private static void showStudentNumber() {
System.out.println("student number:" + count);
}
}
其中构造函数中的this.id ,this.name,this.age,this.sex指向的是当前对象的id,name,age,sex变量。实际上,在一个对象的方法被调用执行时,java会自动的给对象的变量和方法都加上this的引用,指向内存堆中的对象。public void sing(String name),这其中的参数name就不是成员变量,就不需要this。
构造函数以及关键词this的更多相关文章
- Swift4 类与继承, 类型转换, 类型判断
创建: 2018/03/05 完成: 2018/03/07 更新: 2018/03/09 完善标题 [Swift4 类与继承, 类型转换] -> [Swift4 类与继承, 类型转换与判断] 补 ...
- JavaScript中‘this’关键词的优雅解释
本文转载自:众成翻译 译者:MinweiShen 链接:http://www.zcfy.cc/article/901 原文:https://rainsoft.io/gentle-explanation ...
- C++构造函数中不能调用虚函数
在构造函数中调用虚函数,并不会产生多态的效果,就跟普通函数一样. c++ primer 第四版中497页15.4.5构造函数和析构中的虚函数讲到,如果在构造函数或析构函数中调用虚函数,则运行的是为构造 ...
- C#高级编程笔记 Day 2, 2016年8月 31日 构造函数
1.构造函数: 实例构造函数(只要创建了对象,就会执行)一般使用 this 关键字区分成员字段和同名的参数.可以把构造函数定义为private 或 protected .这样不相关的类也不能访问他们. ...
- java中的static关键词
以下来自:http://www.cnblogs.com/codc-5117/archive/2011/12/04/2275298.html Static基本规则: (1)一个类 ...
- Delphi关键词
学习的东西越来越多难免会忘记以前的知识,即使是你的大脑很发达也不见得能记得所有的东西,单词,所以做做笔记写写小抄是一个很好的习惯,到需要的时候来翻翻看看,当然个人的作小抄的习惯也不尽相同,这里我自己做 ...
- JavaScript 构造函数 prototype属性和_proto_和原型链 constructor属性 apply(),call()和bind() 关键字this
1.构造函数: 通常构造函数首字母需要大写,主要是为了区别ECMAScript的其它函数.(高程三 P145) 构造函数与其他函数的唯一区别,就在于调用它们的方式不同.只要通过new来调用,任何函数都 ...
- C++自动类型转化--特殊构造函数方法和重载的运算符方法
一.重载运算符法 #include <stdio.h> #include <iostream> class Three { int i; public: Three(, ) : ...
- (转)C# Where关键词的用法
where(泛型类型约束) where关键词一个最重要的用法就是在泛型的声明.定义中做出约束. 约束又分为接口约束.基类约束.构造函数约束.函数方法的约束,我们慢慢介绍. 接口约束 顾名思义,泛型参数 ...
随机推荐
- 2018-8-10-C#-判断文件编码
title author date CreateTime categories C# 判断文件编码 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17:23: ...
- 手机web页面调用手机QQ实现在线聊天的效果
html代码如下: <a href="javascript:;" onclick="chatQQ()">QQ咨询</a> js代码如下: ...
- UPC 2019年第二阶段我要变强个人训练赛第十六场
传送门: [1]:UPC比赛场 [2]:UPC补题场 F.gu集合(数论) •题目描述 题目描述: Dew有一个长为n的集合S. 有一天,他想选k个不同的元素出来做游戏. 但是Dew只有两只手,所以他 ...
- P1031 栈的序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- C# 如何写 DEBUG 输出
本文来告诉大家一个规范,如何去写 DEBUG 的输出. 经常在代码中,需要使用 DEBUG 来输出一些奇怪的东西来进行测试.但是输出的窗口只有一个,如果有一个逗比在不停输出,那么就会让输出窗口看不到自 ...
- VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,中文正则,倒数第二列, 匹配任意一个字符 :
VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3 移动n1-n2行(包括n1,n2)到n3行之下: ...
- linux查看文件内容跳到文件底部和回到文件顶部的快捷键
有时候需要查看一些日志文件,然后要从底部开始查看的话 可以按 shift+g 即可跳到文件底部 要返回文件顶部的时候 按 gg即可
- python基础试题(一)
1.执行 Python 脚本的两种方式 1.python 进入解释器 2.python 1.py 执行文件 limux里 ./1.py 2.简述位.字节的关系 8位1个字节.计算机处理以字节为单位,存 ...
- UITapGestureRecognizer 和 UICollectionView、UITableView的点击事件冲突问题
解决:https://blog.gocy.tech/2016/11/19/iOS-touch-handling/ 1. tap.delegate = self; tap加个代理<UIGestur ...
- 聊聊多线程那一些事儿(task)之 三 异步取消和异步方法
hello,咋们又见面啦,通过前面两篇文章的介绍,对task的创建.运行.阻塞.同步.延续操作等都有了很好的认识和使用,结合实际的场景介绍,这样一来在实际的工作中也能够解决很大一部分的关于多线程的业务 ...