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 ); } }
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!
原文链接:https://HdhCmsTestcnblogs测试数据/Axianba/p/14949743.html
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did214444