Java 学习(09)--方法重载/构造函数/static 变量
Java 学习(09)--方法重载/构造函数
1 、方法
方法是一组为了实现特定功能的代码块的集合。方法在语法上的功能主要有以下两个:
①:结构化代码
将代码按照功能进行组织, 使代码的结构比较清晰, 容易阅读和修改, 也就是程序的可维护性强。
②:减少代码重复
一个固定的功能, 可能会在程序中多次使用, 在使用时只需要调用写好的方法, 而不用重复书写对应的功能代码。
方法在书写时需要注意以下两点:
①:逻辑严谨
方法实现的一个完整的功能, 所以在书写时要考虑到各种可能的情况, 并对每种情况做出恰当的处理。
②:通用性强(可重复利用)
方法实现的是一种功能, 在实际实现时, 可以根据需要, 使方法具备一定的通用性,除非必要,否则不要写专用的方法。在 Java 语言中,恰当的使用方法,将使程序更加优雅,便于阅读和使用。
我的总结:
方法:一段可重复使用的代码段;
程序中完成独立功能的一段代码的集合
格式:
修饰符返回值类型方法名 (参数类型参数名 1,参数类型参数名 2...) { 方 法 体 语 句 ; return 返回值 ;
}
修饰符:目前就用 public static 。后面再详细讲解其他修饰符返回值类型:就是功能结果的数据类型
方法名:就是起了一个名字,方便我们调用该方法。参数类型:就是参数的数据类型
参数名:就是变量参数分类:
实参:实际参与运算的数据
形参:方法上定义的,用于接收实际参数的变量方法体语句:就是完成功能的代码块
return :结束方法
返回值:就是功能的结果,由 return 带给调用者。
两个明确:
返回值类型:结果的数据类型
参数列表:参数的个数及对应的数据类型
方法的注意事项
A:方法不调用不执行 B:方法之间是平级关系,不能嵌套定义 C:方法定义的时候,参数是用,隔开的
D:方法在调用的时候,不用在传递数据类型 E:如果方法有明确的返回值类型,就必须有 return 语句返回。
示例:
输出:11 (将a,b写固定了,不推荐)
输出:30
(方法重载 overload:在一个类中方法同名不同参----1.方法名相同 2.参数列表不同:数量、类型、顺序不同)
不能根据返回值类型判断方法重载
2.private 关键字
(1)私有的意义,可以修饰成员变量和成员方法
(2)特点: 被 private修饰的后的成员只能在本类中被访问
(3)private 的应用: 以后再写一个类的时候:把所有的成员变量给 private 了 提供对应的 getXxx()/setXxx() 方法
输出:null
输出:林青霞
3.this关键字
(1)代表当前类的引用对象 (哪个对象调用方法,该方法内部的 this 就代表那个对象)
(2)this 的应用场景: A:解决了局部变量隐藏成员变量的问题
当变量一个是成员变量,一个是局部变量时,变量可以重名,就近原则
this 表示该类的一个对象的引用(那个对象调用这个方法,this 就表示那个方法)
this 作用:1.当局部变量和成员变量同名时,通过 this 关键字 调用成员变量
this 作用2:通过 this(),用于构造方法的第一行,用来调用其他构造方法
示例:
输出:null 0
输出:zs 18
4.构造方法
(1)作用:1.用来创建对象 2.用于对对象的成员变量进行数据的初始化
(2)格式: A:方法名和类名相同(包括大小写) B:没有返回值类型,连 void 都不能有,也没有返回值
C:不能通过对象 . 方法名的方式进行调用,而是通过 new 关键字进行调用 new 对象()
思考题:构造方法中可不可以有 return语句呢 ?
可以。而是我们写成这个样子就 OK 了:return; 其实,在任何的 void 类型的方法的最后你都可以写上: return;
(3)构造方法的注意事项
A:如果我们没写构造方法,系统将提供一个默认的无参构造方法
B:如果我们给出了构造方法,系统将不再提供默认构造方法 如果这个时候,我们要使用无参构造方法,就必须自己给出。
C:构造函数也可以重载
推荐:永远手动提供一个无参数的构造方法。
(4)给成员变量赋值的方式(3个) A:定义成员变量时赋值(不常用) B:通过set方法赋值 C:带参构造方法
示例:
输出:林青霞 40
创建一个对象时 (Student s = new Student()),都做了那些事
1.将 Student.class 加载到内存(只有第一次创建时才加载)
2.在栈内存中为变量 s 开辟空间
3.在栈内存中为学生变量开辟空间
4.给学生的成员变量进行默认初始化 null 0
5.给学生类的成员变量进行显示的初始化
6.通过构造方法给成员变量进行初始化
7.对象构造完毕,将对象地址(引用)赋值给 s 变量
(5)标准案例
class Student { private String name; private int age; public Student(){} public Student(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
成员变量赋值的方式:
class StudentDemo { public static void main(String[] args) { //方式 1 Student s1 = new Student(); s1.setName("小明"); s1.setAge(18); System.out.println(s1.getName()+"---"+s1.getAge()); //方式 2 Student s2 = new Student("小刚",19); System.out.println(s2.getName()+"---"+s2.getAge()); } }
运行:
4.代码块
(1)用{} 括起来的代码。
(2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率。 B:构造代码块 把多个构造方法中相同的代码可以放到这里, 每个构造方法执行前, 首先执行构造代码块。 C:静态代码块 对类的数据进行初始化,仅仅只执行一次。
(3)静态代码块 ,构造代码块 ,构造方法的顺序问题 ? 静态代码块 > 构造代码块 > 构造方法
static : 静态的意思,可以修饰成员变量和成员方法
特点:1.谈过static 变量修饰的变量是静态变量,所有的该类的对象共享静态变量
2.静态变量随着类的加载而加载(.class)优先于对象而存在的
3.静态的变量和静态的方法可以不用创建该类的对象,直接通过类名通过类名 . 变量名或 类名 . 方法名(实参列表)
4.不能在静态的方法中访问非静态的变量,在非静态的方法中可以访问静态的变量
特点2.静态变量随着类的加载而加载(.class)优先于对象而存在的
static 变量修饰的变量不放在栈中,放在静态编码区
特点3:静态的变量和静态的方法可以不用创建该类的对象,直接通过类名通过类名 . 变量名或 类名 . 方法名(实参列表)
报错(age)
特点 4.不能在静态的方法中访问非静态的变量,在非静态的方法中可以访问静态的变量
报错(age)
输出:50 (需要定义变量)
输出:杨过

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
关于提示框
如何在C++里插入提示框呢? 代码如下: #include<bits/stdc++.h> #include<Windows.h> using namespace std; int main() { MessageBox(NULL,"文字","标题",b+a); //eg: MessageBox(NULL,"Hello World","2333",MB_YESNO+32); return 0; }/*a: 16:叉叉 32:问号 48:感叹号 64:小写字母i 返回值: 确定:1 取消:2 放弃:3 重试:4 跳过:5 是:6 否:7 b: MB_OK 默认值。有一个确定。 MB_YESNO 有是和否。 MB_ABORTRETRYIGNORE 有放弃,重试和跳过 MB_YESNOCANCEL 有是,否和取消 MB_RETRYCANCEL 有重试和取消 MB_OKCANCEL 有确定和取消 */
- 下一篇
C# 连蒙带骗不知所以然的搞定USB下位机读写
原文: C# 连蒙带骗不知所以然的搞定USB下位机读写 公司用了一台发卡机,usb接口,半双工,给了个dll,不支持线程操作,使得UI线程老卡。 懊恼了,想自己直接通过usb读写,各种百度,然后是无数的坑,最终搞定。 现将各种坑和我自己的某些猜想记录一下,也供各位参考。 一、常量定义 private const short INVALID_HANDLE_VALUE = -1; private const uint GENERIC_READ = 0x80000000; private const uint GENERIC_WRITE = 0x40000000; private const uint FILE_SHARE_READ = 0x00000001; private const uint FILE_SHARE_WRITE = 0x00000002; private const uint CREATE_NEW = 1; private const uint CREATE_ALWAYS = 2; private const uint OPEN_EXISTING = 3; private...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程