1.类和对象的初步认识
面向对象的概念:
1.面向对象(opp)是思考问题的一种思考方式,是一种思想。比如:概念与实例。理论与实践。名和实等等。
2.类就是一类对象的统称。对象就是这一类具体化的一个实例。
3.面向对象的好处:将复杂的事情变简单了,只要面对一个对象就行。
总结:面向对象就是用代码(类)来描述客观世界的事物的一种方式,一个类主要包含一个事物啥的属性和行为.
2.类的三大特性
1.封装 2.继承 3.多态
封装:封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了.这样就降低了类使用者的学习和使用成本, 从而降低了复杂程度
继承:可以在现有类的基础上无需重写,扩展类的功能。
多态:允许将子类类型的指针赋值给父类类型的指针。(允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。)
3. 类和类的实例化
类就是一类对象的统称。对象就是这一类具体化的一个实例。可以说类相当于一个模板,对象是由模板产生的样本。一个类,可以产生无数的对象。
基本语法:
// 创建类
class <class_name>{
field;//成员属性
method;//成员方法
}
//实例化对象
<class_name><对象名> = new <class_name>();
类的实例化:
用类类型创建对象的过程,称为类的实例化
a) 类只是一个模型一样的东西,限定了类有哪些成员.
b)一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
注意事项
1.new 关键字用于创建一个对象的实例.
2.使用 . 来访问对象中的属性和方法.
3.同一个类可以创建对个实例.
4.类的成员
类的成员可以包含以下:字段、方法、代码块、内部类和接口等。
5. 构造方法
语法规则
1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
注意事项
1.如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
2.若类中定义了构造方法,则默认的无参构造将不再生成.
3.构造方法支持重载. 规则和普通方法的重载一致.
6. 认识代码块
普通代码块:定义在方法中的代码块.
public class Main{
public static void main(String[] args) {
{ //直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x1 = " +x);
}
int x = 100 ;
System.out.println("x2 = " +x);
}
}
// 执行结果
x1 = 10
x2 = 100
构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。
class Person{
private String name;//实例成员变量
private int age;
private String sex;
public Person() {
System.out.println("I am Person init()!");
}
//实例代码块
{
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.show();
}
}
// 运行结果
I am instance init()!
I am Person init()!
name:bit age: 12 sex: man
注意事项: 实例代码块优先于构造函数执行。
静态代码块:
使用static定义的代码块。一般用于初始化静态成员属性。
class Person{
private String name;//实例成员变量
private int age;
private String sex;
private static int count = 0;//静态成员变量 由类共享数据 方法区
public Person(){
System.out.println("I am Person init()!");
}
//实例代码块
{
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}
//静态代码块
static {
count = 10;//只能访问静态数据成员
System.out.println("I am static init()!");
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();//静态代码块是否还会被执行?
}
}
注意事项
静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。
静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。