java学习day05---创建对象的过程&static&继承

xiaoxiao2021-02-28  55

一.创建对象的过程  Student s  = new Student();

public class Test{ public static void main(String[] args) { Student s = new Student(); s.setName("张三"); s.getAge("28"); } } class Student { private String name = "高圆圆"; private int age = 27; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }

创建对象过程如下图:

二.static关键字

特点:1.被static修饰的代码或者,都优于对象存在

          2.static可以被多个对象共享

          3.被static修饰的变量或者方法可以直接用  类名.  调用

注意:静态只能访问静态

关于static的内存分配

含static的程序执行问题

public class Test { static { System.out.println("purple"); } public static void main(String[] args) { System.out.println("blue"); Person person1 = new Person(); Person person2 = new Person(); } } class Person { static { System.out.println("yellow"); } public Person() { System.out.println("orange"); } { System.out.println("green"); } }

上面程序的输出结果?

purple blue yellow green orange green

orange

解释:在Test中,静态代码块在类加载时就已经有了,所以优先于主函数执行,且只执行一次,所以先输出purple,进入主函数入口,按顺序先执行输出语句blue,再创建Person对象,第一次创建,先执行静态代码块输出yellow,再执行成员代码块输出green,再执行构造方法输出orange,因为静态代码只执行 一次,所以第二次创建Person对象,先执行成员代码块输出green,再执行构造方法输出orange即可

三.随机数

在math中有一种方法能产生0~1之间的随机数,产生double类型的数据

用法  double d = Math.random();

用该方法实现猜数字游戏:

import java.util.Scanner; /** * 需求:让电脑产生一个1~100之间的随机数,用户键盘输入,直到输入数字与电脑给出相同 * @author Szy */ public class Test { public static void main(String[] args) { //产生的随机数是0~1之间,扩大100倍即为0~100,因为最后强转为int型,所以只能取到0~99,故+1 int randomNum = (int)(Math.random() * 100 + 1); Scanner s = new Scanner(System.in); while(true) { System.out.println("请输入猜测的数字:"); int num = s.nextInt(); if(num > randomNum) { System.out.println("猜的数字大了"); } else if(num < randomNum) { System.out.println("猜的数字小了"); } else { System.out.println("恭喜你,猜中了!"); break; //当猜中时,结束循环50 } } } }

 四.进行自定义工具

如创建一个数组工具,先将工具的代码实现

package myapi.make_api_02; /** * 当前这个ArrayTool这个类是针对数组操作的工具类,里面提供了遍历数组以及获取数组的最大值和 * 查找数组中第一次出现的索引这些功能 * @version V1.0 * */ public class ArrayTool { /** * 无参构造私有化的目的,是为了不让外界创建对象 */ private ArrayTool() { } /** * 当前这个方法是针对数组遍历的功能 * @param arr 是需要被遍历的数组 */ public static void printArray(int[] arr) { System.out.print("["); for(int x = 0 ; x < arr.length ;x ++) { //判断 if(x==arr.length-1) { System.out.println(arr[x]+"]"); }else { System.out.print(arr[x]+", "); } } } /** * 当前getMax方法是获取数组中最大值的方法 * @param arr 需要遍历的数组 * @return 返回到就是数组中的最大值 */ public static int getMax(int[] arr) { //定义一个参照物,假设为最大值 int max = arr[0] ; //遍历其他元素 for(int x = 1; x < arr.length ;x ++) { //判断 if(arr[x] > max) { max = arr[x] ; } } return max ; } /** * 当前这个方法是查找数组的某个元素在数组中第一次出现的索引 * @param arr 需要遍历的数组 * @param value 所查找的元素 * @return int 返回值即为查找元素的下标,如果未找到,则返回-1 */ public static int getIndex(int[] arr,int value) { //假设找不到 int index = -1 ; //遍历数组 for(int x = 0 ; x < arr.length ; x ++) { //判断 if(arr[x] == value) { //将当前x索引赋值给index index = x ; break ; } } return index ; } }

然后将文件中内容复制一份,但不用包名,放入合适的位置,进入cmd命令,打开文件所在位置,输入javadoc -d -作者名字-version arrayTool.java ,然后会生成相应的html文件,制作完成

五.继承

格式:

class 子类名(派生类) extends 父类名(超类){

} 继承的好处: 1.提高代码的复用性 2.后期利于维护 3.继承关系是多态的前提

继承的特点: 只支持单继承,不支持多继承,但支持多层继承

继承的注意事项: 1.子类继承父类,只能继承父类的非私有的(成员变量和成员方法) 2.子类不能继承父类的构造方法,只能通过super(等会讲)间接的去访问父类的构造方法

3.继承的使用:不要为了部分功能去使用继承!

子类继承父类的时候,如果子类的成员变量名称和父类成员变量名称不一致的情况,分别输出即可!  如果子类继承父类的时候,子类中的变量名称如果和父类名称一致的情况   1.先在子类的局部位置找是否有这个变量,有,就输出   2.如果在类的局部位置找不到,再去子类的成员位置找,是否有这个变量名,有就输出   3.如果在子类的成员位置中找不到,直接就去父类的成员位置中找,有就输出   4.如果还找不到,直接报错!

子类继承父类的时候,super可以间接父类的构造方法   this:当前类的对象

  super:代表父类对象(父类空间标识)

子类继承父类的时候,子类的所有的构造方法,都默认访问父类的无参构造方法

eg:一个简单的继承示例

public class Test { public static void main(String[] args) { Cat c = new Cat(); c.eat(); c.run(); c.speak(); } } class Animal { //父类 public void eat () { System.out.println("动物在吃"); } public void run() { System.out.println("动物在走"); } } class Cat extends Animal { public void speak() { System.out.println("小猫喵喵"); } public void eat () { System.out.println("猫吃鱼"); } public void run() { System.out.println("猫走猫步"); } }

子类继承父类的时候,如果父类的无参构造方法没有给出?会怎么样?  代码报错!如何解决   方式1:在父类手动给出父类的无参构造方法         方式2:在子类的构造方法中,间接的通过super(有参)访问父类的有参构造方法

  方式3:在子类的无参构造方法中,先去间接的访问本类中的有参构造通过this(传参),然后在通过本类中有参构造方法间接的访问父类 的有参构造 super(传参) ;

public class Test { public static void main(String[] args) { //Son s1 = new Son(); Son s2 = new Son("邓紫棋"); } } class Father { //父类 public Father(String s) { System.out.println("父类的有参构造---" + s); } } class Son extends Father { public Son() { this("王菲"); //super("林俊杰"); } public Son(String s) { super("周杰伦"); System.out.println("子类的有参构造---" + s); } }

 

转载请注明原文地址: https://www.6miu.com/read-2627177.html

最新回复(0)