目录
7.1面向对象
7.2类
7.3类的构造方法
7.4静态变量、常量和方法
7.5类的主方法
7.6对象
7.1面向对象
7.1.1对象
对象:静态部分、动态部分
静态部分:属性;动态部分:行为
7.1.2类
类是封装对象的属性和行为的载体。
行为是以方法的形式定义的,属性是以成员变量的形式定义的。所以类包括对象的属性和方法。
根据类抽象出一个实体对象,通过实体对象解决实际问题。
7.1.3 封装
是面向对象编程的核心思想。通过载体——类,将对象的属性和行为封装起来。
7.1.4继承
利用对象之间的共有属性。子类继承父类。
7.1.5多态
父类对象应用于子类的特征就是多态。
依赖于抽象类和借口来实现
7.2类
关键字class来定义。
成员方法的定义:
权限修饰符 返回值类型 方法名(参数类型CHENGYUAN F 参数名){
//方法体
return 返回值;
}
权限修饰符:private、public、protected
成员方法参数:对象或者基本数据类型变量
成员方法返回值:有,用return关键字,没有用void关键字
返回值:可以为计算结果、其他数值或对象。返回值类型要与方法返回值类型一致。
成员方法可以调用其他成员方法和类成员变量。若方法中有与成员变量(类中变量)同名的局部变量(方法中变量),则方法中对该变量的访问以局部变量进行。
类成员:成员变量和成员方法。
7.2.3权限修饰符
private,public,protected,默认
默认修饰符又称为friendly,是指在定义类或变量的时候不加任何修饰符。这个只有一个包中的类可以调用这个类的成员变量和成员方法。
类的权限设定会约束类成员的权限设定。
| 访问包位置 | 类修饰符 | ||
| private | protected | public | |
| 本类 | √ | √ | √ |
| 同包其他类或子类 | × | √ | √ |
| 其他包的类或子类 | × | × | √ |
package com.lzm;
class AnyClass(){
public void doString(){ //与void doString()等同,此处doString权限与AnyClass访问权限相同
……//方法体
}
}
7.2.4局部变量
局部变量: 成员方法内定义的变量。使用时必须进行赋值或者初始化。
7.2.5局部变量的有效范围
从声明到结束为止。不嵌套区域可以定义相同名称相同类型的局部变量。嵌套区域不可以。
7.2.6 this关键字
this关键字代表本类对象的引用,隐式地用于对象的成员变量和方法。(其他调用一般通过对象.成员变量或者对象.成员方法调用)
当方法中局部变量或方法参数覆盖了成员变量时,通过this调用成员变量。
this还可以作为方法的返回值。
public class Book {
private String name;//定义一个String型的成员变量
public String getName(){ //定义一个getName()方法
int id=0; //局部变量
setName("JAVA");//调用类中其他方法
return id+this.name;//设置方法返回值
}
public void setName(String name){ //定义一个setName的方法
this.name=name; //将形参name值赋予类中的成员变量name
}
public Book getBook(){ //getBook方法的返回值类型为Book类,方法体中使用return this这种形式将Book类的对象进行返回
return this; //返回Book类引用
}
}
7.3类的构造方法
构造方法就是与类同名的方法。类自动调用构造方法实例化对象。
特点:没有返回值;名称与本类相同。
public book(){
构造方法体
}
构造方法中也可以直接赋值成员变量。
若类中没有定义任何构造方法,会自动创建一个。
但若类中定义的构造方法不是无参的,编译器也不会设置一个默认的无参构造方法,此时调动无参构造方法实例化对象时会报错。
this调用类的构造方法。
public class AnyThing {
public AnyThing(){ //定义无参构造方法
this("this调用有参构造方法"); //在无参构造方法中使用this关键字调用有参构造方法(只能在无参构造方法的第一句使用this)
System.out.println("无参构造方法");
}
public AnyThing(String name){ //定义有参构造方法
System.out.println("有参构造方法");
}
}
7.4静态变量、常量和方法
静态:关键字static修饰
静态成员属于类所有,可以在本类或者其他类中用(类名.静态类成员)来调用(也可通过对象.静态成员调用,但不建议用)。
Java规定方法体内局部变量不可以声明为static。
静态成员同样受约束于:private,public,protected
public class StaticTest {
final static double PI=3.415;//类中定义静态(static)常量(final)
static int id; //类中定义静态变量
public static void method(){ //类中定义静态方法
}
public static void method2(){ //调用静态成员时,通过类名.静态成员调用
System.out.println(StaticTest.PI); //调用静态常量
System.out.println(StaticTest.id); //调用静态变量
StaticTest.method();//调用静态方法
}
}
静态方法中不可以用this关键字、不可以直接调用非静态方法。
7.5类的主方法
通过主方法来执行程序。
public static void main(String[] args) { //方法体 }可知:无返回值、只能直接调用静态的其他方法、形参为数组可以使用args.length获取参数个数。
7.6对象
通过new操作符调用构造方法创建对象。调用new创建对象,对象创建的同时自动调用构造方法中的代码。
Test test=new Test();
或者:Test test=new Test("a");
Test:类名;test:类对象;new:创建对象操作符;"a":构造方法的参数
public class CreatObject {
public CreatObject(){
System.out.println("创建对象");
}
public static void main(String[] args) {
new CreatObject(); //输出:创建对象
}
}
7.6.2访问对象的属性和行为
通“对象.类成员”来获取对象属性和行为。
public class TransferProperty {
int i=47; //定义成员变量
public void call(){ //定义成员方法
System.out.println("调用call方法");
for(i=0;i<3;i++){
System.out.print(i+" ");
if(i==2){
System.out.println("n");
}
}
}
public TransferProperty(){ //定义构造方法
}
public static void main(String[] args) {
TransferProperty tr1=new TransferProperty(); //创建一个对象tr1
TransferProperty tr2=new TransferProperty(); //创建一个对象tr2
tr2.i=60; //对类成员变量i赋值
System.out.println("第一个对象调用变量i的结果:"+tr1.i++);
tr1.call(); //使用第一个对象调用类成员变量
//使用第二个对象调用类成员变量
System.out.println("第二个对象调用变量i的结果:"+tr2.i);
tr2.call();
}
}
//打印之前对i进行赋值60,但只是对tr2的i进行赋值,所以tr1的i仍然为47,而tr2的i为60.
代码1得知,每个对象的产生是相互独立的,不会相互影响。
public class AccessProperty {
static int i = 47; //定义静态成员变量
public void call() { //定义成员方法
System.out.println("调用call方法");
for (i = 0; i < 3; i++) {
System.out.print(i + " ");
if (i == 2) {
System.out.println("n");
}
}
}
public AccessProperty() { //定义构造方法
}
public static void main(String[] args) {
AccessProperty tr1 = new AccessProperty(); //创建一个对象tr1
AccessProperty tr2 = new AccessProperty(); //创建一个对象tr2
tr2.i = 60; //对类成员变量i赋值
System.out.println("第一个对象调用变量i的结果:" + tr1.i++);
tr1.call(); //使用第一个对象调用类成员变量
//使用第二个对象调用类成员变量
System.out.println("第二个对象调用变量i的结果:" + tr2.i);
tr2.call();
}
}
代码2得知,多个对象对静态成员变量操作会更改静态成员变量的值。
7.6.3对象的引用
类名 对象引用名称
如一个Book类的引用:Book book;
一个引用不一定要和一个对象关联。引用与对象相关联:Book book=new book;
book是Book类的一个对象,book包含Book对象的一个引用。
7.6.4对象的比较
“==”与“equals()方法”
equals:比较两个对象引用所指的内容是否相等。
==:比较两个对象引用的地址是否相等。
public class Compare {
public static void main(String[] args) {
String c1=new String("abc"); //创建String型对象引用
String c2=new String("abc");
String c3=c1; //将c1对象引用赋予c3
//使用“==”比较
System.out.println("c2==c3的运算符为:"+(c2==c3));
System.out.println("c1==c3的运算符为:"+(c1==c3));
//用“equals”比较
System.out.println("c2 equals c3的运算符为:"+c2.equals(c3));
}
}
7.6.5对象的销毁
java只能自动回收由new创建的对象。
Object类的finalize()方法,被声明为protected,用户可以重新定义该方法。
java提供System.gc()方法强制启动垃圾回收器



