概述
面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
面向过程是关注过程的编程模式, 需要考虑解决问题所需要的步骤,然后用函数把这些步骤一步一步实现。面向对象是关注对象的编辑模式, 把现实中的事物都抽象为“对象”, 每个对象是唯一的且都可以拥有它的属性与行为, 通过调用这些对象的方法、属性去解决问题。
面向对象的优势在于可扩展性,可维护性,灵活性,使程序耦合度降低, 缺点是性能比面向过程相对较差。
构造方法
构造方法是每个类都有的,并且用于创建该类的对象, 如果该类中没有编写构造方法,那么编译器会自动帮我们生成一个无参构造; 如果该类中编写了构造方法,不管写的是不是有参,则默认的无参构造都不再自动生成. 所以当我们在写有参构造的时候,可以手动编写一个无参构造
语法: 修饰符 方法名/类名(参数列表){方法体}
构造方法的修饰符只使用权限控制即可,不能使用static构造方法, 而且没有返回值(可以通过有无返回值区分构造方法和成员方法)
构造方法的方法名必须和类名一致
类和对象
类: 对一类事物客观描述的标准
对象: 一切皆对象,是具体的个体符合类标准的个体
根据不同属性划分为不同的类, 根据不同的属性值划分不同的对象
对象的使用
可直接作用在变量上
未初始化的对象保存的是其内存地址.
public class Student{
String name;
int age;
String no;
}
Student s1 = new Student();
s1.name ="张三";
s1.age = 19;
s1.no = 10001;
JavaBean
JavaBean是—种JAVA语言写成的可重用组件,它是—个类。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java类可以通过自省机制(反射机制 )发现和操作这些JavaBean的属性。
用作JavaBean的类必须具有—个公共的、无参数的构造方法。
JavaBean的属性与普逼Java类的属性的概念不一样, JavaBean的属性是以方法定义的形式出现的.
用于对属性赋值的方法称为属性修改器或setter方法,用于读取属性值的方法称为属性访问器或getter方法。属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写。属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母要改为大写
JavaBean的属性名是根据setter方法与getter方法的名称来生成的,setter方法或getter方法中除去前缀set 和 get后的部分即为属性名,但属性名的首字母必须小写。
就是公共的类,私有化的属性,公共的获取属性的方法(getter/setter),公共的无参构造
public class User {
// 用户名
private String username;
// 密码
private String password;
// 昵称
private String nickname;
// 构造方法
public User() {
}//无参构造
public User(String username, String password) {
// 有参构造 用于创建对象时 初始化成员变量的值
this.username = username;
this.password = password;
}
public User(String username, String password, String nickname) {
// 全参构造
this.username = username;
this.password = password;
this.nickname = nickname;
}
// getters and setters 用来获取和修改私有化成员变量的
public void setUsername(String username) {
// 成员方法中可以直接访问成员属性
// this 就是 当前对象,谁调用这个方法,this就是谁
if (username == "123") {
username = "sb";
}//能够进行限制
this.username = username;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
常见异常
java.lang.NullPointerException 空指针异常, 是运行时异常
User user = new User("admin", "root");
user = null;
// java.lang.NullPointerException 空指针异常, 是运行时异常
// 使用null 访问成员属性,就会出现空指针异常
System.out.println(user.getUsername());
对象调用静态属性
static int a = 22;
int b = 33;
public static void main(String[] args) {
int a = 1;
OOP_07 o = new OOP_07();
System.out.println(o.b);
// 可以通过对象调用静态属性
// 调用静态变量,因为在编译时,会自动把o换成对应的类名去调用
System.out.println(o.a);
// 调用静态变量
System.out.println(OOP_07.a);
// 调用局部变量
System.out.println(a);
}
this
this是对象中第一个成员变量,保存了当前对象的内存地址. 在成员方法中,谁调用的这个成员方法,this就代表谁. 作用有用在成员方法/构造方法中,区分同名的成员变量和局部变量; 用在构造方法中,重载调用当前类中其他的构造方法; 返回this,用于链式调用.
this不能出现在静态上下文中.
static
static是修饰符,用来标注静态属性,如果没有使用static,则为成员属性
静态语句块不能调用,在程序加载的时候自动调用执行,并且只执行一次(在main方法之前)
所有的静态属性都是在加载时初始化, 访问一个类的静态属性的时候,会加载该类到内存中, 由于在整个程序生命周期中,类只会被加载一次,所以静态语句块只会执行一次.并且在最开始执行
实例语句块是没有static修饰的语句块, 可以等同看做没有名字的成员方法. 实例语句块在创建对象时,立刻执行,并且是在构造方法之前执行,并且每创建一个对象,就会执行一次