类的方法
1.方法
- 方法是完成特定功能的、相对独立的程序段。方法一旦定义,可以在不同的程序中多次调用。
- 方法的设计要遵循功能单一原则,即一个方法只干一件事。
2.实例方法
-
实例方法(也叫做 non-static )包括属性和方法,也称为实例变量和实例方法。
-
成员方法包括
实例方法
和static方法( 静态方法)
。 -
实例方法,因为非本类/本类非实例方法中使用时需要使用类的对象(实例)才能调用
-
实例方法在同一个类中可以相互调用
public class FunctionDemo { public void say() {
System.out.println("say()");
}
}
public class FunctionTest {
public static void main(String[] args) {
//创建FunctionDemo的实例/对象
FunctionDemo demo = new FunctionDemo();
//对象.方法()调用
demo.say();
}
}
3.实例变量
-
实例变量,是声明在方法之外,类里面的变量。
-
实例变量的作用域:
就近原则,实例变量的作用域是整个类,在这个类的所有实例方法中都可以访问。实例变量可以在定义
的时候不初始化值,因为实例变量在实例化对象后会有默认值,默认值根据实例变量的类型决定。
4.实例变量与局部变量的区别
- 作用域不同(局部变量的作用域仅限定义于他的方法中)
- 有无默认值(实例变量有(看数据类型),局部变量没有默认值)
- 在同一个方法中不允许出现同名的局部变量,在不同的方法中可以有同名的局部变量
- 一个类中可以有同名的局部变量和实例变量,在方法中优先使用局部变量
5.构造方法
5.1构造方法 是一个特殊的方法
- 构造方法没有返回值,也不是 void
- 构造方法的方法名要和类名相同,包括大小写
- 构造方法分为有参构造和无参构造(默认构造),它们之间是重载关系。
- 一般有参构造是为
实例变量初始化
的。 - 如果不自定义构造方法,那么 Java 会自动给类写一个 public 无参构造。如果显式的声明了构造方法(不管是否有参数) Java 都不会给这个类生成无参构造。
[访问修饰符] 方法名([参数列表]){ //方法头
//方法体
}
5.2构造方法的使用
- 构造方法是对象初始化(实例化)时调用的,也就是说是 new 对象时调用的
public static void main(String[] args) {
Student stu = new Student();
stu.name = "李四";
System.out.println(stu.name);
Student stu1 = new Student("张三",'男',20);
System.out.println(stu1.name);
}
6.static方法
6.1 static
方法的调用
- #### 使用 static 修饰的方法叫做 static (静态)方法,它属于类,所以也叫做类方法。
public class Demo{
public static void add(int num, int num1){
// 省略代码
}
}
- #### 对于 static 方法的调用,我们可以使用 类名.方法名 直接调用,也可以使用 对象.方法名 调用。
Demo.add(1, 2);
// 直接使用 类名调用 Demo demo = new Demo();
demo.add(1, 2);
// 对象调用
- #### 虽然对于 static 方法而言,两种调用方式都可以,但是我们要求大家使用第一种方式也就是直接使用类名来调用,因为它是属于类的。如果你使用第二种方式调用,会受到鄙视的。
6.2 static方法的生命周期
- #### static 方法在类被加载的时候就加载了(并不意味着要执行),而且之加载一次。实例方法在对象初始化的时候加载。
6.3实例方法和static方法的区别
-
相同点:都是属于成员变量
-
不同点:
- 由于 static 方法比实例方法的声明周期长,所以在一个类中实例方法可以直接调用 static 方
法。而 static 方法不能直接调用实例方法。
-
static 方法中不能够使用实例变量,而实例方法可以。
-
static 方法中不能够使用 this
7.this
-
哪个对象的 this 就代表当前对象。也就是说 谁调用就是谁 。
-
this 其实是一个引用,对自身的一个引用。所以 this 能调用实例变量、实例方法、构造方法、类变量、类方法。不能调用局部变量。
-
不推荐使用 this 来调用类变量或类方法。在本类中可以直接调用类变量和类方法,在其他类中使用 类 名.类变量/类方法 调用。
8.初始化
8.1实例初始化
-
在类中会存在一个或多个 {} 代码块,它的作用是初始化类的实例变量。它里面可以写多行代码,也可以调用方法。
-
如果一个类中有多个实例初始化块,执行顺序是先声明先执行。
public class Demo{ // 实例初始化
{
// 代码块
}
}
8.2static初始化
-
static 初始化和实例初始化类似,作用是初始化 static 变量。只在类第一次加载的时候执行。
public class Demo{ // static初始化
static{
// 代码块
}
}
9.类的成员不包括一下几个
-
构造方法
-
实例初始化
-
static 初始化
10.实例化对象时执行顺序
public class Demo {
{
System.out.println("实例初始化");
}
static {
System.out.println("static初始化");
}
public Demo() {
System.out.println("构造方法");
}
}
- #### 输出结果如下:
static初始化
实例初始化
构造方法
ps: static在类的加载的时候就在进行加载了,实例初始化在定义对象时候加载类中所有的属性和方法,然后才使用构造函数创建对象。所以他们的执行顺序为:static --> 实例初始化 --> 构造方法
11可变参数 int ...nums
-
参数中可以有一个或多个同一类型的参数
-
在一个方法中最多只可以存在一个可变参数
-
在有可变参数的时候,其他方法也有满足参数的方法,按准确度高的使用(先用可以确定的方法,没有在使用可变参数)
public void add(int... nums) { // 使用方式和数组一样
System.out.println("add(int... nums)");
}
12.菲波那切数列
-
1,1,2,3,5,8,...每一项等于前两项之和
public int add(int num) { if(num == 1 || num == 2) {
return 1;
}else {
return add(num - 1) + add(num - 2);
}
}
public static void main(String[] args) {
// 斐波那契数列 1 1 2 3 5 8 13 21
for (int i = 1; i < 11; i++) {
System.out.println(new DemoTest().add(i));
}
}
总结:
今天进入了面向对象,才算真的进入了Java的核心知识,对于老师讲的数组和对象String的内存解析感觉十分的生动,就是最后String的内存解析还是有点不是很了解,然后今天复习了一下前几天的知识点。
近期评论