目录
类是抽象的,概念的;
对象是具体的,实际的;
对象是类创建的一个实例。
类是对象的模板。
Java 内存的结构分析:
1) 栈: 一般存放基本数据类型(局部变量)
2) 堆: 存放对象(Cat cat , 数组等)
3) 方法区:常量池(常量,比如字符串), 类加载信息
常用访问控制符:
this 的注意事项和使用细节
ThisDetail.java
1) this 关键字可以用来访问本类的属性、方法、构造器
2) this 用于区分当前类的属性和局部变量
3) 访问成员方法的语法:this.方法名(参数列表);
4) 访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一
条语句)
5) this 不能在类定义的外部使用,只能在类定义的方法中使用。
构造方法/构造器
1) 构造器的修饰符可以默认, 也可以是 public protected private
2) 构造器没有返回值
3) 方法名 和类名字必须一样
4) 参数列表 和 成员方法一样的规则
5) 构造器的调用, 由系统完成
创建一个狗的对象:
public class HomeWork07{
public static void main(String[] args) {
Dog d = new Dog();
d.set("花花","橘色",3);
d.show();
}
}
class Dog{
String name;
String color;
int age;
public void show(){
System.out.println("狗的名字:"+this.name);
System.out.println("狗的颜色:"+this.color);
System.out.println("狗的年龄:"+this.age);
}
public void set(String name,String color,int age){
this.name = name;
this.color = color;
this.age = age;
}
}
不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认 年龄, 必须在 1-120, 年龄, 工资不能直接查看 , name 的长度在 2-6 字符 之间
public class Encapsulation01 {
public static void main(String[] args) {
Person per = new Person();
per.setName("jack");
per.setAge(30);
per.setSalary(30000);
System.out.println(per.info());
//如果我们采用构造器指定属性
Person smith = new Person("smith", 20, 50000);
System.out.println("===smith的信息===");
System.out.println(smith.info());
}
}
class Person {
public String name;//名字公开
private int age;//age 私有化
private double salary;//...
//构造器 alt+inset
public Person() {
}
public Person(String name, int age, double salary) {
// this.name = name;
// this.age = age;
// this.salary = salary;
setSalary(salary);
setName(name);
setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
//加入对数据的检验,
if (name.length()>=2&&name.length()<=6){
this.name = name;
}else {
System.out.println("名字的长度不对,需要2-6个字符,默认名字");
this.name = "没名字";
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
//判断
if (age >= 1 && age <= 120) {
this.age = age;
} else {
System.out.println("年龄要在1-120,你的输入不正确,默认年龄18");
this.age = 18;
}
}
public double getSalary() {
//可以增加对当前对象的权限判断
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
//写一个方法,返回属性信息
public String info() {
return "信息为 name=" + name + " age=" + age + " 薪水=" + salary;
}
}