局部变量和对象

65-局部变量

在成员方法中定义的变量称为局部变量。比如再getName中定义一个变量:

String subName = "-这是一本好书";Code language: JavaScript (javascript)

局部变量必须初始化。局部变量在方法执行时创建,方法执行结束后被销毁。局部变量在使用时必须进行赋值操作或初始化,否则会出现编译错误。

局部变量的有效范围

局部变量的有效范围称为变量的作用域,从变量的声明开始到语句块结束为止。在不嵌套的代码块里面可以声明同名的局部变量,如果是嵌套的重复定义同名变量则会报错。

成员变量在eclipse里面是深蓝色,局部变量是浅红色的。


66-静态变量、常量和方法

静态表示这一类东西共有的属性和方法,它是共享的,不属于实例对象。

static关键字:由static修饰的变量、常量、方法称为静态变量、常量和方法。有些时候需要两个类之间进行数据的共享,可以使用静态成员。比如圆周率是固定的,可以把它定义到一个叫Fixed类里面,所有地方用到圆周率都可以Fixed.PI这样来调用。

类中定义的static常量、变量、方法被称为静态成员。静态成员属于类所有的,可以通过类名.静态成员名来调用。

静态成员也可以使用对象名来调用,但是这样会混淆静态成员和实例成员,所以不鼓励。

  • 静态方法中不可以使用this
  • 静态方法中不可以直接调用非静态方法
  • 局部变量不能声明为static

非静态成员 → 实例成员(需要new才能访问)


67-权限修饰符

Java的权限修饰符主要包含private、public、protected。类可以使用public或者不用(默认),不写的话就是同一个包下面才可以访问。这些修饰符控制着对类和类的成员变量以及成员方法的访问性。

修饰符访问范围
private只能在本类类体内部访问
protected本类类体和子类类体可以访问
public所有地方都可以访问(不同包需要引入包)
默认(不写)同一个包下面可以访问
public class Ball {
	private String color;
	private String myColor = color;

	public Ball() {
		// TODO Auto-generated constructor stub
		this.color = "红色";
	}
}Code language: PHP (php)

68-方法的权限受类的权限约束

如果一个类不使用任何修饰符,则这个类的权限范围是同一个包里面。就算它的方法是public,那也只能在同包内访问,因为方法的权限是受类的权限约束。

另外,类的修饰符和方法的修饰符是不一样的。类的修饰符只能是public、abstract或者final,没有private和protected。不写则默认是同一个包下面可以访问。方法如果不适用修饰符,也表示只是同包内可以访问。


69-this关键字

如果方法的形参的参数名和成员变量的参数名相同的时候,可以使用this来区分:

this.name  //表示成员变量
name       //表示形参Code language: JavaScript (javascript)

70-练习-定义一个Student类型

要求:

  • name属性
  • number学号
  • age年龄
  • 一个带参构造函数
  • 一个getName、一个setName
  • 一个getAge、一个setAge
  • 在main方法中new对象并调用
package cn.bamn;

class Student {
	private String name;
	private String number;
	private int age;

	public Student(String name, String number, int age) {
		this.name = name;
		this.number = number;
		this.age = age;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return this.name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return this.age;
	}
}

public class TestStudent {
	public static void main(String[] args) {
		Student s = new Student("小潘", "2018001", 18);
		System.out.println(s.getName());
		System.out.println(s.getAge());
		s.setName("小北");
		s.setAge(20);
		System.out.println(s.getName());
		System.out.println(s.getAge());
	}
}Code language: JavaScript (javascript)

71-对象

对象是由类抽象出来的,所有的问题都是通过对象来处理,对象可以操作类的属性和方法来解决问题。

对象的创建

使用new关键字来创建,new的时候调用构造函数:

Student s = new Student();
Student s1 = new Student("小潘");Code language: JavaScript (javascript)

new的时候Java虚拟机会分配内存空间,可以在构造函数中初始化成员变量。

Image im = new Image();
im.main(args);

Person p1 = new Person();
Person p2 = new Person("-----");Code language: JavaScript (javascript)

访问对象的属性和方法

创建一个手机类,然后创建两个手机对象,根据对象调用call方法。call方法访问phoneNumber属性。两个对象的属性和方法是独立的。

package cn.bamn;

public class Phone {
	private String phone;

	public Phone(String phone) {
		this.phone = phone;
	}

	public void setPhone(String phone) {
		if (!phone.matches("1[3578]\\d{9}")) {
			System.out.println("不是正确的手机号码");
			return;
		}
		this.phone = phone;
	}

	public void Call(String callPhone) {
		System.out.println("打给:" + callPhone);
	}
}Code language: JavaScript (javascript)
Phone ph1 = new Phone("110");
Phone ph2 = new Phone("12306");
ph1.setPhone("119");
ph1.Call("010-26545124");
ph2.Call("020-32654124");Code language: JavaScript (javascript)
Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注