Java学习03-类与对象

类与对象

1.1类的定义

类定义的语法格式:

[修饰符] class 类名 [extends 父类名][implements 接口列表]{
		...     //类体部分
}

例如:

public class Sum{
...
}

【说明】

  • 修饰符有访问控制修饰符(public protected default private) 和 类修饰(如 abstract 、interface 、final )。
  • 类名首字母通常要大写。
  • 关键字extends引导该类要继承的父类。
  • 关键字implements引导该类所实现的接口列表。

类的成员属性的定义格式:[修饰符] 类型 变量名;
类的成员方法的定义格式:

[修饰符] 返回值类型 方法名([参数列表])[throws 异常列表]{
...//方法体
}

【注意】当一个以上的修饰符修饰类或类中的域、方法时,这些修饰符之间用空格分割,且无排列次序要求。
【例】表示点的Point类

public class Point {
    private int x;   //x坐标
    private int y;   //y坐标

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        this.y = y;
    }

    @Override
    public String toString() {         //对象的字符串描述
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}

【补充】IDEA自动生成有参、无参构造方法以及getter、setter、toString方法:
右键代码区
在这里插入图片描述
选择Generate…
按住shift可多选
在这里插入图片描述

1.2对象的创建与引用

1.2.1创建对象及访问对象成员

实例化对象格式:类型 引用变量名 = new 类型([参数]);

 public static void main(String[] args) {
        Point p1 = new Point();
        Point p2 = new Point();
        Point p3 = p1;
        p1.setX(5);
        p1.setY(8);
        p2.x = 12;
        System.out.println("p1"+p1);        //p1Point{x=5, y=8}
        System.out.println("p2"+p2);        //p2Point{x=12, y=0}
        System.out.println("p3的属性值"+p3.getX());   //p3的属性值5

    }

【说明】

  • x和y是成员变量,没有手动赋初始值,系统会默认将x、y赋值为0
  • p1、p2、p3是引用类型, Point p3 = p1;实际上表示p1、p3两个变量引用同一个对象,指向同一块内存。

1.2.2对象的初始化和构造方法

在创建对象时,要给对象的属性成员分配内存空间,并进行初始化。如果定义属性成员时没有指定初值,则系统按默认规则设定初值。特别地,引用类型地成员默认初值为null。
构造方法是给对象设置初值的规范方式,它是根据参数来给对象属性赋值。

public Point(){  //无参构造方法
}
public Point(int x1 , int y1){  //有参构造方法
x = x1;
y = y1;
}

定义构造方法时需要注意:

  1. 构造方法明必须与类名一致。
  2. 构造方法没有返回类型。
  3. 一个类可以提供多个构造方法,这些方法的参数不同.在创建对象时,系统自动调用能满足参数匹配的构造方法为对象初始化
  4. 如果没有自定义构造方法,那么系统会自动提供一个无参的构造方法。但是一旦自定义了构造方法,系统将不再提供无参的构造方法。

【例如】使用构造方法给变量p4赋值:

Point p4 = new Point(4,5);  //x=4,y=5

1.3变量作用域

根据变量在程序中声明的位置,可以将变量分为以下4种类型;

  1. 成员变量:作用域是整个类体。成员变量定义时系统会默认赋初值。
  2. 局部变量:方法体内定义的局部变量在整个方法内部有效,循环内定义的局部变量在循环内有效。
  3. 方法参数:作用域是整个方法。
  4. 异常处理参数:作用域是cache后面跟随的异常处理块。

【例如】`

try{
	int x = 5/0;
}
cache(ArithmeticException e){  //异常处理参数e的有效范围
	System.out.println("产生异常"+e)
}

1.4类变量和静态方法

1.4.1类变量

用static修饰符修饰的属性是仅属于类的静态属性,相应的成员变量也称类变量或者静态变量。
1.类变量的访问形式

  • 通过类名作前缀访问,如 A.k++。(推荐使用)
  • 通过对象作前缀访问,如 x1.k++。
  • 通过变量名直接访问,如 k++。
public class Point {
    static int k = 3;//类变量
    public static void main(String[] args) {
       Point x1 = new Point();
       x1.k++;          //k=4
       Point x2 = new Point();
       x2.k = 5;        //k=5
       k++;             //k=6
        System.out.println("k="+Point.k);//k=6
    }
}

【说明】静态变量在存储上归属类空间,不依赖任何对象,通过对象去访问静态变量实质上还是访问类空间的那个变量,也就是说它们实际上都是同一个内存空间下的。

1.4.2静态方法

用static修饰的方法称为静态方法,也叫类方法,在static方法中能处理类变量,也可以访问其它static方法,但不能访问任何归属对象空间的变量或方法(普通可访问静态,静态不可访问普通)
静态方法的调用形式

  • 用类名做前缀,如A.sum()。(推荐使用)
  • 通过对象名调用,如x1.sum()。

【例如】 求10~100之间的所有素数

public class Point {
    public static boolean prime(int n){
        for (int k = 2;k <= Math.sqrt(n);k++){
            if (n % k ==0)
                return false;
        }
        return true;
    }
    public static void main(String[] args) {
      for (int m = 10; m <=100; m++){
          if (prime(m))
              System.out.println(m+",");
      }
    }
}

在这里不能将 prime()方法的static修饰符去掉,否则无法在main()方法中调用prime()方法。(静态不能访问非静态)

1.5this

this出现在类的实例方法构造方法中,静态方法中不能用this。
this的用途:

  • 在实例变量和局部变量名称相同时,用this作前缀来特定访问实例变量。如 this.实例变量
  • 把当前对象的引用作为参数传递给另一个方法。如this.成员方法(参数)
  • 在一个构造方法中调用同类的另一个构造方法,注意,用this调用构造方法的时候,该语句必须是方法体中的第一个语句。
    【例如】Point类
public class Point{
	private int x,y;
	
	public Point(int x, int y1){//有参构造
	this.x = x;   //在这里this用于访问实例变量
	this.y = y1;  //也可以写y=y1
	}
	
	public Point(){//无参构造
	this(0, 0)//在这里this用于调用有参构造,将0,0赋值给x,y。必须是方法内的第一个语句
	}

	public double distance(Point p){//求当前点与P点距离
	return Math.sqrt((this.x-p.x))*(x-p.x)+(y-p.y)*(y-p.y)) ////在这里this用于访问实例变量,这里的this.可以不写。
	}
	
	public double distance2(Point p){//p到当前点的距离
	return p.distance(this);//在这里this用于把当前对象作为参数传递给另一方法。这里this就是p
	}
} 

1.6使用包组织类

1.6.1Java API简介

Java系统提供的类库也称为Java API,它是系统提供的已实现的标准类的集合。根据功能不同,Java类库按其用途被划分为若干个不同的包,每个包都有若干个具有特定功能和关系的类和接口。
导包:
【例如】import java.util.Date;

1.6.2建立包

在默认情况下,系统会为每一个源文件创建创建一个无名包,这个源文件中定义的所有类都隶属于这个无名包。但是无名包中的类不能被其他包中的类引用(不知道包名),因此要尽量建立有名的包。
用关键字package来创建包。

1.6.3包的引用

用import语句加载整个包,用*代替类名,它便会加载保重所有类。如:import java.util.*;

猜你喜欢

转载自blog.csdn.net/qq_42145862/article/details/88922217