捡起Java——第二天(续)
Java中的方法
首先我们先看一下一个常用的语句:System.out.println()。
想必这个语句大家都不陌生,其功能就是进行结果打印。那么这个语句中的三部分分别代表什么东西呢?
- System:这是一个系统类。
- println():这是一个方法。
- out:这是一个标准输出对象。
换句话说,其实这句话就是通过调用系统类System中的标准输出对象out下的方法println()。
那么可能会产生疑问,什么是方法呢?
用较为教科书式的说法就是Java方法是语句的集合,它们在一起执行一个功能。
- 是解决一类问题的步骤的有序组合
- 包含在类或者对象中
- 在程序中被创建,在其他地方进行引用。
而如果用我自己的话来说其实就是类似于python中的函数,C语言中的函数,只是换了个名称而已,但是实际上也就是为了简化某种功能将其包装为一个更简洁的存在而已,让我们能够更好的进行调用。
说完了这些,我们就来谈一谈方法的优点以及一些规则。
- 简短清晰
- 有利于程序维护
- 可以提高开发效率
- 提高重用性
方法的命名规则
- 方法的第一个单词的第一个字母小写,后面的单词第一个字母大写。
- 下划线用于区分名称的逻辑组件。
方法的定义
修饰符 返回值类型 方法名(参数类型 参数名)
{
方法体
……
return 返回值;
}
想必大家对上述其实都不算陌生,那么我也就不在过多赘述了。
方法调用
Java支持的调用方式有两种,是根据方法是否返回值来进行选择的。
- 如果存在返回值,那么我们就需要根据方法的返回类型,使用一个同类型的变量进行值的接收。
- 如果不存在返回值,那么在方法的返回类型就一定设置为void,也不会存在return语句。
参数的传递方式
在进行参数的传递的时候一定要注意的就是顺序问题,千万不要传错了。
方法的重载
通常情况下,一种方法的参数只能是固定的数据类型,就比如max函数,只可以是int类型的数据,那么如果我们需要进行float类型的max函数,就必须重新定义一个方法,这样存在很大的不便捷性,因此,方法重载就为我们提供了更好的办法解决这种情况。我们创建另一个方法名字相同而参数不同的方法,通过这种方式,只要我们在调用方法时传入的参数类型不一致,那么就会根据方法签名来调用不同参数类型的方法。
但是重载的方法必须拥有不同的参数列表,不能仅仅根据修饰符或者返回类型的不同来重载方法。
命令行参数的使用
如何在命令行运行程序的时候传递消息,我们就需要依靠main函数后面的参数String[] args,其实现方式和C与Python的命令行调用类似,有兴趣的读者可以自行查找资料查看,这里就不再过多赘述。
构造方法
当对象被创建的时候,就需要使用构造方法来初始化该对象。构造方法和它所在的类名一致,但是构造方法不存在返回值。
其目的主要是对类中的实例变量进行复制或者执行其他必要步骤从而创建完整的对象。
而在Java中,其实所有类都默认存在构造方法,其访问修饰符和其所属类的访问修饰符一致。但是只要我们定义了自己的构造方法,那么就会覆盖掉默认的方法。
比如:
class MyClass{
int x;
MyClass
{
x = 10;
}
}
对x的访问和调用:
public static void main(String[] args)
{
Myclass m1 = new Myclass();
System.out.println(m1.x);
}
如果存在参数的传入,我们可以这样对变量进行初始化:
class My class{
Myclass(int i)
{
x = i;
}
}
public static void main(String[] args){
Myclass m1 = new Myclass(10);
System.out.println(m1.x);
}
可变参数
Java支持传递同类型的可变参数给一个方法,声明为:
typeName... 变量
就是在参数类型后添加省略号,但是在方法中只能指定一个可变变量,且必须是方法的最后一个参数。
具体实现:
public class VarargsDemo {
public static void main(String[] args) {
// 调用可变参数的方法
printMax(34, 3, 3, 2, 56.5);
printMax(new double[]{1, 2, 3});
}
public static void printMax( double... numbers) {
if (numbers.length == 0) {
System.out.println("No argument passed");
return;
}
double result = numbers[0];
for (int i = 1; i < numbers.length; i++){
if (numbers[i] > result) {
result = numbers[i];
}
}
System.out.println("The max value is " + result);
}
}
(注:摘自菜鸟教程)
finalsize()方法
Java中允许定义一个在对象被垃圾回收器进行回收之前调用的方法,叫做finalsize(),其功能是为了清除回收对象的。
比如可以用来确保对象打开的文件已经被关闭了。
而在finalsize()方法中需要主域的是必须指定在对象销毁时候执行的操作。其一般格式为:
protected void finalsize()
{
//这部分为需要进行的操作(终结代码)
}
使用protected的目的是为了确保该方法不会被类之外的代码进行调用。
值得注意的是,其实JVM可以自动完成内存回收的任务,但是通过创建该方法可以实现编写者自定义销毁操作。
示例代码:
public class FinalizationDemo {
public static void main(String[] args) {
Cake c1 = new Cake(1);
Cake c2 = new Cake(2);
Cake c3 = new Cake(3);
c2 = c3 = null;
System.gc(); //调用Java垃圾收集器
}
}
class Cake extends Object {
private int id;
public Cake(int id) {
this.id = id;
System.out.println("Cake Object " + id + "is created");
}
protected void finalize() throws java.lang.Throwable {
super.finalize();
System.out.println("Cake Object " + id + "is disposed");
}
}
打印结果:
$ javac FinalizationDemo.java
$ java FinalizationDemo
Cake Object 1is created
Cake Object 2is created
Cake Object 3is created
Cake Object 3is disposed
Cake Object 2is disposed
在本章节内容还是涉及基础部分的知识,主要目的还是为了夯实基础,毕竟连Java最基础的内容都不清楚对于后续的学习也会产生较大的影响。
如若文中存在笔误或者理解不正确的地方请斧正,对于Java,小编也是重新学习,以前对Java也只是简单的学习了一番,后面会逐渐深入学习。后续会主要推出关于Web安全(主要是Web攻击渗透)、python爬虫等脚本编写、以及Java从浅入深的学习(可能会逐渐对Java安全进行深入学习)。如果有你感兴趣的内容请多多关注,大家一起学习,共勉。
参考教程:菜鸟教程