类的格式:
public class 类名{
//一个标准的java描述类:
1.私有化成员变量
2.为私有化的成员变量提供set/get方法
eclipse快捷键:alt+shift+s
3.提供有参数和无参数的构造方法
4.还需要写一个功能性的方法
//成员变量
//构造方法
//成员方法
}
1.封装
1.1封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装的好处: A:提高了代码的复用性 B:提高安全性。
1.2为了让使用者使用方法来给成员变量赋值,就不能允许它们直接去访问成员变量,java就提供 了一个修饰符关键字:private ,封装加入private后的标准代码:
A:把成员变量private修饰
B:针对每一个成员变量给出getXxx()和setXxx()(注意首字母大写)
注意:这里的xxx其实是成员变量名称。
2.this关键字
局部变量如果有一个变量和成员变量名称一致,那么优先使用的是局部变量,即就近原则。这样的话,就造成了局部变量隐藏了成员变量。为了解决这种情况,java就提供了一个代表本类对象的关键字:this。
this这个关键字指代本类中的一个对象,但是具体指代本类中的哪个对象呢?– 谁调用我我指代谁。
3.构造:
无参构造(必须),全参构造(最好有)
3.1构造方法:
作用:给对象的数据进行初始化
格式特点:
A:方法名和类名相同。
public Student() {}
B:没有返回值类型。
访问修饰符 返回值类型 方法名(…) {…}
C:没有返回值。
没有用return带明确的值回来。
return;
3.2构造方法注意事项:
A:如果你不提供构造方法,系统会给出默认无参构造方法
B:如果你提供了构造方法,系统将不再提供默认无参构造方法
a:使用自己给的带参构造;
b:要么自己再提供一个无参构造,建议:永远自己给出无参构造方法;
c:构造方法可以重载;
构造方法是一种特殊的方法,具有以下特点。
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
(4)构造方法不能由编程人员调用,而要系统调用。
(5)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构 造器,这个构造器不执行任何代码。
(6)构造方法可以重载,以参数的个数,类型,或排列顺序区分。
3.3给成员变量初始化的三种方式:
A:成员变量声明时进行初始化;
B:通过setXxx()方法 ;
C:通过带参构造方法;
实际底层执行顺序:A -> B -> C(可以思考运行原理)
public class Person {
//声明成员变量时直接初始化
private String name = "tom";
public String getName() {
return name;
}
//通过setName()方法初始化
public void setName(String name) {
this.name = name;
}
//构造方法内进行初始化
public Person(String name) {
this.name = name;
}
public void work(){
...
}
}
4.访问修饰符
5.代码示例:
package com.jagger.firsttry;
public class Student {
//成员变量
private String name;
private int age;
private int score;
//get+set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
//构造方法,无参
public Student() {
// TODO Auto-generated constructor stub
}
//构造方法,有参
public Student(String name, int age, int score) {
this.name = name;
this.age = age;
this.score = score;
}
//成员方法
public void Select(boolean limit) {
name = this.name;
age = this.age;
score = this.score;
if(limit & age > 18 & score >90) {
System.out.println(name + "选拔通过" + "\n" + "this地址:" + this);
}
else {
System.out.println(name + "选拔不通过" + "\n" + "this地址:" + this);
}
}
}
package com.jagger.firsttry;
public class HelloWorld {
public static void main(String[] args) {
Student xm = new Student();
Student xh = new Student("xiaohong",20,99);
Student xl = new Student("xionglan",19,85);
xh.Select(false);
System.out.println("xh调用起始地址:"+xh);//验证this谁调用就指向谁
xl.Select(true);
System.out.println("xl调用起始地址:"+xl);
}
}
console 执行结果:
xiaohong选拔不通过
this地址:com.jagger.firsttry.Student@7852e922
xh调用起始地址:com.jagger.firsttry.Student@7852e922
xionglan选拔不通过
this地址:com.jagger.firsttry.Student@4e25154f
xl调用起始地址:com.jagger.firsttry.Student@4e25154f