Appearance
全局配置
Appearance
面向对象三大特征:封装,继承,多态
将类的某些信息隐藏在类的内部,不允许外部程序直接访问这些信息,外部只能通过该类提供的特定方法来实现对隐藏信息的操作和访问。
public class Test {
public static void main(String[] args) {
// Student.age = 1;
Student student = new Student();
student.id = 1;
student.age = 11;
student.name = "张三";
student.show();
Student student2 = new Student();
student.id = 2;
student2.age = 20;
student2.name = "李四";
student2.show();
}
}
public class Student {
private static int id;
private String name;
public int age;
static {
System.out.println("代码块");
}
public void show() {
System.out.println("学生信息如下:");
System.out.println("编号:"+getId());
System.out.println("姓名:"+getName());
System.out.println("年龄:"+getAge());
}
1.修改属性的访问权限,设置为private(私有) 2.创建公有public的getter和setter方法 getter:让外部来获取属性的方法 setter:让外部来修改属性的方法 3.setter方法中加入属性控制语句,以确保属性的正确性和合理性。
public class Student {
private static int id;
private String name;
public int age;
static {
System.out.println("代码块");
}
public void show() {
System.out.println("学生信息如下:");
System.out.println("编号:"+getId());
System.out.println("姓名:"+getName());
System.out.println("年龄:"+getAge());
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age < 0) {
System.out.println("输入的年龄有误,已赋默认值16");
this.age = 16;
}else {
this.age = age;
}
}
}
public class Test {
public static void main(String[] args) {
Student.age = 1;
Student student = new Student();
student.age = 11;
student.setId(1);
student.setName("张三");
student.setAge(-20);
student.show();
Student student = new Student();
student.age = 1;
System.out.println("student的年龄是:"+student.age);
Student student2 = new Student();
student2.age = 2;
System.out.println("student的年龄是:"+student.age);
System.out.println("student2的年龄是:"+student2.age);
}
}
可以修饰: 1.成员变量 静态变量,可通过类名直接访问 2.成员方法 静态方法,可通过类名直接调用 3.代码块:写在类中,方法之外,并且用{} 包裹起来的一段代码。当程序中访问该类时,自动执行代码块中的语句。
静态代码块,当JVM加载该类时,执行该代码,并且只执行一次。
用static修饰的成员变量也叫做类变量 表示该变量不再属于某个对象了,而是属于该类,所有的对象共享该属性,内存中只有1份。
没有被static修饰的成员变量也叫做实例变量,一个对象对应一个,内存中有N份。
不能直接访问该类的实例属性 可以访问该类的实例化对象的实例属性
不能直接访问该类的实例方法 可以访问该类的实例化对象的实例方法
不能使用this关键字: this指的是当前的实例对象,而静态关键字描述的是一种共有的信息,不属于任何一个实例对象,属于类,被所有的实例对象所共用, this表示实例,static表示非实例,所以二者不能兼容。
public class Test {
public static void main(String[] args) {
User user = UserTools.getUserById(2);
System.out.println(user);
}
}
public class UserTools {
//定义一个集合Map(类似数组数据结构的一个容器),集合中填入多个User对象,供外部使用
private static Map<Integer,User> map;
static {
map = new HashMap<Integer,User>();
//创建多个User对象,填入到map中
map.put(1, new User(1,"张三",22));
map.put(2, new User(2,"李四",22));
map.put(3, new User(3,"王五",22));
}
public static User getUserById(int id) {
return map.get(id);
}
}
JVM加载类时,执行了静态代码块, 如果有多个静态代码块,按顺序执行
类的构造方法用于创建类的实例对象,类的 静态代码块用于初始化类,给类的静态变量赋值。
使用封装实现电子宠物系统的企鹅类正确输入年龄 保证年龄的有效值(0-10),否则取默认值6。
public class Penguin {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>=0 && age <= 10) {
this.age = age;
}else {
this.age = 6;
}
}
@Override
public String toString() {
return "Penguin [age=" + age + "]";
}
}
public class Test2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎来到电子宠物系统");
System.out.print("请输入企鹅的年龄:");
int age = scanner.nextInt();
Penguin penguin = new Penguin();
penguin.setAge(age);
System.out.println(penguin);
}
}
模拟实现投票,多个选民进行投票,每个选民只能投一次,并且当投票总数大于100时,停止投票。
public class Person {
private static int vote;
public void vote() {
vote++;
}
public int getVote() {
return vote;
}
}
public class Test3 {
public static void main(String[] args) {
//多个选民投票
while(true) {
Person person = new Person();
person.vote();
if(person.getVote() > 100) {
break;
}
System.out.println("当前的票数是:"+person.getVote());
}
System.out.println("投票结束!");
}
}