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