新手初学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语言中包括两种数据类型:- 基本数据类型byteshortintlongfloatdoublebooleanchar- 引用数据类型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是类,属于引用数据类型,这个类型名就是:Studentpublic class Student{// 类体-属性+方法// 属性【存储数据采用变量的形式】// 由于变量定义在类体当中,方法体之外,这种变量称为成员变量// 所有学生都有学好信息// 但是每一个学生的学号都是不同的// 所以要访问这个学号必须先创建对象,通过对象去访问学号信息// 学号信息不能直接通过“类”去访问,所以这种成员变量又被叫做:实例变量// 对象又被称为实例,实例变量又成为对象变量。【对象级别的变量】// 不创建对象,这个no变量的内存空间是不存在的,只有创建了对象,这个no变量内存空间才会创建int no; // 姓名String name; // 年龄int age; // 性别boolean sex; // 住址String addr; }// 成员变量没有手动赋值的话,系统赋默认值// 默认值/*数据类型默认值---------------------------------byte,short,int,long0float,double0.0booleanfalsechar\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); // 10System.out.println("姓名 = " + s.name); // jackSystem.out.println("年龄 = " + s.age); // 20System.out.println("性别 = " + s.sex); // trueSystem.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); // 0System.out.println("姓名 = " + stu.name); // nullSystem.out.println("年龄 = " + stu.age); // falseSystem.out.println("性别 = " + stu.sex); // 0System.out.println("地址 = " + stu.addr); // null}}/*局部变量在栈内存中存储成员变量中的实例变量在堆内存的java对象内存存储实例变量是一个对象一份,100个对象有100份。*/

新手初学Java面向对象
文章图片

// 用户类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); // 0System.out.println(u.name); // nullSystem.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); }}

新手初学Java面向对象
文章图片

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); // nulla.city = "天津"; System.out.println(u.addr.city); // 天津u.addr.city = "深圳"; System.out.println(u.addr.city); // 深圳}}

新手初学Java面向对象
文章图片

// 丈夫类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); }}

新手初学Java面向对象
文章图片


知识点 新手初学Java面向对象
文章图片

// 顾客类public class Customer{// idint id; }// ------------------------------------------------------------------------// 测试程序public class OOTest05{public static void main(String[] args){Customer c = new Customer(); System.out.println(c.id); // 0c = null; // 以下程序编译可以通过,因为符合语法// 运行出现空指针异常// 空应用访问“实例”相关的数据一定会出现空指针异常// java.lang.NullPointerExceptionSystem.out.println(c.id); }}// “实例”相关的数据表示:这个数据访问的时候必须有对象的参与,这种数据就是实例相关的数据

新手初学Java面向对象
文章图片

/*Java语言是面向对象要想创建对象必须先定义类定义类的语法:[修饰符列表] class 类名{属性:方法:}属性通常采用变量来表示,既然是变量那么变量肯定有数据类型。【数据类型包括:基本数据类型 + 引用数据类型】属性对应的是状态信息。观察现实世界当中超市中的商品,发现这所有的商品都有一些共同的特征,例如,每一个商品都有编号,每一个商品都有单价,所以定义以下的类,来代表所有的商品*/public class Product{// 编号 【通常是一个数字,而且该数字通常是整数型的】// productNo 是基本数据类型// 实例变量int productNo; // 单价 【通常是一个数字,但是数字可能带有小数,所以采用浮点型数据double表示】// price 是基本数据类型// 实例变量double price; // ----------------------------------------------------------------------/*每一个类中都可以编写主方法,但是一般情况下一个系统只有一个入口,所以主方法一般写一个*/public class ProductTest{// 商品测试类// 程序入口public static void main(String[] args){// 创建对象,商品对象// iphone7 局部变量// iphone7 应用// iphone7 变量中保存内存地址的指向堆内存当中的商品对象Productiphone7 = 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); }}


总结 【新手初学Java面向对象】本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

    推荐阅读