Java学习笔记——面向对象编程初步

类和对象

面向对象的重要内容,用于描述客观世界里某一类对象的共同特征 —— 是某一批对象的抽象,可以将它理解成某种概念
一种自定义的数据类型
可以用来定义 变量(引用数据类型变量——他们将会应用到类的对象)对象由类负责创建

对象

是类的具体存在

类和对象的关系

例1:如果类是男生这个群体 则对象是男生这个群体里面的某一个个体
例2:如果类是建筑图纸 则对象是按照建筑图纸建成的某一个大楼

类的定义

java语言中定义类的简单语法格式

[修饰符] class 类名{
//修饰符可以是public,final 或者完全省略这两个修饰符
//类名只要是一个  合法的标识符()即可
//合法的标识符:由一个或多个有意义的单词组合而成,每个单词首字母大写,其他字母全部小写单词不要使用任何分隔符
	//类的定义  可以包含三个常见的成员:构造方法,变量,方法
	零个或多个构造方法...//如果只定义零个,就定义了一个空类,没有太大的实际意义
	// 构造方法用于构造类的实例——java通过new关键字来调用构造方法,从而返回该类的实例
	// 构造方法是一个类创建对象的根本途径,如果一个类没有构造方法,那么该类通常将无法创建实例
	零个和多个变量...//如果只定义零个,就定义了一个空类,没有太大的实际意义
	//变量用于定义该类或该类的实例(对象)所包含的数据
	零个和多个方法...//如果只定义零个,就定义了一个空类,没有太大的实际意义
	//方法则用于定义该类或该类的实例(对象)的行为特征或功能实现
}

1 . 定义变量的语法格式

[修饰符] 变量类型 变量名 [ = 默认值] ;

在这里插入图片描述
2 . 定义方法的语法格式

[修饰符] 方法返回值类型 方法名([形参列表]{
	//由零条或多条语句组成的方法体
} 

在这里插入图片描述
static 直译就是静态的意思
static 是一个特殊的关键字,可用于修饰方法,变量等成员
使用static 修饰的变量和方法称为类变量和类方法 也可称为静态变量和静态方法
使用static修饰的普通方法和变量则属于该类的单个实例而不是属于该类称为实例变量和实例方法 也 可称为非静态变量和非静态方法
静态成员不能直接访问非静态成员

3 . 构造方法的语法格式
构造方法也可认为一种特殊的方法

【修饰符】 构造方法名(【形参列表】){
	//由零条或多条可执行性的语句组成的执行体
} 

在这里插入图片描述
与其他方法不同的是,构造方法不能声明返回值类型,也不能使用void关键字声明构造方法没有返回值。如果为构造方法声明了返回值类型,或使用 void 关键字声明构造方法没有 返回值,编译时不会出错,但 Java 会把这个所谓的构造方法当成普通方法来处理。
例4.1 定义一个Student类


public class Student{
	//下面定义了两个变量
	public String name;
	public String sex;
	//下面定义了一个构造方法
	public Student (String name1,String sex1) {
		name = name1;
		sex = sex1;
	}
	//下面定义了一个study()方法
	public void study() {
		System.out.println("在学习");
	}
}

其中包含两个公有的String类型的变量name 和· sex   构造方法有两个形参 name1  和sex1  

对象的使用

创建对象的根本途径是构造方法,通过 new 关键字来调用某个类的构造方法即可创建这个类的实例
访问权限允许的情况下 ,类和实例访问方法或变量的方法的格式为:
类名.变量名 或 类名.方法名(【参数列表】)
对象名.变量名 或 对象名。方法名(【参数列表】

static 修饰的方法和变量,既可通过类来调用,也可通过对象来调用;没有使用 static 修饰 的普通方法和变量,则只能通过对象来调用。
例4.2 编写程序,使用4.1中定义的Student类

public class TestStudent {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
			//定义Student变量
			Student s;
			//通过new 关键字调用构造方法,返回Student的实例
			s = new Student("张三","男");
			//调用s的student方法
			s.study();
			//直接访问s的name变量值
			System.out.println(s.name);
			//直接调用s的sex值
			System.out.println(s.sex);
			
	}

}

	类不是一种具体存在,对象才是具体存在

运行结果如下

在学习
张三
男

其中s变量和Student类的对象在内存中存储情况
在这里插入图片描述
栈内存,堆内存 ——java用来存储数据的地方
栈内存—— Java 的指令区 存放的是程序指令、定义好的常量和长度 固定的变量,如基本数据类型和引用变量的引用地址(对象句柄)
堆内存—— Java 的数据区 是一个运行时数据区,类的对象从中分配空间。它们不需要程序代码来 显式的释放。而是由垃圾回收来负责的。
栈内存和堆内存的优缺点
在这里插入图片描述
栈内存里的引用变量并未真正存储对象中的变量数据,对象的变量数据实际存放在 堆内存里。而引用变量仅仅只是指向该堆内存里的对象。
例 4.3 修改例 4.2,查看输出结果的变化

public class TestStudent2 {
	public static void main(String[] args) {
		Student s1;
		s1 = new Student("李四","女") ;
		Student s2 = s1;
		s2.name = "王五";
		s2.sex = "男";
		s1.study();
		System.out.println("学生的姓名:"+s1.name);
		System.out.println("学生的性别:"+s1.sex);
	}
}

运行结果如下

在学习
学生的姓名:王五
学生的性别:

当一个对象被创建成功以后,这个对象将保存在堆内存中,Java 程序不允许直接访问堆内 存中的对象只能通过该对象的引用操作该对象,例如,s1.name、s1.sex、s2.study();等。如果 堆内存里的对象没有任何变量指向该对象,那么程序将无法再访问该对象,这个对象也就变成 了垃圾,Java 的垃圾回收机制将会回收该对象,释放其所占的内存区。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荥誉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值