新手初学Java面向对象
目录
- java面向对象
- 知识点
- 总结
java面向对象
面向对象【Java语言的核心机制,最重要的内容,Java语言的特色】 * 面向过程和面向对象的区别 - 面向过程:主要关注点是:实现的具体过程,因果关系【集成显卡的开发思路】 * 优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低。 * 缺点:采用面向过程的方式开发很难解决非常复杂的业务逻辑,另外面向过程的 方式导致软件元素之间的“耦合度”非常高,只要其中一环出问题,整个系统受到影响, 导致最终的软件“扩展力”差。另外,由于没有独立体的概念,所以无法达到组件复用。 - 面向对象:主要关注点是:主要关注对象【独立体】能完成哪些功能。【独立显卡的开发思路】 * 优点:耦合度低,扩展力强。更容易解决现实世界当中更复杂的业务逻辑。组件复用性强。 * 缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统分析与设计。 - C语言是纯面向过程的、C++半面向对象、Java纯面向对象 - 现在出现的一些新的编程语言多数都是面向对象的。人在认识现实世界的时候以面向对象的方式。 - 面向对象更符合人的思维方式。 * 面向对象的三大特征【先背会】 - 封装 - 继承 - 多态 所有面向对象的编程语言都有这三大特征。 采用面向对象的方式开发一个软件,生命周期当中:【整个生命周期中贯穿使用OO面向对象方式】 * 面向对象的分析:OOA * 面向对象的设计:OOD * 面向对象的编程:OOP * 类和对象的概念 * 什么是类? - 类在现实世界当中是不存在的,是一个模板,是一个概念。是人类大脑思考抽象的结果。 - 类代表了一类事物。 - 在现实世界当中,对象A与对象B之间具有共同特征,进行抽象总结出一个模板,这个模板被称为类。 * 什么是对象? - 对象是实际存在的个体。现实世界当中实际存在。 * 描述一下整个软件开发的过程: * 程序员先观察现实世界,从现实世界当中寻找对象 * 寻找了N多个对象之后,发现所有的对象都有共同特征 * 程序员在大脑中形成了一个模板【类】 * Java程序员可以通过java代码来表述一个类 * Java程序中有了类的定义 * 然后通过类就可以创建对象 * 有了对象之后,可以让对象直接协作起来形成一个系统。 * 类--【实例化】->对象 * 对象又被称为实例/instance * 对象--【抽象】-->类 * 重点: 类描述的是对象的共同特征。 共同特征例如:身高特征 这个身高特征在访问的时候,必须先创建对象,通过对象去访问这个特征。 因为这个特征具体的某个对象上之后,值不同。有的对象身高1.80,有的 对象身高2.80。 * 一个类主要描述什么信息呢? 一个类主要描述的是 状态 + 动作。 状态信息:名字、身高、性别、年龄 动作信息:吃、唱歌、跳舞、学习 状态--> 一个类的属性 动作--> 一个类的方法 * 类{ 属性; //描述对象的状态信息 方法; //描述对象的动作信息 } 注意: 状态和动作当具体到某个对象上之后,发现最终的结果可能不一样。 对象和对象之间有共同特征,但是具体到对象之后有数据的差异。 * 类的定义【从这里开始编写代码】 语法结构: [修饰符列表] class 类名{ 属性; 方法; } 学生类,描述所有学生对象的共同特征: 学生对象有哪些状态信息: * 学号【int】 * 名字【String】 * 性别【boolean】 * 年龄【int】【年龄是一个属性,年龄是一个数据,是数据就应该有数据类型】 * 住址【String】 ..... 学生对象有哪些动作信息: * 吃饭 * 睡觉 * 学习 * 玩 * 唱歌 * 跳舞 .... 重点:属性通常是采用一个变量的形式来完成定义的。 int no; int age; String name; String address; boolean sex; * java语言中包括两种数据类型: - 基本数据类型 byte short int long float double boolean char - 引用数据类型 String.class SUN提供的 System.class SUN提供的 Student.class 程序员自定义的 User.class 程序员自定义的 Product.class 程序员自定义的 Customer.class 程序员自定义的 ...... - java语言中所有的class都属于引用数据类型。
// 定义一个类,类名Student // Student是一个类,代表了所有的学生对象,是一个学生的模板。 public class Student{ // 定义一个公开的类,起名Student // 属性【描述的是对象的状态信息】 // 熟悉通常采用变量的方式来定义 // 在类体当中,方法体之外定义的变量被称为“成员变量” // 成员变量没有赋值,系统赋默认值:一切箱0看齐。 // 学号 int no; // 姓名 String name; // 性别 boolean sex; // 年龄 int age; // 住址 String address; // 方法 // 方法描述的是对象的动作信息 // 当前例子就只描述属性了 }
// 学生类 // 学生类是一个模板 // 描述了所有学生的共同特征【状态+行为】 // 当前类只描述学生的状态信息【属性】 // Student是类,属于引用数据类型,这个类型名就是:Student public class Student{ // 类体-属性+方法 // 属性【存储数据采用变量的形式】 // 由于变量定义在类体当中,方法体之外,这种变量称为成员变量 // 所有学生都有学好信息 // 但是每一个学生的学号都是不同的 // 所以要访问这个学号必须先创建对象,通过对象去访问学号信息 // 学号信息不能直接通过“类”去访问,所以这种成员变量又被叫做:实例变量 // 对象又被称为实例,实例变量又成为对象变量。【对象级别的变量】 // 不创建对象,这个no变量的内存空间是不存在的,只有创建了对象,这个no变量内存空间才会创建 int no; // 姓名 String name; // 年龄 int age; // 性别 boolean sex; // 住址 String addr; } // 成员变量没有手动赋值的话,系统赋默认值 // 默认值 /* 数据类型 默认值 --------------------------------- byte,short,int,long 0 float,double 0.0 boolean false char \u0000 引用数据类型 null 空值 */ // ----------------------------------------------------------------------------------------------------- /* 对象的创建和使用 */ public class OOTest01 { public static void main(String[] args){ // int 是基本数据类型 // i 是一个变量名 // 10是一个int类型的字面值 int i = 10; // 通过一个类可以实例化N个对象 // 实例化对象的语法:new 类名(); // new是java语言当中的一个运算符 // new运算符的作用是创建对象,在JVM堆内存当中开辟新的内存空间 // 方法区内存:在类加载的时候,class字节码片段被加载到该内存空间当中 // 栈内存(局部变量):方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈 // 堆内存:new的对象在堆内存中存储 // Student是一个应用数据类型 // s 是一个变量名 // new Student()是一个学生对象 // s是一个局部变量【在栈内存中存储】 // 什么是对象?new运算符在堆内存中开辟的内存空间称为对象 // 什么是引用?引用是一个变量,只不过这个变量保存了另一个java对象的内存地址 // java语言当中,程序员不能直接操作堆内存,java中没有指针,不像c语言 // java语言当中,程序员只能通过“引用”去访问堆内存当中对象内部的示例变量 Student s = new Student(); // 访问实例变量的语法格式: // 读取数据:引用.变量名 // 修改数据:引用.变量名 = 值 /* int stuNo = s.no; String stuName = s.name; int stuAge = s.age; boolean stuSex = s.sex; String stuAddr = s.addr; System.out.println("学号 = " + stuNo); System.out.println("姓名 = " + stuName); System.out.println("年龄 = " + stuAge); System.out.println("性别 = " + stuSex); System.out.println("地址 = " + stuAddr); */ s.no = 10; s.name = "jack"; s.age = 20; s.sex = true; s.addr = "深圳"; System.out.println("学号 = " + s.no); // 10 System.out.println("姓名 = " + s.name); // jack System.out.println("年龄 = " + s.age); // 20 System.out.println("性别 = " + s.sex); // true System.out.println("地址 = " + s.addr); // 深圳 // 编译报错,no这个实例变量不能直接采用”类名“的方式访问 // 因为no是实例变量,对象级别的变量,变量存储在java对象的内部,必须先有对象 // 通过对象才能访问no这个实例变量,不能直接通过"类名"访问 // System.out.println(Student.no); // 在通过类实例化一个全新的对象 // stu是一个引用类型 // stu同时也是一个局部变量 // Student是变量的数据类型 Student stu = new Student(); System.out.println("学号 = " + stu.no); // 0 System.out.println("姓名 = " + stu.name); // null System.out.println("年龄 = " + stu.age); // false System.out.println("性别 = " + stu.sex); // 0 System.out.println("地址 = " + stu.addr); // null } } /* 局部变量在栈内存中存储 成员变量中的实例变量在堆内存的java对象内存存储 实例变量是一个对象一份,100个对象有100份。 */
// 用户类 public class User{ // 属性【以下都是成员变量之实例变量】 // 用户编号 // int 是一种基本数据类型:整数型 // no是一个实例变量 int no; // 用户名 // String 是一种引用数据类型:代表字符串 // name是一个实例变量 // name是一个引用 String name; // 家庭住址 // Adddress是一种引用数据类型:代表家庭住址 // addr是一个实例变量 // addr是一个引用 Address addr; } // ---------------------------------------------------------------------- // 家庭住址类 public class Address{ // 属性成员变量之实例变量】 // 城市 // String是一种引用数据类型,city是一个变量名,属于实例变量 // oity是一个引用:保存内存地址的一个变量,该变量保存内存地址指向了堆内存当中的对象 String city; // 街道 String street; // 邮编 String zipcode; } // ---------------------------------------------------------------------- // 测试类 public class OOTest02{ public static void main(String[] args){ // 创建User对象 // u是局部变量 // u是一个应用 // u保存内存地址指向堆内存的User对象 User u = new User(); // 输出User对象内部实例变量的值 System.out.println(u.no); // 0 System.out.println(u.name); // null System.out.println(u.addr); // null // 修改User对象内部实例变量的值 u.no = 110; u.name = "jack"; // "jack" 是一个java对象,属于String对象 u.addr = new Address(); // 在main方法当中目前只能看到一个引用“u” // 一切都是只能通过u来进行访问 System.out.println(u.name + "居住在那个城市:" + u.addr.oity); System.out.println(u.name + "居住在那个街道:" + u.addr.street); System.out.println(u.name + "居住在那个邮编:" + u.addr.zipcode); u.addr.oity = "深圳"; u.addr.street = "福田"; u.addr.zipcode = "516600"; System.out.println(u.name + "居住在那个城市:" + u.addr.oity); System.out.println(u.name + "居住在那个街道:" + u.addr.street); System.out.println(u.name + "居住在那个邮编:" + u.addr.zipcode); } }
public class OOTest03{ public static void main(String[] args){ // u是引用 // u是局部变量 User u = new User(); // 上一个版本中编写的 // u.addr = new Address(); // a是引用 // a是局部变量 Address a = new Address(); u.addr = a; System.out.println(u.addr.city); // null a.city = "天津"; System.out.println(u.addr.city); // 天津 u.addr.city = "深圳"; System.out.println(u.addr.city); // 深圳 } }
// 丈夫类 public class Husband{ // 姓名 String name; // 丈夫对象当中含有妻子引用 Wife w; } // ----------------------------------------------------------------- // 妻子类 public class Wife{ // 姓名 String name; // 妻子对象当中含有丈夫引用 Husband h; } // ------------------------------------------------------------------- public class OOTest04{ public static void main(String[] args){ // 创建一个丈夫对象 Husband huangXiaoMing = new Husband(); huangXiaoMing.name = "黄晓明"; // 创建一个妻子对象 Wife baby = new Wife(); baby.name = "baby"; // 结婚【能通过丈夫找到妻子,通过妻子也可以找到丈夫】 huangXiaoMing.w = baby; baby.h = huangXiaoMing; // 得到以上“黄晓明”的妻子的名字 System.out.println(huangXiaoMing.name + "的妻子名字叫:" + baby.name); System.out.println(huangXiaoMing.name + "的妻子名字叫:" + huangXiaoMing.w.name); } }
知识点
// 顾客类 public class Customer { // id int id; } // ------------------------------------------------------------------------ // 测试程序 public class OOTest05 { public static void main(String[] args){ Customer c = new Customer(); System.out.println(c.id); // 0 c = null; // 以下程序编译可以通过,因为符合语法 // 运行出现空指针异常 // 空应用访问“实例”相关的数据一定会出现空指针异常 // java.lang.NullPointerException System.out.println(c.id); } } // “实例”相关的数据表示:这个数据访问的时候必须有对象的参与,这种数据就是实例相关的数据
/* Java语言是面向对象 要想创建对象必须先定义类 定义类的语法: [修饰符列表] class 类名{ 属性: 方法: } 属性通常采用变量来表示,既然是变量那么变量肯定有数据类型。【数据类型包括:基本数据类型 + 引用数据类型】 属性对应的是状态信息。 观察现实世界当中超市中的商品,发现这所有的商品都有一些共同的特征,例如,每一个商品都有编号,每一个商品都有单价,所以定义以下的类,来代表所有的商品 */ public class Product{ // 编号 【通常是一个数字,而且该数字通常是整数型的】 // productNo 是基本数据类型 // 实例变量 int productNo; // 单价 【通常是一个数字,但是数字可能带有小数,所以采用浮点型数据double表示】 // price 是基本数据类型 // 实例变量 double price; // ---------------------------------------------------------------------- /* 每一个类中都可以编写主方法,但是一般情况下 一个系统只有一个入口,所以主方法一般写一个 */ public class ProductTest{ // 商品测试类 // 程序入口 public static void main(String[] args){ // 创建对象,商品对象 // iphone7 局部变量 // iphone7 应用 // iphone7 变量中保存内存地址的指向堆内存当中的商品对象 Product iphone7 = new Product(); // 访问实例变量的语法:引用.变量 // 读取:引用.变量名 System.out.println("商品的编号:" + iphone7.productNo); System.out.println("商品的单价:" + iphone7.price); // 修改:引用.变量名 = 值; iphone7.productNo = 111; iphone7.price = 68000; System.out.println("商品的编号:" + iphone7.productNo); System.out.println("商品的单价:" + iphone7.price); } }
// 人类 public class Ren{ // 身份证号 String id; // 名字 String name; // 性别 boolean sex; // 年龄 int age; } // ------------------------------------------------------------------------- /* 别墅类 * 面积 * 主人 */ public class BieShu{ // 面积 double mianJi; // 主人【人类】 // 变量/应引用 // 变量怎么声明:数据类型 变量名; // 关联关系: A has a B 关系【A对象中含有B对象的引用】 // BieShu对象含有Ren对象的引用 Ren zhuRen; } // ---------------------------------------------------------------------- public class Test{ public static void main(String[] args){ // 思路:先创造人物对象,再创造别墅对象,让别墅有主人 Ren zhangsan = new Ren(); // 初始化 // 不采用系统默认值 // 手动赋值 zhangsan.id = "45682110"; zhangsan.name = "张三"; zhangsan.sex = true; zhangsan.age = 100; // 创建别墅对象 BieShu fangzi = new BieShu(); fangzi.mianJi = 150.0; fangzi.zhuRen = zhangsan; // 想知道房子主人的名字是什么? System.out.println(fangzi.zhuRen.name); // 房子换主人 // 创建一个新的主人对象 Ren lisi = new Ren(); lisi.name = "李四"; // 换主人 fangzi.zhuRen = lisi; System.out.println(fangzi.zhuRen.name); } }
// 学生类 class Student{ String name; int no; // 笔记本 Notebook book; } // ---------------------------------------------------------------------- // 笔记本类 class Notebook{ // 品牌 String brand; // 型号 String model; // 颜色 String color; } // ---------------------------------------------------------------------- /* 需求: 定义一个计算机类【电脑/笔记本】,计算机类有那些属性 * 品牌 * 型号 * 颜色 定义一个学生类,学生类有那些属性: * 姓名 * 学号 * 学生有一台笔记本电脑 请编写程序来表示以上的类,然后分别将类创建为对象,对象数量不限,然后让其中的一个学生去使用其中的一台笔记本电脑 然后编译并运行,并且将整个执行过程采用图形的方式描述出来。 */ // 测试类 public class OOTest06{ public static void main(String[] args){ // 创建笔记本对象 Notebook BiJiBen = new Notebook(); // 手动赋值 BiJiBen.brand = "华为"; BiJiBen.model = "KX100"; BiJiBen.color = "黑色"; // 创建学生对象 Student s = new Student(); // 手动赋值 s.no = 111; s.name = "jack"; s.book = BiJiBen; System.out.println(s.name); System.out.println(s.no); System.out.println(s.book.brand); // 让这个学生和笔记本对象产生关系【通过学生能找到他的笔记本】 System.out.println("学号:" + s.no + " 名字叫 " + s.name + " 的电脑品牌是:" + s.book.brand); System.out.println("学号:" + s.no + " 名字叫 " + s.name + " 的电脑品牌是:" + s.book.model); System.out.println("学号:" + s.no + " 名字叫 " + s.name + " 的电脑品牌是:" + s.book.color); // 修改品牌 s.book.brand = "苹果"; System.out.println("学号:" + s.no + " 名字叫 " + s.name + " 的电脑品牌是:" + s.book.brand); } }
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!
赞 (0)