类和对象:
类:抽象概念, 有共性的的一类产物
类中定义的是属性和方法,相当于一个模板,可以产生无数的对象,例如
类的成员
字段 、 方法 、 代码块 、内部类 、 接口
1、字段/属性/成员变量
在类中, 但是方法外部定义的变量. 这样的变量我们称为 “字段” 或 “属性” 或 “成员变量”;用于描述一个类中包含哪些属性
null 在 Java 中为 “空引用”, 表示不引用任何对象. 类似于 C 语言中的空指针. 如果对 null 进行 . 操作就会引发异常.
2、方法 (method)
就是我们曾经讲过的方法,用于描述一个对象的行为
方法中还有一种特殊的方法称为 构造方法
3、关键字static
修饰属性:java静态属性和类相关,和具体的实例无关,静态修饰
方法:如果在任何方法上应用 static 关键字,此方法称为静态方法。
1、静态方法属于类,而不属于类的对象。
2、可以直接调用静态方法,而无需创建类的实例。
3、静态方法可以访问静态数据成员,并可以更改静态数据成员的值。
修饰代码块只能运行一次
类的实体化
用类类型创建对象的过程,称为类的实例化
1 、类只是一个模型一样的东西,限定了类有哪些成员;
2.、一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量;
3、 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间。
对象:就是这一类实体化的表现
由类产生,多个对象可以由一个类实现
class Person {
public int num1;// 属性
public int a;
public static int count;
public String num2;
private String name ;
private int age;
public void func() { //方法
System.out.println("姓名:" + num1);
System.out.println("年龄:" + num2);
}
public void func2() {
int max = num1 + a ;
System.out.println(max);
}
}代码片
面向对象、面向程序
面向过程:注重的是过程,在整个过程中所涉及的行为,就是功能。
面向对象:注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来;面向对象是思考问题的一种思考方式,是一种思想。比如:概念与实例。理论与实践。名和实等等。
封装
什么叫封装?
<<代码大全>> 开篇就在讨论一个问题: 软件开发的本质就是对程序复杂程度的管理.,如果一个软件代码复杂程度太高, 那么就无法继续维护,如何管理复杂程度? 封装就是最基本的方法;在我们写代码的时候经常会涉及两种角色: 类的实现者和类的调用者.
封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了.
这样就降低了类使用者的学习和使用成本, 从而降低了复杂程度
private/ public 这两个关键字表示 "访问权限控制”
public: 修饰的成员变量或者成员方法, 可以直接被类的调用者使用.
private :修饰的成员变量或者成员方法, 不能被类的调用者使用
private 不光能修饰字段, 也能修饰方法
通常情况下我们会把字段设为 private 属性, 但是方法是否需要设为 public, 就需要视具体情形而定. 一般我们希望一个类只提供 “必要的” public 方法, 而不应该是把所有的方法都无脑设为 public
private String name ;
private int age;//定义属性
private void func3() { //定义方法
System.out.println("姓名:" + num1);
System.out.println("年龄:" + num2);
}
getter、setter
如果修改private所修饰的属性和方法,就需要用getter/setter方法
注意事项:
getName 即为 getter 方法, 表示获取这个成员的值.
setName 即为 setter 方法, 表示设置这个成员的值
当set方法的形参名字和类中的成员属性的名字一样的时候,如果不使用this, 相当于自赋值. this 表示当前实例的引用
this关键字
this表示当前对象引用(注意不是当前对象). 可以借助 this 来访问对象的字段和方法
只能放在第一行
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
构造方法
使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作
一、 new 执行过程:
为对象分配内存空间
调用对象的构造方法
二、语法规则:
1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
Person person = new Person();
Person person1 = new Person();
Person person2= new Person();
Person person3 = new Person();
Person person4 = new Person();
Person person5 = new Person();
三、注意事项:
如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
若类中定义了构造方法,则默认的无参构造将不再生成.
构造方法支持重载. 规则和普通方法的重载一致