一直感觉方法和函数没什么区别,这次特地查了查:
结果都是方法与函数其实一样的意思,只是在C语言中习惯叫函数,而在Java中习惯叫方法,不管怎么叫,都是指同一个意思。
方法(或函数) 必须在类中。方法的定义:
<修饰符><返回值类型><方法名> (<参数类型> <参数名>){…}
通常你看到一个带()的就是方法了,例如: aa.XXX(); 是指调用实体aa的XXX()方法。
看到aa.XXX()我又想到一个问题,为什么有的要new,而有的直接’.’。
一番查询,原来这里有静态方法(static修饰)和非静态方法有关。
- 静态方法,是使用static关键字修饰的方法,又叫类方法,属于类的。在实例化对象之前就可以通过类名.方法名调用。(类里的静态变量也可以类名.变量名调用)
- 非静态方法,是不含有static关键字修饰的普通方法,又称为实例方法,成员方法。属于对象的,不属于类的。必须通过new关键字创建对象后,再通过对象.方法或对象.变量调用。
- 静态方法和非静态方法的区别
- 普通方法无所畏惧。
- 在静态方法中,不能调用非静态方法;不能引用成员变量(即,没有static修饰的变量);不能使用super和this关键字。
- 静态方法的生命周期跟相应的类一样长,静态方法和静态变量会随着类的定义而被分配和装载入内存中。一直到线程结束,静态属性和方法才会被销毁;非静态方法的生命周期和类的实例化对象一样长,只有当类实例化了一个对象,非静态方法才会被创建,而当这个对象被销毁时,非静态方法也马上被销毁。
- 注意:既然有静态方法(变量),那么也有静态类,静态类只能是内部类
这里很多引用这篇文章https://blog.csdn.net/SeniorShen/article/details/100058364
函数中还有构造函数,有什么用?
构造函数是java函数中一种特殊的函数,定义方法为函数名与类名完全相同,比如我们定义一个学生类,定义其构造函数。
class Student{ //学生类
String id;
String name;
int age;
public Student(){} //这个就是构造函数,也是无参构造
public Student(String id,String name,int age){ //这个是有参构造
this.id = id;
this.name = name;
this.age = age;
}
public Student(String id,String name){ //这个是有参构造的重载
this.id = id;
this.name = name;
}
}
注意点:
(1)构造函数名与类名完全相同
(2)构造函数无返回值类型
(3)构造函数可以有参数也可以没有参数,可以有一个参数或者多个参数
(4)可以对构造函数进行函数重载(在同一个类中定义多个函数名相同,参数不同的函数叫函数重载)
(5)当我们定义类后不声明任何构造函数,则java虚拟机会帮我们创建一个空参构造。假如我们声明了一个有参构造,java虚拟机就不会帮我们创建一个空参构造,此时我们想用空参构造创建一个对象,那么就必须在类中声明一个空参构造。
一般我们在创建实例类的时候,通常都会写一个无参和一个有参构造,为什么,不是会默认创建一个无参吗?这是为我们在创建对象时对对象设置初值(new a()或者new a(“初值”))所准备。
当然,上边大家肯定都学过,主要是下边的
- 构造函数有什么作用
- 创建对象。使用
new 构造函数名()
来创建对象。 - 对对象属性设置初值。构造函数创建对象后,可以对对象属性设置初值,无参构造函数设置的是null或者0;有参构造设置的是相应的初值。
- 子类与父类的构造函数
构造函数不能继承,只能调用。子类构造函数中第一句有一个隐藏的super()语句,该语句是调用父类的空参构造函数。如果父类有一个有参构造,那么子类必须声明一个有参的super()函数,否则会报错。 - 构造函数私有化
private Student(){}
当构造函数私有后,我们不能在外部类中实例化这个类,也就是不能创建这个类的对象,只能在本类内部创建对象,然后对外提供返回对象的方法,此时提供的对象是唯一的。例如:
private Student(String id,String name){
this.id = id;
this.name = name;
}
private static Student stu = new Student("1","张三");
public static Student getStudent(){
return stu;
}
public class Test{
public static void main(String[] args){
System.out.println(Student.getStudent());
}
}
这里很多引用这篇文章https://baijiahao.baidu.com/s?id=1632060092493911390&wfr=spider&for=pc
私有构造函数,我又想到有什么用?
可以防止该类在外部被实例化,像上边在其他的外部类中去实例化Student时,只能根据静态方法getStudent来获取类的实例且只能获取一个实例,常见的应用是工具类和单例模式。
那静态构造函数呢?
- 静态构造函数自动被调用,不能被显式调用,在程序中,用户无法控制何时执行静态构造函数。
- 静态构造函数既没有访问修饰符,也没有参数。
- 一个类的静态构造函数在这个类的任何实例被创建前执行。
- 一个类的静态构造函数在类的任何静态成员被引用前执行。
- 一个类的静态构造函数从不会被执行一次以上。
- 一个类的静态构造函数在它的所有派生类的静态构造函数执行之后执行。
具体参考:静态构造函数https://blog.csdn.net/chunxia75qin/article/details/11849143
本来准备研究研究设计模式的,但是发现有些概念不是很清楚(笑哭)。