Java类与对象

定义:表示一个客观世界中对一类具有共同特征的事物的抽象。
类=属性+方法。
在类中的属性实际上就是相当于一个变量,有时还称为变量或成员。
方法是一些操作的行为。
格式

class 类名称(首字母大写)
			[访问权限]	数据类型		属性;
			......
			[访问权限]	返回值的数据类型	方法名称(参数1,参数2,...){
			程序语句;
			[return	表达式;]
}

由对象调用的方法不需要在方法前添加static。
一个类定义完成之后不能直接使用,需要产生对象,对象需要使用固定的产生格式,这时类才能使用。

对象

定义:类的实例且在内存中有意义。
创建对象其实是在调用构造器(构造器参考下文)。
格式:

类名		对象名称	=	null;		//声明对象
对象名称=new	类名();			//实例化对象
或
类名	对象名称=new	类名();

Java内存分布:
在这里插入图片描述

最简单的内存分析
在这里插入图片描述
访问对象中属性或方法
访问属性:对象名称.属性名;
访问方法:对象名称.方法名();

Person	per=new Person();
		per.tell();

对象使用前必须实例化

Person	per=null;
		per.name="张三";
		per.tell();
结果:会出现常见的空指针异常
Exception in thread "main" java.lang.NullPointerException

垃圾回收机制(GC)

public class ClassDemo02 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		People peo1=new People();
		People peo2=new People();
		peo1.age=10;
		peo2.age=20;
		peo2=peo1;
		System.out.print("peo1的年龄为:");
		peo1.tell();
		System.out.print("peo2的年龄为:");
		peo2.tell();
	}
}
class People{
	int age;
	public void tell() {
		System.out.println("年龄为:"+age);
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个栈内存空间只能指向一个堆内存空间,如果要再指向需要先断开原有指向。
只有当内存中垃圾达到一定数量才会自动启动GC。
在这里插入图片描述
对象生命周期:
每次使用new关键字的时候,就会在内存开辟新的空间,此时对象开始存在.
对象的结束:当堆中的对象,没有被任何变量所引用,此时该对象就成了垃圾,就等着垃圾回收器(GC)来回收该垃圾,当被回收的时候,对象被销毁了。
回收垃圾的目的:释放更多的内存空间。

封装性
什么是封装?
1.把对象的状态和行为看成一个统一的整体 , 将字段和方法放到一个类中。
2.信息隐藏: 把不需要让外界知道的信息隐藏起来。尽可能隐藏对象功能实现细节,向外暴露方法,保证外界安全访问功能。

类中的全部属性都必须封装。

封装的好处:
面向对象三大特征之一
1.保证数据的安全
2.提高组件的复用性

 格式:
属性封装:private 属性类型 属性名称;
方法封装:private 方法返回值 方法名称(参数列表){}

setter和getter
1、只要是被封装的属性,就必须使用setter和getter去设置和取得。
2、Java存在反射机制,在各个程序中,反射机制都会利用setter和getter去设置和取得属性内容。

什么是属性?
属性和字段类似,也是一个成员变量。但是必须得要有getter/setter方法,有getter/setter方法才是属性,没有就是字段。一般属性都是私有的,公有的别人可以直接获取和设置值。

修饰符:
Java语言提供了很多修饰符,主要分为以下两类:
访问修饰符
非访问修饰符
修饰符用来定义类、方法或者变量,通常放在语句的最前端。

访问修饰符:
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
public : 对所有类可见。使用对象:类、接口、变量、方法
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
在这里插入图片描述
protected 需要从以下两个点来分析说明:
子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;
子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的protected 方法,而不能访问基类实例的protected方法。

非访问修饰符
为了实现一些其他的功能,Java 也提供了许多非访问修饰符。
static 修饰符,用来修饰类方法和类变量。
final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract 修饰符,用来创建抽象类和抽象方法。
synchronized 和 volatile 修饰符,主要用于线程的编程。

构造方法
作用:在对象实例化时为类中的属性初始化。
编译器编译源文件时,会创建一个缺省的构造器,如果设置了默认值,默认值也是在构造器当中设置的。在类中找不到默认的构造器,通过反编译工具可以看到默认的构造方法。
只要是类就一定存在构造方法——若未明确声明构造方法在编译时会自动生成无参构造方法。若手动生成构造方法将不会在编译时生成默认构造方法。
注意事项:
1、构造方法必须与类名一致(判断构造方法的特征之一)
2、构造方法的声明处不能有任何返回值类型的声明。
3、在构造器中,不需要使用return语句。其实构造器是有返回值的,返回的是当前创建对象的引用。

匿名对象
定义:未明确给出名称的对象。
一般匿名对象只使用一次,而且只在堆内存中开辟空间——匿名对象实际上就是一个堆内存空间。

//一般情况
Person per = new Person("张三");
per.tell();
//匿名对象
new Person(“张三”).tell();
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值