Java笔记(面向对象)

面向对象

1.概述

​ 面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

​ 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

该内容引用于:https://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/2262089?fr=ge_ala

2.面向对象和面向过程

面向过程:侧重分步骤

面向对象:侧重分模块

面向对象优点:维护简单,可扩展性,代码复用性

3.构造方法

  1. 如果该类中没有写构造方法,则有一个默认无参的构造方法

  2. 一旦我们编写了构造方法,则默认的构造方法不再提供

  3. 构造方法没有返回值,并且连void都没有

  4. 构造方法的方法名必须和类名一致

  5. 构造方法不需要我们进行调用,当创建对象时会自动调用构造方法进行数据初始化

  6. 语法:权限控制修饰符 方法名(参数){方法体}

    例:public Code(){};//无参构造

4.类和对象

对象

  1. 内存角度:封装数据的一种形式

  2. 代码角度:new的一个类的实例对象

    Star st1=new Star(18);

  3. 人类认知角度:具体的个体就是对象,一切皆对象

类:对某个实物进行的客观描述

类就是根据某个事物,抽象出来的属性封装

对象是属性值的封装,代表某类的一个个体

根据不同的属性,封装不同的类

根据不同的属性值封装不同的对象

public class Student {
		int id;//学号
		String name;//姓名
		char sex;//性别
		String add;//住址
		public Student(int id, String name, char sex, String add) {
			this.id = id;
			this.name = name;
			this.sex = sex;
			this.add = add;
		}
}

5.静态变量和成员变量的区别

​ 如果该属性是类对象共有的属性和值,定义为静态变量
​ 如果该属性是类对象共有的属性,值可能不一样,定义为成员变量
​ 如果该方法中有成员属性使用(直接使用,不需要对象),则该方法为成员方法(静态方法中不能直接使用成员属性)
​ 如果该方法中不需要有成员属性使用,则该方法为静态方法

6.实例化

​ 数据类型 变量名 = 值;
​ 类,数组,接口
​ 创建一个引用类型变量,保存一个类对象

Student s1 = new Student(10001,"张三1",'男',"石家庄");

在这里插入图片描述

  1. 相关类载入方法区
  2. new 会在堆内存开辟内存空间
  3. 调用构造方法,在栈内存开辟栈帧,执行沟通方法对堆内存空间的值进行初始化赋值
  4. 构造方法执行完之后,构造方法弹栈,把堆内存地址,赋值给变量s1

7.对象使用

创建一个引用类型变量,保存一个类对象

Student s1 = new Student(10001,"张三1",'男',"石家庄");

Student s2 = new Student(10002,"张三2",'男',"石家庄");

对象.属性

对象.方法(参数)

修改 对象直接的数据,相互不影响,修改s1 不会影响到s2,因为成员属性是对象独立保存的

s1.name = "李四";

查询

System.out.println(s1.name);

System.out.println(s2.name);

8.Bean

在这里插入图片描述

为对象定义属性(私有)和get,set方法的类叫Bean

public class User {
	private String username;
	private String password;
	private String nickname;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		//当局部变量和成员变量名相同时,可以用this区分
		this.username = 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;
	}
	//全参构造
	public User(String username, String  password, String nickname) {
		super();
		this.username = username;
		this.password = password;
		this.nickname = nickname;
	}
	//无参构造
	public User() {
		super();
	}
}

9.常见异常

Exception in thread “main” java.lang.NullPointerException

// 创建用户对象
User user = new User("admin", "root", "管理员");
System.out.println(user.getUsername());
user = null;
//  java.lang.NullPointerException
// 空指针异常 : 使用null值,访问成员属性时,会出现空指针异常,即找不到对象
System.out.println(user.getUsername());

10.对象调用静态属性

Star st1=new Star(18);
st1=null;
//虽然是null,但是可以访问静态变量,因为静态变量不在堆内存
System.out.println(st1.i);
Star st2=new Star(16);
Star st3=new Star(17);
//成员变量修改后,多个对象互不影响
st2.age=19;
System.out.println(st2.age);
System.out.println(st3.age);
//静态变量修改后,所有对象下的静态变量都会被修改
//如果是对象调用的静态属性,则在编译后会把对象转化为对应的类名去调用
st2.i=0;
System.out.println(st2.i);
System.out.println(st3.i);
System.out.println(Star.i);
class Star{
	int age;
	static int i=6;
	public Star(int age){
		this.age=age;
	}
}

在进行反编译后变为:

Star.i = 3;
System.out.println(Star.i);
System.out.println(Star.i);
System.out.println(Star.i);

对象也变成了对应的类名

11.注意事项

11.1.静态调用成员

public static void main(String[] args) {
		System.out.println(age);
	}

会在编译时报错,即未运行之前(生成class文件之前)

在这里插入图片描述

11.2.传值和传引用

注意传递类型:传值(数值)传引用(地址)

11.3.常见异常

java.lang.NullPointerException:空指针异常

//创建用户对象
User user=new User("admin","admin","管理员");
System.out.println(user.getUsername());
// user=null;
// java.lang.NullPointerException 空指针异常
//使用null值访问成员属性时会出现空指针异常,即找不到该对象
System.out.println(user.getUsername());
  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值