类和对象的概念:在Java中一切皆对象,一切都围绕对象进行,找对象、建对象,用对象等。
类:把具有相同属性和行为的一类对象抽象为类。
对象:某个类的一个实体,当有了对象后,这些属性便有了属性值,行为也就有了相应的意义。
类和对象的定义与使用:
创建类的方法:
class 名称 {
}
创建具体对象:
类名称 引用名称 = new 类名称()
Person person = new Person()
示例:
static 关键字:
使用static后,该类所有对象共享该属性,可以通过类名直接访问,没有对象也可访问。
例如:
关键问题:
1.能否在一个方法中定义一个static变量?
答:在方法中定义的变量在栈中存储,而static变量是在方法去中存储,一个变量不可能即在栈中存储又在方法区中存储。
2.静态方法能否访问成员变量和成员方法?
答:不能。静态方法可以直接通过类名来访问,没有对象也可以访问。
而成员变量和成员方法需要通过类中的对象来进行访问。
二者矛盾!
3.成员方法能否访问静态变量和静态方法?
答:能。成员方法要通过对象进行访问。
静态变量和静态方法不需要通过对象就可以访问。
二者逻辑不冲突!
4.普通类能否用static关键字修饰?
答:不能。类定义出来是要产生对象的,而static修饰一个类,这个类不需要对象就可以调用,两者矛盾。
面向对象三大特征:封装、继承、多态
而类和的对象阶段,主要研究的是封装。
四大访问修饰符:
1.private:被private修饰的修饰的属性和方法只在当前类可见,出了类的{ },对外就隐藏,外部不知道其存在。
2.default:
3. protected:用在继承。
4. public:谁都可以看到,对于一个包中不是什么秘密,但对于其他就是隐私。
private关键字不能修饰一个类,因为定义类就是为了给外部使用,而private修饰使得外部根本不知道其存在。
构造方法:
构造方法是类中非常特殊的一类方法,使用关键字new 实例化对象时实际上调用的就是该类的构造方法。
语法规则:
1.方法名与类名相同。
2.构造方法没返回值。
3.一个类中至少存在一个构造方法,若没有,编译器会自动生成一个无参构造。
例如:
若没有定义构造方法,编译器会自动生成一个无参构造。
例如:
若类中已经有了构造方法,默认的无参构造就不再生成。
例如:
构造方法的重载:
构造方法是为了给类中的成员赋值的,而重载只是参数上的不同。
例如:
问题:能否用实例化对象调用它的构造方法?
答:不能。构造方法是产生对象的,而对象又调用自己的方法,矛盾。
this关键字:
一般用于成员变量与形参名相同的情况
例如:
这时候就得用this来解决:
代码块:
代码块:指的是使用{ }括起来的一段代码,称为代码块。根据定义的代码块的位置以及关键字的不同分为以下四种代码块。
1.普通代码块:
public static void main(String[] args) {
//普通代码块
}
2.成员代码块:
定义在类中,不加任何修饰符的代码块,又称为构造块。
public class Test {
public static void main(String[] args) {
Student student1 = new Student();
}
}
class Student{
String name;
{
//构造块
System.out.println("Student类的构造块");
}
public Student(){
System.out.println("Student类的无参构造");
}
}
3.静态代码块:
定义在类中,使用static修饰,在类中只加载一次,与对象无关。
public class Test {
public static void main(String[] args) {
Student student1 = new Student();
Student student2 = new Student();
}
}
class Student{
String name;
{
//构造块
System.out.println("Student类的构造块");
}
public Student(){
System.out.println("Student类的无参构造");
}
static {
//静态代码块
System.out.println("Student类的静态代码块");
}
}
此时可以看到静态代码块先被执行。
4.同步代码块(不涉及此类知识)