01-面向对象(概述)
面向对象 -- 冰箱.打开;冰箱.存储;冰箱.关闭;
02-面向对象(举例)
使用和指挥 -- 对象,不需要关注过程,只关注结果;
一切皆对象,万物皆对象 -- 自《Thinking in java》
03-面向对象(类与对象的关系).avi
/* 人开门:名词提炼法。 人 { 开门(门) { 门.开(); } } 门 { 开(){操作门轴等。} } */
package myFirstCode; //面向对象:三个特征,封装、继承、多态 //以后开发:其实就是找对象使用。没有对象,就创建一个对象。 //找对象,建立对象,使用对象,维护对象的关系。 /* * 类和对象的关系。 * * 现实生活中的对象“:张三、李四。 * 想要描述:提取对象中共性内容。对具体的抽象 * 类就是:对现实生活中事务的描述。 * 对象:就是这类事物,实实在在的实体。 */ //需求:描述汽车(颜色,轮胎数)。描述事物其实就是在描述事物的属性和行为。 //属性对应是类中变量,行为对应的类中的函数(方法)。 //其实定义类,就是在描述事物,就是在定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法)。 class Car { //描述颜色 String color = "红色"; //描述轮胎数 int num = 4; //运行行为。 void run() { System.out.println(color+".."+num); } } public class CarDemo { public static void main(String[] args) { // TODO Auto-generated method stub //生产汽车。在java中通过new操作符来完成。 //其实就是在堆内存产生一个实体。 Car c = new Car(); //需求:将已有车的颜色改为蓝色。指挥该对象做使用。在java指挥方式是:对象.对象成员 c.color = "blue"; c.run(); Car c1 = new Car(); c1.run(); } }
04-面向对象(成员变量和局部变量).avi
/* * 成员变量和局部变量。 * 作用范围: * 成员变量作用于整个类中。 * 局部变量作用于函数中,或者语句中。 * 在内存中的位置: * 成员变量:存在堆内存中,因为对象的存在,才在内存中存在。 * 局部变量:存在栈内存中。 */
05-面向对象(匿名对象的应用).avi
new Car().num = 5; new Car().color = "blue"; new Car().run(); Car c = new Car(); c.run(); c.num = 4; new Car().run(); //匿名对象使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。 //如果对一个对象进行多个成员调用,必须给这个对象起个名字。 //匿名对象使用方式二:可以将匿名对象作为实际参数进行传递。
强引用、弱引用、软引用、虚引用
06-面向对象(封装概述).avi
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
07-面向对象(封装private).avi
把属性都隐藏,提供公共方法对其访问。
1 package myFirstCode; 2 3 /* 4 * private:私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。 5 * 私有只在本类中有效。 6 * 7 * 将age私有化以后,类以外即使建立了对象也不能直接访问。 8 * 但是人应该有年龄,就需要在person类中提供对应访问age的方式。 9 * 10 * 注意:私有仅仅是封装的一种表现形式。 11 * 12 * 之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。 13 * 对访问的数据进行操作。提高代码健壮性。 14 */ 15 16 class Person 17 { 18 private int age; 19 public void setAge(int a) 20 { 21 if(a>0 && a<130) 22 { 23 age = a; 24 speak(); 25 } 26 else 27 System.out.println("false age"); 28 } 29 30 public int getAge() 31 { 32 return age; 33 } 34 35 36 void speak() 37 { 38 System.out.println("age = "+age); 39 } 40 } 41 42 43 public class personDemo { 44 45 public static void main(String[] args) { 46 // TODO Auto-generated method stub 47 Person p = new Person(); 48 p.setAge(25); 49 } 50 51 }
08-面向对象(构造函数).avi
特点:
1. 函数名与类名相同
2. 不用定义返回值类型
3. 不可以写return语句
作用:
给对象进行初始化。
注意:
1. 默认构造函数的特点。
2. 多个构造函数是以重载的形式存在的。
1 package myFirstCode; 2 3 /* 4 对象一建立就会调用与之对应的构造函数。 5 构造函数的作用:可以用于给对象进行初始化。 6 7 构造函数的小细节: 8 当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。 9 10 当在类中自定义了构造函数后,默认的构造函数就没有了。 11 12 构造函数和一般函数在写法上有不同。 13 在运行上也有不同。 14 15 构造函数是在对象一建立就运行。给对象初始化。 16 而一般方法是对象调动才执行,是给对象添加对象具备的功能 17 18 一个对象建立,构造函数只运行一次。 19 而一般方法可以被调用多次。 20 21 什么时候定义构造函数呢? 22 当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。 23 */ 24 25 class Person 26 { 27 private String name; 28 private int age; 29 Person() 30 { 31 System.out.println("A: name="+name+",age = "+age); 32 cry(); 33 } 34 35 Person(String n) 36 { 37 name = n; 38 System.out.println("B: name="+name+",age = "+age); 39 cry(); 40 } 41 Person(String n,int a) 42 { 43 name = n; 44 age = a; 45 System.out.println("C: name="+name+",age = "+age); 46 cry(); 47 } 48 49 public void setName(String n) 50 { 51 name = n; 52 53 } 54 public String getName() 55 { 56 return name; 57 } 58 59 60 61 public void cry() 62 { 63 System.out.println("cry......"); 64 } 65 } 66 67 public class personDemo2 { 68 69 public static void main(String[] args) { 70 // TODO Auto-generated method stub 71 Person p1 = new Person(); 72 p1.getName(); 73 Person p2 = new Person("lisi"); 74 p2.setName("wangwu"); 75 System.out.println(p2.getName()); 76 Person p3 = new Person("zhangsan",25); 77 p3.setName("zhaosi"); 78 } 79 80 }
09-面向对象(构造代码块).avi
1 package myFirstCode; 2 3 /* 4 对象一建立就会调用与之对应的构造函数。 5 构造函数的作用:可以用于给对象进行初始化。 6 7 构造函数的小细节: 8 当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。 9 10 当在类中自定义了构造函数后,默认的构造函数就没有了。 11 12 构造函数和一般函数在写法上有不同。 13 在运行上也有不同。 14 15 构造函数是在对象一建立就运行。给对象初始化。 16 而一般方法是对象调动才执行,是给对象添加对象具备的功能 17 18 一个对象建立,构造函数只运行一次。 19 而一般方法可以被调用多次。 20 21 什么时候定义构造函数呢? 22 当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。 23 */ 24 25 class Person 26 { 27 private String name; 28 private int age; 29 30 /* 31 构造代码块 32 作用:给对象进行初始化。 33 对象一建立就运行,而且优先于构造函数执行。 34 和构造函数的区别: 35 构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象进行初始化 36 37 构造代码块中定义的是不同对象共性的初始化内容。 38 */ 39 { 40 System.out.println("person code run"); 41 cry() 42 } 43 44 Person() 45 { 46 System.out.println("A: name="+name+",age = "+age); 47 cry(); 48 } 49 50 Person(String n) 51 { 52 name = n; 53 System.out.println("B: name="+name+",age = "+age); 54 cry(); 55 } 56 Person(String n,int a) 57 { 58 name = n; 59 age = a; 60 System.out.println("C: name="+name+",age = "+age); 61 cry(); 62 } 63 64 public void setName(String n) 65 { 66 name = n; 67 68 } 69 public String getName() 70 { 71 return name; 72 } 73 74 75 76 public void cry() 77 { 78 System.out.println("cry......"); 79 } 80 } 81 82 public class personDemo2 { 83 84 public static void main(String[] args) { 85 // TODO Auto-generated method stub 86 Person p1 = new Person(); 87 p1.getName(); 88 Person p2 = new Person("lisi"); 89 p2.setName("wangwu"); 90 System.out.println(p2.getName()); 91 Person p3 = new Person("zhangsan",25); 92 p3.setName("zhaosi"); 93 } 94 95 }
10-面向对象(this关键字).avi
1 package myFirstCode; 2 3 /* 4 this:看上去,是用于区分局部变量和成员变量同名情况。 5 this为什么可以解决这个问题? 6 this到底代表的是什么呢? 7 8 this:就代表本类的对象,到底代表哪一个呢? 9 this代表它所在函数所属对象的引用。 10 简单说,哪个对象在调用this所在的函数,this就代表哪个对象。 11 */ 12 13 class Person 14 { 15 private String name; 16 private int age; 17 Person(String name) 18 { 19 this.name = name; 20 } 21 Person(String n,int a) 22 { 23 name = n; 24 age = a; 25 } 26 27 public void speak() 28 { 29 System.out.println("name = "+this.name+' '+"age = "+this.age); 30 } 31 public void show() 32 { 33 System.out.println(this.name); 34 } 35 } 36 37 38 public class personDemo3 { 39 40 public static void main(String[] args) { 41 // TODO Auto-generated method stub 42 Person p = new Person("lisi"); 43 p.speak(); 44 45 } 46 47 }
11-面向对象(this关键字的应用).avi
1 package myFirstCode; 2 3 /* 4 this:看上去,是用于区分局部变量和成员变量同名情况。 5 this为什么可以解决这个问题? 6 this到底代表的是什么呢? 7 8 this:就代表本类的对象,到底代表哪一个呢? 9 this代表它所在函数所属对象的引用。 10 简单说,哪个对象在调用this所在的函数,this就代表哪个对象。 11 12 13 this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。 14 但凡本类功能内部使用了本类对象,都用this表示。 15 */ 16 17 class Person 18 { 19 private String name; 20 private int age; 21 Person(int age) 22 { 23 this.age = age; 24 } 25 Person(String n,int a) 26 { 27 name = n; 28 age = a; 29 } 30 31 public void speak() 32 { 33 System.out.println("name = "+this.name+' '+"age = "+this.age); 34 } 35 public void show() 36 { 37 System.out.println(this.name); 38 } 39 /* 40 * 需求:给人定义一个用于比较年龄是否相同的功能。也就是是否是同龄人。 41 */ 42 public boolean compare(Person p) 43 { 44 return this.age == p.age; 45 } 46 } 47 48 49 50 51 public class personDemo3 { 52 53 public static void main(String[] args) { 54 // TODO Auto-generated method stub 55 // Person p = new Person("lisi"); 56 // p.speak(); 57 Person p1 = new Person(20); 58 Person p2 = new Person(25); 59 boolean b = p1.compare(p2); 60 System.out.println(b); 61 62 } 63 64 }
12-面向对象(this关键字在构造函数间调用).avi
1 package myFirstCode; 2 /* 3 this语句:用于构造函数之间进行互相调用。 4 this语句只能定义在构造函数的第一行。因为初始化要先执行。 5 */ 6 7 class Person 8 { 9 private String name; 10 private int age; 11 Person() 12 { 13 //this("haha") 14 } 15 Person(String name) 16 { 17 this.name = name; 18 } 19 Person(String name,int age) 20 { 21 this.age = age; 22 } 23 } 24 25 public class personDemo4 { 26 27 public static void main(String[] args) { 28 // TODO Auto-generated method stub 29 Person p = new Person("lisi",30); 30 } 31 32 }