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)