Java入门姿势【面向对象3】构造方法及其重载_方法的调用
上次我为大家写出啦“定义类与创建对象_了解局部变量”,上篇文章代码可能较多,如没有了解透彻的话请打开下方文章在进行观看一下哦!!
【Java入门姿势【面向对象2】定义类与创建对象_了解局部变量】
这次我们来说一下:构造方法以及重载 的使用
学习教程推荐:
- 1.北京高淇Java300集(Java强烈推荐)
Java300集零基础适合初学者视频教程_Java300集零基础教程_Java初学入门视频基础巩固教程_Java语言入门到精通 - 2.JavaSE基础全套-从零开始进阶之大神(推荐)
【大力推荐】OOP面向对象Java基础干货分享/JavaSE/面向对象编程/OOP程序设计_哔哩哔哩_bilibili - 3.Java全套课程-基础必备课程
JAVA全套课程_Java入门_Java零基础必备_Java编程课程_Java核心基础_EasyUI_SSM整合框架_Redis_高并发—全套课程 - 4.Java常用类基础实战
【基础夯实】Java常用类实战基础教程_Java八大常用类核心基础_Java常用类基础入门/Java包装类/String类 - 5.Java基础入门必备数学知识【数据结构与算法】(推荐)
Java基础入门必学知识数据结构与算法_Java数据结构与算法基础到进阶/Java基础入门进阶/Java数据结构分析/Java数据结构常见问题_哔哩哔哩_bilibili - 6.Java面向对象编程_OOP基础深入讲解
Java面向对象编程重基础深入讲解_OOP面向对象Java基础干货分享/JavaSE/面向对象编程/OOP程序设计 - 7.GOF23种设计模式-23中设计模式详解课程
GOF23种设计模式讲解_Java gof23种设计模式详解课程_从单例到备忘录模式 23种模式详解
构造方法及其重载
一、构造方法
对于一个类来说,一般有三种常见的成员:属性field、方法method、构造器constructor。这三种成员都可以定义零个或多个。
构造方法(constructor)也叫构造器,用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。Java通过new关键字来调用构造器,从而返回该类的实例,是一种特殊的方法。
声明格式:
[修饰符] 类名(形参列表){
//n条语句
}
构造器4个要点:
- 构造器的方法名必须和类名一致!
- 构造器通过new关键字调用!!
- 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。
- 如果我们没有定义构造器,则编译器会自动定义一个无参的构造方法。如果已定义则编译器不会自动添加!
- 构造方法也是方法,只不过有特殊的作用而已。与普通方法一样,构造方法也可以重载。
示例一:定义计算机类并模拟其操作
示例代码:
public class Computer {
//成员变量
private String cpu="Intel";//cpu
private String memory;//内存
private String mainBoard;//主板
private String keyBoard;//键盘
//构造方法
public Computer(){
System.out.println("--------Computer()--------");
cpu = "AMD";
}
public Computer(String cpu,String memory,
String mainBoard,String keyBoard){
this.cpu = cpu;
this.memory = memory;
this.mainBoard = mainBoard;
this.keyBoard = keyBoard;
}
// public Computer(String cpu1,String memory1,String mainBoard1,String keyBoard1){
// cpu = cpu1;
// memory = memory1;
// mainBoard = mainBoard1;
// keyBoard = keyBoard1;
// }
//成员方法
public void start(){
System.out.println("-------starting------");
}
public void close(){
System.out.println("------- closing----------");
}
public void show(){
System.out.println("cpu="+cpu+",memory="+memory+
",mainBoard="+mainBoard+",keyBoard"+keyBoard);
}
public static void main(String[] args) {
//购买一台电脑
Computer computer2 = new Computer();
// computer.cpu="酷睿"; omputer.memory="三星";
// computer.mainBoard="华硕"; computer.keyBoard="罗技";
Computer computer = new Computer("酷睿","三星","华硕","罗技");
//让电脑运行
computer.start();
computer.show();
computer.close();
}
}
需要注意的地方:
1)对象的创建完全是由构造方法实现的吗?
不完全是。构造方法是创建Java对象重要途径,通过new关键字调用构造器时,构造器也确实返回了该类对象,但这个对象并不是完全由构造器负责创建的。创建一个对象分为如下四步:
1. 分配对象空间,并将对象成员变量初始化为0或空
2. 执行属性值的显示初始化
3. 执行构造方法
4. 返回对象的地址给相关的变量
2)如果方法构造中形参名与属性名相同时,需要使用this关键字区分属性与形参。
this.id 表示属性 id; id 表示形参 id
二、对象数组
学习到这里在前面我们已经学过数组了,但是数组元素都是基本数据类型或者String类型。学习了类和对象之后,可以定义数组的元素类型是更加复杂的引用引用数据类型,每个元素可以是一个具体的对象,称为:对象数组。
没有过的解释,大家伙直接上手敲一下代码尝试一下:
代码示例:使用对象数组存储多台计算机信息
public class TestArray {
public static void main(String[] args) {
//定义一个数组,存储4个分数,并遍历
int [] arr;
arr = new int[4];
arr[0] = 90;
arr[1] = 80;
arr[2] = 100;
arr[3] = 54;
for(int score : arr){ System.out.println(score); }
System.out.println("======================");
//定义一个数组,存储4台计算机,并遍历
//Computer [] arr2;
//arr2 = new Computer[4];
Computer [] arr2 = new Computer[4];
arr2[0] = new Computer("酷睿","三星","华硕","罗技");
arr2[1] = new Computer("Intel","金士顿","技嘉","双飞燕");
arr2[2] = new Computer("AMD","三星","华硕","双飞燕");
arr2[3] = new Computer("酷睿","金士顿","技嘉","罗技");
for (Computer computer:arr2){
// System.out.println(computer.toString());
computer.show();
}
}
}
大家也可以自己使用 对象数组存储多个对象并输出内容!!
方法的调用
方法调是Java开发中的基本操作。理解方法调用的内存分配过程,实参形参的传递过程非常必要。方法参数分为基本数据类型和引用数据类型两种,传递参数有着实质的区别。
一、基本数据类型的方法调用
代码示例参考:
public class Point {
int x;
int y;
}
public class TestRefArgs {
public static void main(String[] args) {
//定义两个变量
Point p = new Point();
p.x = 10;
p.y = 20;
//输出交换前两个变量的值
System.out.println("交换前:p.x="+p.x+",p.y="+p.y);
//交换两个变量的值
swap(p);
//输出交换后两个变量的值
System.out.println("交换后:p.x="+p.x+",p.y="+p.y);
}
public static void swap(Point p){
p = new Point();
int temp;
temp = p.x;
p.x = p.y;
p.y = temp;
}
}
二、引用数据类型的方法调用
代码示例参考:
public class Point {
int x;
int y;
}
public class TestRefArgs {
public static void main(String[] args) {
//定义两个变量
Point p = new Point();
p.x = 10;
p.y = 20;
//输出交换前两个变量的值
System.out.println("交换前:p.x="+p.x+",p.y="+p.y);
//交换两个变量的值
swap(p);
//输出交换后两个变量的值
System.out.println("交换后:p.x="+p.x+",p.y="+p.y);
}
public static void swap(Point p){
p = new Point();
int temp;
temp = p.x;
p.x = p.y;
p.y = temp;
}
}
注意事项:基本数据类型的参数是值传递,引用数据类型的参数传递是引用(地址),本质上也是值传递。
三、this的使用
对象创建的过程和this的本质
构造方法是创建Java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回该类的对象,但这个对象并不是完全由构造器负责创建。创建一个对象分为如下四步:
1. 分配对象空间,并将对象成员变量初始化为0或空
2. 执行属性值的显示初始化
3. 执行构造方法
4. 返回对象的地址给相关的变量
this的本质就是“创建好的对象的地址”! 由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象” 。
this最常的用法:
- 调用成员变量:如果成员变量和局部变量同名,this必须书写,用来区分两者;如果没有同名的局部变量,this可以不写
- 调用成员方法:这种情况下,this可以省略
- 调用构造方法:使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
- this不能用于static方法中。
代码示例参考:this关键字的使用
public class Student {
//成员变量
private int sno;//学号
private String name;//姓名
private String sex;//性别
private double score;//分数
//构造方法
public Student(){
}
public Student(int sno,String name,String sex ){
this.sno = sno;
this.name = name;
this.sex = sex;
}
public Student(int sno,String name,String sex ,double score){
this(sno,name,sex);
//new Student(sno,name,sex);
// this.sno = sno;
// this.name = name;
// this.sex = sex;
this.score = score;
}
//成员方法
public void study(){
this.shout();
shout();
//System.out.println("好好学习,天天向上。add oil!!!");
System.out.println("在教室努力的学习中,代码量一行行提升了.....");
}
public void shout(){
System.out.println("好好学习,天天向上。add oil!!!");
}
public void show(){
System.out.println(sno +" "+this.name+" "+sex+" "+this.score);
}
public static void main(String[] args) {
Student stu = new Student(7,"田七","男",77);
stu.study();
stu.shout();
stu.show();
//study();
Student stu2 = new Student();
}
}
以上就是本章节所讲述的全部内容啦,稍后我在更新后续哦,喜欢的伙伴支持一下哦~
感谢观看~
Java入门姿势【面向对象3】构造方法及其重载_方法的调用的更多相关文章
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- Java方法、构造方法的重载;创建对象;调用方法
方法的重载 概念:多个同名但是不同参数的方法称为方法的重载 作用:编译器会根据调用时传递的实际参数自动判断具体调用的是哪个重载方法 特点:方法名相同:同一作用域:参数不同:数量不同 类型不同 顺序不同 ...
- Java入门基础—面向对象开发
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表 ...
- Java学习day8面向对象编程2-类的属性和方法
一.类的属性 1.语法格式 修饰符 类型 属性名 = 初值 说明:修饰符private:该属性只能由该类的方法使用.在同一类内可见.使用对象:变量.方法. 注意:不能修饰类(外部类) 修饰符pu ...
- java基础:父类与子类之间变量和方法的调用
1)父类构造函数 java中当调用某个类的构造方法的时候,系统总会调用父类的非静态初始化块进行初始化,这个调用是隐式的,而且父类的静态初始化代码 块总是会被执行,接着调用父类的一个或者多个构造器执行初 ...
- [Java入门笔记] 面向对象三大特征之:继承
理解什么是继承 首先我们知道,面对对象有三大特征: 封装:解决了数据的安全性问题 继承:解决了代码的重用问题 多态:解决了程序的扩展问题 上一篇博客中,我们了解了一下封装,现在我了再来看看什么是继承. ...
- [Java入门笔记] 面向对象编程基础(一):类和对象
什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...
- [Java入门笔记] 面向对象三大特征之:封装
了解封装 什么是封装? 在Java的面向对象程序设计中,有三大基本特征:封装.继承和多态.首先我们先来看看封装: 在Java的面对对象程序设计中,封装(Encapsulation)是指一种将函数功能实 ...
- [Java入门笔记] 面向对象编程基础(三):成员变量和局部变量
在类中,变量根据定义的位置不同,可以分为成员变量和局部变量.
随机推荐
- java.io.CharConversionException: Not an ISO 8859-1 character: [留]
笔记一下 问题代码如下: response.setContentType("text/html;charset=utf-8");ServletOutputStream out = ...
- Leetcode No.35 Search Insert Position(c++实现)
1. 题目 1.1 英文题目 Given a sorted array of distinct integers and a target value, return the index if the ...
- C语言:c++ ++c
#include <stdio.h> int main() {int a=3,x; x=(a++)+(++a)+(++a); printf("%d",x); getch ...
- 前端性能优化实践-gzip
一名优秀的前端工程师必备技能之一就是要会性能监控,并且能相应的进行性能优化.最近,有需求将项目做一些优化,提升用户的体验.看了一下项目并没有开启gzip,于是着手实现gzip压缩,下面就是具体的实践过 ...
- 如何快速更新长缓存的 HTTP 资源
前言 HTTP 缓存时间一直让开发者头疼.时间太短,性能不够好:时间太长,更新不及时.当遇到严重问题需紧急修复时,尽管后端文件可快速替换,但前端文件仍从本地缓存加载,导致更新长时间无法生效. 对于这个 ...
- python函数的坑
一.默认参数的坑,如果你的默认参数指向的是可变的数据类型,那么你无论调用多少次这个默认参数,都是同一个. def func(a,list=[]): list.append(a) return list ...
- React组件三大属性之 props
React组件三大属性之 props 理解1) 每个组件对象都会有props(properties的简写)属性2) 组件标签的所有属性都保存在props中 作用1) 通过标签属性从组件外向组件内传递变 ...
- 拿来-util工具函数
记录一些写的好的工具函数.以便学习和项目中直接拿来使用. 判断值是否相等:使用于任何数据类型:基本数据类型和复杂深层次对象 function deepEqual (a, b) { if (a === ...
- tcpdump软件使用
tcpdump是一个抓包工具, -w 选项是把抓到的包写到二进制文件中,一般扩展名是.cap或.dmp,但tcpdump程序创建文件时并不添加扩展名,可自己指定. -i 是指定要抓包的interfac ...
- @classmethod和@staticmethod修饰符
@classmethod和@staticmethod 一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直 ...