1.面向对象的编程
-
对象
public class Practice01 { public static void main(String[] args) { /* 面向对象的编程,将一切事项都视为对象.对象用类来描述,过程在类里实现.使用时只需要调用类,不需要再考虑如何实现. 将对象的共同特征进行抽取进而形成类. 大象 : 类 属性 : 鼻子眼睛 ... : 变量 行为 : 跑 , 拔树 .... : 函数 */ Car car = new Car(); // m:method 函数 f:field : 属性 //属性值的操作 System.out.println(car.color); car.color = "black"; //方法的操作 car.show(); // 当内存中不再有变量引用该区域时,GC会清理堆内存中对应的区域 car = null; // 借车 : Car car1=new Car();// 每一个 new 出来的对象都是堆内存中一块独立的空间 Car car2 = car1; System.out.println("car2 = " + car2);// com.msr.lesson01.Car :自定义类,地址值开头为 全类名/全限定名 : 包名 + 类名 + @xxxxxxxx System.out.println("car = " + car); car2.wheels = 3; car.show(); car.color = "白色"; car2.show();// 类是引用型数据类型,地址值传递.因此修改是同步的. new Car().show(); // 匿名对象 : // 1.匿名对象调用属性无意义 new Car().wheels = 10; // 2.当函数只被调用一次时,可以使用匿名对象 new Car().show(); // 3.匿名对象可以作为参数进行传递,其实传递的是地址值 } } public class Car { /* 成员变量与局部变量的区别 : 1.声明位置 : a.成员变量声明在函数外部,类的内部 b.局部变量生命在函数或语句内部 2.默认值 a.成员变量是有默认值,默认值与数组动态声明默认值一致,可以直接使用 b.局部变量除了形式参数外都要先初始化再使用 3.内存中的位置 : a.成员变量依附于对象,存在于堆内存中 b.局部变量依附于函数或语句,存在栈内存中 4.生命周期 : a.成员变量依附于对象,与对象同生共死 b.局部变量在函数或者语句执行完后,就会清理掉 */ //在开发中,所有类的属性和方法,都要用以下方式加上注解,方便调用者清楚功能和用法. /** * 汽车颜色 */ String color = "red"; /** * 轮胎数目 */ int wheels;// 默认初始化 /** * 驾驶汽车 */ public void run(){ System.out.println("跑了...."); } /** * 展示汽车 */ public void show(){ // 同一个类中,成员函数可以直接访问其他成员 System.out.println("color = " + color + " , wheels = " + wheels); run(); } }
-
封装
public class Practice { public static void main(String[] args) { Person person = new Person(); System.out.println(person); person.setName("lisi"); person.setAge(20); System.out.println(person.getName()); System.out.println(person.getAge()); System.out.println(person); } } public class Person { // private : 表示私有的 ; 成员被private修饰后,只能在当前类中访问.降低灵活性,提高安全性 // 属性私有化后,须提供get与set函数 private String name; private int age; // set函数 // 返回值类型 : void, 形参 : 对应成员变量的类型 // 开发中, 禁止在get与set函数中进行逻辑判断, 前端页面可以帮助过滤数据, get与set尽量保持简洁 // this : 代表正在访问当前类的对象的类型 ; 通过 this.成员名 来区分成员变量和局部变量 public void setName(String name){ this.name = name; } public void setAge(int age){ this.age = age; } // get 函数 // 返回值类型 : 对应成员变量的类型, 形参 无 public String getName(){ return name; } public int getAge(){ return age; } // toString语句, print类变量时, 可以直接输出变量信息 public String toString(){ //return "name = " + name + " , age = " + age; return "Person : [name = " + name + " , age = " + age + ']'; } }
-
构造器
public class Practice { public static void main(String[] args) { // 类名 对象名 = new 构造器 ; Person person = new Person(); System.out.println(person); Person person1 = new Person("lisi"); System.out.println(person1); Person person2 = new Person("哪吒", 3); System.out.println(person2); } } public class Person { /* 构造器/构造函数/构造方法/Constructor : 方便给类变量创建时即赋值 格式 : 修饰符 类名(数据类型 变量名, 数据类型 变量名, ...){ 初始化内容; } 格式注意 : 1.构造函数没有返回值类型,也不能写 void 2.构造函数的名字就是当前类的类名 3.不能出现 return 语句 注意 : 1.当没有显式定义构造器时 , 那么JVM默认会提供一个空参构造器 2.一旦显式定义构造器,无论定义的构造器是否带参数,那么JVM都将不再提供空参构造器 3.多个构造器之间是以重载的形式存在的 */ private String name; private int age; public Person(){ System.out.println("空参构造器"); } public Person(String name) { this.name = name; } public Person(String name,int age) { this.name = name; this.age = age; } // ------------以下为 get set 函数 以及 toString------------------------------------------- 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; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }