最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
public class Student {
private String name; // Object variable
private int age; // Object variable
private String studentId; // Object variable
private static int numberOfStudents = 0; // Class variable
public Student(String name, int age, String studentId) {
this.name= name;
this.age= age;
this.studentId= studentId;
// Increase the number of students whenever an object is created
numberOfStudents ++;
}
public static int getNumberOfStudents () {
return numberOfStudents ;
}
}
该代码与上一Student
类的区别只是一个新static
方法。在第一个示例中,我们使用名称来引用public
类变量numberOfStudents
,但是这次我们制作了类变量private
,并使用一种public static
方法指向该变量。为了测试此代码,我们将使用以下代码:
package com.seckintozlu.article;
public class Program {
public static void main(String args[]) {
System.out.println("Number of students in the beginning: " + Student.getNumberOfStudents());
// Create two student object
Student student1 = new Student(“Obi-Wan Kenobi”, 19, “2010001”);
Student student2 = new Student(“Anakin Skywalker”, 16, “2010002”);
int numberOfStudents = Student.getNumberOfStudents();
System.out.println("Number of students: " + numberOfStudents);
}
}
此代码将生成以下输出:
Number of students in the beginning: 0
Number of students: 2
由于getNumberOfStudents
method是static
,因此可以在不从Student
类创建对象的情况下调用它。如果您已经有一个从Student
类创建的对象,则可以使用对象引用来调用getNumberOfStudents
(或任何static
方法),但是建议使用类名以提高可读性。同样,在访问static
变量时,我们也可以使用对象引用,但这会使您的代码可读性降低。
关于static
方法要了解的最重要的事情是:我们无法引用方法中的非static
元素static
。如果numberOfStudents
示例中的字段不是static
变量,则在编译时会收到错误消息。同样,我们不能static
在static
方法内调用非方法。让我们举个例子:
package com.seckintozlu.article;
public class Student{
private String name; // Object variable
private int age; // Object variable
private String studentId; // Object variable
private static int numberOfStudents = 0; // Class variable
public Student(String name, int age, String studentId) {
this.name = name;
this.age = age;
this.studentId = studentId;
// Increase the number of students whenever an object is created
numberOfStudents++;
}
public int findNumberOfStudents() {
return numberOfStudents;
}
public static int getNumberOfStudents() {
return findNumberOfStudents();
}
}
我们增加了一个新的非static
命名方法findNumberOfStudents
的Student
类。它仅返回numberOfStudents
变量的值。请在这里注意:我们不能static
在static
方法中引用非元素。但是这里我们做相反的事情,我们正在以完全有效static
的非static
方法访问字段。但是,static getNumberOfStudents
方法正在尝试调用findNumberOfStudents
not static
。根据static
我们刚刚提到的访问规则,这是无效的。当我们尝试编译此类时,将得到如下错误:“ Cannot make a static reference to the non-static method findNumberOfStudents() from the type Student
”如果我们尝试引用一个非static
字段(例如“ name
”),则会收到相同的错误消息。
让我尝试解释该规则背后的原因。我们知道static
变量和方法与对象无关。这意味着即使没有创建对象,我们也可以调用static
方法并为static
变量赋值。但是,非static
元素只能在创建对象时存在。基于此,如果我们尝试static
在static
方法内部引用一个非变量,那么我们如何知道我们正在引用哪个对象的字段?那时,可能根本没有任何对象。true
当我们在static
方法内部调用非方法时,也会使用此语句static
。因此,我们只能static
在static
方法内部引用元素。但是,我们可以引用static
非static
方法中的元素,因为static
元素已经在任何对象之前创建。
当我们在尝试调用一个非static
方法时收到错误消息时static
,使另一个方法也static
可以工作,但这可能不是一个好主意。如果最终创建了很多static
方法,请停下来想一想是否需要使用方法static
。我们将在本文结尾处对此进行说明。现在,让我们看看static
关键字的另一种用法。
静态代码块
Static
代码时钟用于为static
变量分配初始值。这些也称为“ static
初始化器”。变量加载到存储器中Static
后立即执行块static
。JVM保证static
在为该类创建的对象之前执行代码块。
package com.seckintozlu.article;
import java.util.Random;
public class StaticInitializer {
private static int array[];
private static int length = 10;
static {
array = new int[length];
Random rnd = new Random();
for(int i=0; i < length; i++)
array[i] = rnd.nextInt(100);
}
}
查看上面的代码,我们正在创建带有随机分配值的整数数组。使用static
代码块,一旦创建了“ array”变量,数组就会被随机整数填充。还有一件事,我们也无法访问代码块static
内的非元素static
。由于static
块很少被使用,我不想进一步详细介绍。
静态导入
我们已经知道我们static
使用类名引用方法。例如,在Java中,包中的Math
类java.lang
充满了static
方法,我们需要使用调用这些方法Math.nameOfMethod()
。使用static
导入,我们只能通过使用方法名称来调用它们。让我们看看它的用法:
package com.seckintozlu.article;
import static java.lang.Math.*;
public class Program {
public static void main(String args[]) {
System.out.println("Square root 25: " + sqrt(25));
System.out.println("Log(100): " + log(100));
System.out.println("Pi: " + PI);
}
}
如您在代码中所见,将static
import放入代码中时,我们可以引用static
方法和变量,而无需使用类名。通常情况下,我们会使用Math.sqrt()
和Math.PI
如果我们没有static
进口。
何时使用静态变量?
决定使用类变量或对象变量可能会使刚开始使用Java或任何其他具有“ static
”功能的语言进行编程的人感到困惑。实际上,差异确实很明显。类变量(静态变量)对于该类的每个对象都是通用的,并且只有一个实例。另一方面,对象变量属于对象,其值根据对象本身而变化。在student
我一开始就给出的类的第一个示例中,您可以很容易地看出,每个Student
对象必须为诸如name
和这样的变量具有一个单独的值studentId
。
另一方面,由于numberOfStudents
变量保存student
创建的对象数,因此它必须具有单个值。换句话说,它必须是一个static
变量。我们可以将其存储为对象变量,但是在这种情况下,每个对象将具有一个单独的副本,并且当其值更改时,我们将需要更新所有它们。如您所知,这不是处理此问题的适当方法。
何时使用静态方法?
这是一个比上一个更困难的问题。在面向对象的编程语言中,对象具有行为和状态。我们拥有的变量指定状态,方法表示行为。如果方法取决于对象的状态,或者受对象的状态影响,则该方法必须是对象方法(非static
)。如果它完全独立于状态,换句话说,如果对象的状态不影响方法将生成的结果,则可以将其定义为static
方法。
最后
对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
再分享一波我的Java面试真题+视频学习详解+技能进阶书籍
笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**