ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

第5章 面向对象基础

第5章 面向对象基础 一、面向对象思想面向对象是一种思想这种思想可以让我们写代码的思路更贴切于生活二、类和对象类是一组相关属性和行为的集合将其理解是对象的一张设计图对象根据类设计图创建出来的实体关系根据类创建对象一个类可以创建出多个对象Java中想要创建对象必须先要有类的存在1、类的组成属性名词成员变量 跟之前定义变量的格式一样只不过位置需要放在方法的外面行为动词成员方法 跟之前定义方法的格式一样只不过需要去掉static关键字public class Student { String name 张三;//成员对象一般不赋值使用对象时输出null堆里面的默认值成员变量不赋值也不会出错 int age 23; public void study(){//成员方法 System.out.println(学习Java); public void eat(){ System.out.println(吃饭 } }2、创建对象、使用对象创建对象类名 对象名new 类名();变量的使用格式对象名.变量名;方法的使用格式对象名.方法名实际参数;public class TestStudent { public static void main(String[] args){ //创建对象格式 //类名 对象名 new 类名(); Student stu new Student(); //使用成员变量格式 //对象名.变量名 System.out.println(stu.name); System.out.println(stu.age); stu.name 李四;//每创建完一个对象都应该赋值 stu.age 24; System.out.println(stu.name); System.out.println(stu.age); System.out.println(stu);//2打印对象名看到的是内存地址 //com.itheima.oop.Studentb4c966a //com.itheima.oop.Student全类名 //使用成员方法格式 //对象名.方法名(实际参数; stu.study(); stu.eat(); }3、练习package com.itheima.oop; public class Phone { String brand; String color; int price; public void call(string name){ System.out.println(给 name 打电话); public void sendMessage() { System.out.println(群发短信 }package com.itheima.oop; public class PhoneTest { public static void main(string[] args){ Phone p1 new Phone(); p1.brand小米 p1.color白色; pl.price 4999; Phone p2 new Phone(); p2.brand华为 p2.color黑色 p2.price 6999; System.out.println(p1.brand --- p1.color --- p1.price); System.out.println(p2.brand --- p2.color --- p2.price); p1.callname:张三) p1.sendMessage(); p2.callname:李四) p2.sendMessage(); } }4、类和对象内存图5、成员变量和局部变量区别6、this关键字当局部变量和成员变量重名的时候Java使用的是就近原则this的作用调用本类的成员另外成员变量在方法中为紫色字体package com.itheima.mthis; public class Person { int num 10; public void show() { int num 20; System.out.println(num);//20 System.out.println(this.num);//this.本类成员变量;10 } public void print() { System.out.println(Print...); } public void method() { System.out.println(num);//如果不涉及重名问题this.可以省略不写10 print();//this.本类成员方法()this.可以直接省略不写 } }this介绍代表当前类对象的引用地址 哪一个对象调用的方法方法中的this就代表哪一个对象 p1.print()---this---p1的地址 p2.print()---this---p2的地址this内存图7、构造方法又名构造器初始化一个新建的对象构建、创造对象的时候所调用的方法执行时机创建对象的时候被调用执行每创建一次对象都要执行1格式1.方法名与类名相同大小写也要一致2.没有返回值类型连void都没有3.没有具体的返回值不能由return带回结果数据2构造方法的作用1.本质的作用创建对象2.结合执行时机在创建对象的时候给成员变量赋值构造方法package com.itheima.constructor; public class Student { String name; int age; public Student(string name,int age){//构造方法 this.name name; this.age age; } } package com.itheima.constructor; public class StudentTest { public static void main(string[] args){ Student stu1 new Student(张三,23);//使用构造方法new一个stu1出来实参传递给构造方法初始化stu1的name和age System.out.println(stu1.name --- stu1.age); Student stu2 new Student(name:李四,age:24); System.out.println(stu2.name --- stu2.age); stu1.Student(王五25;//错误构造方法不能单独拿出来使用只能在new对象时使用 } }3构造方法的创建如果没有定义构造方法系统将给出一个默认的无参数构造方法如果定义了构造方法系统将不再提供默认的构造方法4快捷创建带参构造方法在类中右键--Generate--Constructor--ctrla全选--确定5执行流程三、封装1、面向对象三大特征封装、继承、多态2、封装封装就是将数据属性和操作数据的方法捆绑在一起组成一个整体也就是类同时通过访问修饰符来控制对类中属性和方法的访问权限从而实现信息隐藏3、优点更好的维护数据。使用者无需关心内部实现只要知道如何使用即可4、权限修饰符private 同一个类中defalut什么都不写 同一个类中 同一个包中protected 同一个类中 同一个包中 不同包的子类public 任意位置四、JavaBean实体类这个类中的成员变量都要私有并且要对类中提供无参带参构造方法。向外提供相应的getXxxsetXxx方法快捷创建get、set方法在类中右键--Generate--get、set--Constructor--ctrla全选--确定实体类的应用场景是什么 实体类只负责数据存取而对数据的处理交给其他类来完成以实现数据和数据业务处理相分离。五、static修饰成员变量static是静态的意思可以修饰成员变量也可以修饰成员方法static成员变量用于共享数据static修饰成员的特点被其修饰的成员被该类的所有对象所共享多了一种调用方式可以通过类名调用随着类的加载而加载优先于对象存在class User { String name; int age; static int onLineNumber;//被其修饰的成员被该类的所有对象所共享 } public class StaticTest1{ public static void main(String[] args){ User.onLineNumber;//多了一种调用方式可以通过类名调用 User u1 new User(); u1.name张三; u1.age 23; sout(u1.name --- u1.age --- User.onLineNumber); User.onLineNumber; User u2 new User(); u2.name 李四; u2.age 24; sout(u2.name ... u2.age --- User.onLineNumber); } }1、内存图六、static修饰成员方法用于常用工具类类中创建工具类需要用new方法访问占用内存public class ArrayTools { public int getMax(int[] arr) { int maxarr[0]; for (int i 1;i arr.length;i){ if (arr[i] max) { maxarr[i]; } } return max; } } public class ArrayToolsTest{ public static void main(string[]args){ ArrayTools tools new ArrayTools();//不用static时 int[] arr {1122334455}; int max tools.getMax(arr); } }使用static修饰方法时public class ArrayTools{ private ArrayTools(){}//将new对象私有化防止new对象重复加载工具占用内存 public static int getMax(int[] arr) {//使用static修饰工具时工具直接加载到公共static内存 int max arr[0]; for (int i1; iarr.length;i){ if (arr[i] max) { max arr[i]; } } return max; } } public class ArrayToolsTest { public static void main(string[] args){ ArrayTools tools new ArrayTools();//不可new对象因为无法访问private修饰的构造方法 int[]arr {1122334455}; int max ArrayTools.getMax(arr); //直接使用类名.方法名即可 } }七、制作工具类的阅读文档在每个方法上面输入/**回车/** *这是一个数组的工具类内部提供了很多数组的便捷操作 *求最大值求最小值追历打印数组 * version 1.0 * author ys */ public class ArrayTools { private ArrayTools(){} /** *此方法可以从传入的数组中查找最大值并返回 *paramarr需要求最大值的数组 *return返回找到的最大值 */ public static int getMax(int[] arr) { int maxarr[0]; for (int i1;iarr.length;i){ if Carr[i] max) { maxarr[i]; } } return max; } }上侧工具栏展开toolsGenerate JavaDoc选择FileOutput Directory选择生成路径下面勾选框勾上author、versionGenerate生成找到文件夹中的index.html1、static注意事项static中只能访问静态成员直接访问static中没有this关键字public class StaticTest2 { static int num 10;//加上static之后主方法才能访问 public static void main(string[] args){ System.out.println(num); System.out.println(this);//报错静态变量仅加载到堆内存当前变量的地址并没有创建 method(); } } public static void method() {//加上static之后主方法才能访问 System.out.println(method...); }八、重新认识main方法控制台public class HelloWorld { public static void main(String[] args){ System.out.println(Helloworld); } }public:被JVM调用访问权限足够大static:被JVM调用不用创建对象因为main方法是静态的所以测试类中其他方法也需要是静态的void:被JVM调用不需要给JVM返回值main:一个通用的名称虽然不是关键字但是被JVM识别String[] args:以前用于接收键盘录入数据的现在没用String[] args的使用public class MainTest { public static void main(String[] args){ for (int i 0;i args.length; i){ System.out.println(args[i]); } }
返回列表