| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Day10 (代码块,继承,Math,类Test,面试题) -> 正文阅读 |
|
[Java知识库]Day10 (代码块,继承,Math,类Test,面试题) |
一、代码块: ? ? ? ? ? ?在Java中,使用{}括起来的代码成为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解) ? ? ? 局部代码块: ? ? ? ? ? 在方法中出现,限定变量的生命周期,及早释放提高内存的利用,在同一个类中的同一个方法中,如果存在多个代码块执行顺序是自上而下的。 ? ? ? ?构造代码块:(在创建对象的时候调用) ? ? ? ? ? ? 定义在类中方法外,当一个类中既存在构造代码块,也存在构造方法的时候,在创建对象时会先执行构造代码块,后执行构造方法,无论类中有多少个构造代码块,构造代码块之间会先进行自上而下的顺序执行,然后再执行构造方法 ? ? ? ? 构造代码块---构造方法 ? ? ? ? 静态代码块: ? ? ? ? ? ?在类中方法外定义,并加上static修饰 ? ? ? ? ? ?静态代码块是优于其他代码块执行 ? ? ? ? ? 静态代码块--->局部代码块--->构造代码块--->构造方法 ? ? ? ? ? 在加载的时候执行,并且只执行一次 public class CodeDemo{ ? ? ?//静态代码块 ? ? ?static { ? ? ?int a = 22; ? ? ? ? ?System.out.println(22); ? ? ? } ? ? CodeDemo(){ ? ? ?int y = 300; ? ? ? ? System.out.println(y); ? ? ?} ? ? //定义在类中方法外,使用大括号括起来的代码,称之为构造代码块 ? ? { ? ? ? ?int x = 200; ? ? ? ? ?System.out.println(x); ? ? } ? ? { ? ? ? ?int x = 400; ? ? ? ? ?System.out.println(x); ? ? ? } ? ? ?{ ? ? ? ? int x = 500; ? ? ? ? ? ? ?System.out.println(x); ? ? } ? ?//静态代码块 ? ?static { ? ? ? int a= 11; ? ? ? System.out.println(a); ? } ? public static void main(String[] args){ ? ?//局部代码块 ? ? ? { ? ? ? ? ?int x = 10; ? ? ? ? ?System.out.println(x); ? ? ? ?} //? ? ? System.out.println(x); ? ? ? ? { ? ? ? ? ? ? int y = 20; ? ? ? ? ? ? System.out.println(y); ? ? ? ? } ? ? ? ? { ? ? ? ? ? ? int z = 30; ? ? ? ? ? ? System.out.println(z); ? ? ? ? ?} ? ? ? ? ?CodeDemo codeDemo = new CodeDemo(); ? ? ? ? ?CodeDemo codeDemo2 = new CodeDemo(); //? ? ? ? { //? ? ? ? ? ?int z = 40; //? ? ? ? ? ?System.out.println(z); //? ? ? ? ?} ? ? ? } } CodeTest: class Student2{ ? ? static { ? ? ? ?Systenm.out.println("这是在Studeng2类中静态代码块");//1 ? ? } ? ? { ? ? ? ? ?System.out.println("这是在Student2类中的构造代码块");//2 ? ? } ? ? { ? ? Student2(){ ? ? ? ? ?System.out.println("这是在Student2类中的无参构造方法");//3 ? ? ?} } // 4 5 6 1 2 3 public class CodeTest{ ? ? static { ? ? ? ? System.out.println("这是在CodeTest类中的静态代码块");//4 ? ? } ? ? public static void main(String[] args){ ? ? ? ? ?System.out.println("开始执行main方法");//5 ? ? ? ? ?{ ? ? ? ? ? ? ?System.out.println("这是在CodeTest中的局部代码块");//6 ? ? ? ? ? } ? ? ? ? ? Student2 student2 = new Student2(); ? ? ? } } 【】Draw public class Draw { ? ? private inr count,lines; ? ? public Draw(){} ? ? public Draw(int count,int lines){ ? ? ? ? ?this.count = count; ? ? ? ? ?this.lines = lines; ? ? ?} ?//直角三角形 ? ? ? public void drawTrina(){ ? ? ? ? ? for(int i = 0;i < lines;i++){ //共lines行 ? ? ? ? ? ? ? for(int j = 0;j < i;j++){? //每次增加1 ? ? ? ? ? ? ? ? ?System.out.print("*"); ? ? ? ? ? ? ? } ? ? ? ? ? ? ?System.out.println(); //换行 ? ? ? ? ?} } //输出矩形 public void drawRec(){ ? ? ?for(int i = 0;i<lines;i++){ ? ? ? ? ? for(int j = 0; j <i ;j++){? //每行数量固定 ? ? ? ? ? ? ?System.out.print("*"); ? ? ? ? ? } ? ? ? ? ? System.out.println(); ? ? ? ?} } // 平行四边形 public void drawPra(){ ? ? for(int i = 0;i <lines;i++){ ? ? ? ?for(int k = 0;k <i;k++){ ? ? ? ? ? System.out.print(" "); ? ? ? ? } ? ? ? ? for(int j = 0;j < count;j++){ ? ? ? ? ? ? System.out.print("*"); ? ? ? ? ?} ? ? ? ? ? System.out.println(); ? ? ? } } public static void main(String[] args){ ? ?Draw d = new Draw(5,5); ? ?d.drawTrina(); ? ?System.out.println("==================="); ? ?d.drawRec(); ? ?System.out.println("==================="); ? ?d.drawPra(); ? } } 二、继承 ?1、? 通过观察我们发现,name和age这两个成员变量,以及study()学习方法都是相同的 ? ? ? 如果我们还定义其他的儿子,其他的父亲等等这些类,每定义一次这样的类,是不是要把这些重复内容再写一遍,感觉这样很麻烦 怎么去改进呢? ? ? ? ?能不能这些相同的个内容定义到一个独立的类中,然后再让其他的类与这个独立的类产生一个关系,建立好这个关系之后呢 ? ? ? ?这些其他的累就具备了这个独立类的功能 ? ? ? ?为了实现这样的基数,Java提供了一个技术手段给我们用,也是一个思想:继承 ? ? ? ?父亲: ? ? ? ? ? ? ?2个儿子 ? ? ? ? 继承如何使用代码表示呢? ? ? ? ? 代码的格式是什么样子呢? ? ? ? ? 语句格式:class 子类名 extends 父类名{……} ? ? ? ? 要实现一个继承关系至少需要两个类 ? ? ? ? class Fu{} ? ? ? ? class Zi extends Fu{} ? ? ? ? class?Zi extends Fu{} ? ? ? ? 这里的Zi我们称之为子类,派生类 ? ? ? ? 这里的Fu我们称之为父类,超类,基类 //class Father{ //? ? ?String name; //? ? ? int age; //? ? ? Father(){} //? ? ? getXxx()/setXxx() //? ? ? ?public void study(){ //? ? ? ? ? ? System.out.println("学习"); //? ? ? ? } //} //class Son{ //? ? String name; //? ? int age; //? ? Son(){} //? ? getXxx()/setXxx() //? ? public void study(){ //? ? ? System.out.println("学习"); //? ? } //} class Human{ ? ? String name; ? ? int age; ? ?//getXxx()/setXxx() ? ? public void study(){ ? ? ? ? System.out.println("学习"); ? ? } } class Father exrends Human{ } class Son extends Father{ } public class ExtendsDemo{ ? ? ?public static void main(String[] args){ ? ? ? ? ?//创建一个父亲对象 ? ? ? ? ?Father f1 = new Father(); ? ? ? ? ?f1.study(); ? ? ? ? //创建一个儿子对象 ? ? ? ? Son s1 = new Son(); ? ? ? ? s1.study(); ? ? } } 2、继承:把多个类相同的内容提取到另外一个类中,然后使用关键字extends来实现继承 ? ? ? 如何实现: ? ? ? ? ? ? 利用Java提供的关键字:extends来实现继承 ? ? ? 语句格式: ? ? ? ? ? ? class 子类名 extends 父类名{} ? ? ? 继承的好处: ? ? ? ? ? ? ? 1、提高了代码的复用性 看一看父类 ? ? ? ? ? ? ? 2、提高了代码的维护性 只需要修改父类的内容 ? ? ? ? ? ? ? 3、让类与类之间产生了继承关系,为了后面多态做铺垫(要有继承才能有多态) ? ? ? ?继承的坏处: ? ? ? ? ? ? ? 1、类的耦合性增强了(内聚) ? ? ? ? ? ? ? ? ? ? 开发的原则: ? ? ? ? ? ? ? ? ? ? ? ? ?低耦合,高内聚 ? ? ? ? ? ? ? ? ? ? ? ? ?耦合:类与类之间的关系 ? ? ? ? ? ? ? ? ? ? ? ? ?内聚:类自己本身可以完成的事情 //class Student3{ ?//? ? ?String name; //? ? ? int age; //? ? ? ?Student3(){} //? ? ? ?//getXxx()/setXxx() //? ? ? ?public void eat(){ //? ? ? ? ? ?System.out.println("吃饭"); //? ? ? ? } //? ? ? ? ?public void study(){ //? ? ? ? ? ? ? System.out.println("学习"); //? ? ? ? ?} //} //class Teacher3{ //? ? ?String name; //? ? ?int age; //? ? ?Teacher3(){} //? ? ?//getXxx()/setXxx() //? ? ?public void eat(){ //? ? ? ? ? System.out.println("吃饭"); //? ? ? ?} //? ? ? ?public void study(){ //? ? ? ? ? ?System.out.println("学习"); //? ? ? ? } //} class Person{ ? ? ?String name; ? ? ?int age; ? ? ?Person(){} ? ? ?//getXxx()/setXxx() ? ? ?public void eat(){ ? ? ? ? System.out.println("吃饭"); ? ? ? } ? ? ? public void study(){ ? ? ? ? ?System.out.println("学习"); ? ? ?} } //学生类继承人类之后,拥有了人类中的成员变量,成员方法,也可以自己定义自己的类特有的成员变量和成员方法 class student3 extends Person{ ? ? ?String Id; ? ? ?public void playGame(){ ? ? ? ? ? System.out.println("打游戏"); ? ? ? } } class Teacher3 entends Person{ } public class ExtendsDemo2{ ? ? ?public static void main(string[] args){ ? ? ? ? ? //创建一个学生对象并使用 ? ? ? ? ? Student3 s1 = new Student3(); ? ? ? ? ? s1.eat(); ? ? ? ? ? s1.study(); ? ? ? ? ? s1.playGame(); ? ? ? ? ? //创建一个老师对象 ? ? ? ? ? Teacher3 t1 = new Teacher3(); ? ? ? ? ? ?t1.eat(); ? ? ? ? ? ?t1.study(); ? ? ? ?} } 3、Java中继承的特点: ? ? ? ? ? ? 1、Java中的类class只支持单个继承,不允许多个继承 ? ? ? ? ? ? 2、Java中的类支持多层继承(形成了一个继承体系) // class Father4{} // class Mother4{} // class Son extends Father4,Mother4{} //错误的,不允许这么做 class GrandFather{ ? ? public void show(){ ? ? ? ?System.out.println("我是爷爷"); ? ? } } class Father4 extends GrandFather{ ? ? ?public void show1(){ ? ? ? ? ?System.out.println("我是老子"); ? ? ? } } class Son4 extends Father4{ ? ? ? public void show2(){ ? ? ? ? ? ?System.out.println("我是儿子"); ? ? ? } } public class ExtendsDemo3{ ? ? ?public static void main(String[] args){ ? ? ? ? ? Son4 son4 = new Son4(); ? ? ? ? ? son4.show2();//可以使用自己的方法 ? ? ? ? ? son4.show1();//也可以使用父亲的方法 ? ? ? ? ? son4.show();//也可以使用爷爷的方法 ? ? ? } } 4、使用继承时所需要的注意事项: ? ? ? ? ?1、要想初始化子类,必须先初始化父类 ***** ? ? ? ? ? ? ? ? 举例:先有父亲,才能有儿子 ? ? ? ? ? 2、子类只能继承父类的非私有的成员(成员变量和成员方法) ? ? ? ? ? 3、子类不能继承父类的构造方法,但是可以通过super关键字去访问父类的构造方法,因为想要初始化子类,必须先初始化父类,是通过构造方法进行初始化的 ? ? ? ? ? 4、不要为了部分的功能而去使用继承 ? ? ? ? ? ?class A{ ? ? ? ? ? ? ? ?public void fun1(){} ? ? ? ? ? ? ? ?public void fun2(){} ? ? ? ? ? ? } ? ? ? ? ? ? class B{ ? ? ? ? ? ? ? ? public void fun1(){} ? ? ? ? ? ? ? ? public void fun3(){} ? ? ? ? ? ? ? ? public void fun4(){} ? ? ? ? ? ? ? ? public void fun5(){} ? ? ? ? ? ? ? ? public void fun6(){} ? ? ? ? ? ? ?} ? ? ? ? ? ? ?部分同学认为我们学过了继承,就必须要使用继承,通过观察B类中有一个方法和A类中的方法一样 ? ? ? ? ? ? 用继承实现 ? ? ? ? ? ? class B extends A{ ? ? ? ? ? ? ? ? ?public void fun3(){} ? ? ? ? ? ? ? ? ?public void fun4(){} ? ? ? ? ? ? ? ?? public void fun5(){} ? ? ? ? ? ? ? ? ?public void fun6(){} ? ? ? ? ? ? ?} ? ? ? ? ? ? ?这样并没有提高太大的效率,不推荐!! ? ? ? ? ? ? ?那么,什么时候使用继承呢? ? ? ? ? ? ? ? 在英语中有一个语法叫"is a" ? ? ? ? ? ? ? 当两个类满足语法什么是什么的时候,就可以使用继承了 ? ? ? ? ? ? ? Person? ? ? ? ? ? ? ? ? ?Teacher ? ? ? ? ? ? ? ? ?Student ? ? ? ? ? ? ? ? ?Doctor ? ? ? ? ? ? ?液体: ? ? ? ? ? ? ? ? ? 可乐、水、牛奶 class Father5{ ? ? ?int num = 20; ? ? ?private int num2 = 30; ? ? ?Father5(){ ? ? ? ? ? System.out.println("这是父亲的无参构造方法"); ? ? ?} ? ? ?private void fun1(){ ? ? ? ? ? System.out.println(num); ? ? ? } } class Son5 extends Father5{ ? ? ? public void fun2(){ ? ? ? ? ? System.out.println(num); //? ? ? ? ?System.out.println(num2);//子类不能继承父类的成员变量 ? ? ?} } public class ExtendsDemo4{ ? ? ? ?public static void main(String[] args){ ? ? ? ? ? ?Son5 son5 = new Son5; ? ? ? ? ? ?son5.fun2(); //? ? ? ? ? ?son5.fun1();//子类不能继承父类的私有成员方法 ? ? ? ?} }? 5、继承的使用注意事项2: ? ? ? ??类的组成: ? ? ? ? ? ? ?成员变量 ? ? ? ? ? ? ?构造方法 ? ? ? ? ? ? ?成员方法 ? ? ? ? ? 引入了继承,我们需要注意在写代码的过程中考虑继承关系带来的影响 ? ? ? ?继承与成员变量之间的关系: ? ? ? ? ? ? ?1、当子类中的成员变量与父类中的成员变量名字一样的时候 ? ? ? ? ? ? ? ? ? ? 查找:(就近原则) ? ? ? ? ? ? ? ? ? ? ? ? 1)先在方法的局部范围内查找,如果找到就返回 ? ? ? ? ? ? ? ? ? ? ? ? 2)如果在方法局部范围找不到,去本类中成员位置上查找,如果找到就返回 ? ? ? ? ? ? ? ? ? ? ? ? 3)如果在子类中成员位置上找不到,去父类中成员位置上查找,如果找到就返回 ? ? ? ? ? ? ? ? ? ? ? ? 4)如果在父类成员中找不到,报错 ? ? ? ? ? ? ? 2、当子类中的成员变量与父类中的成员变量名字不一样的时候,使用什么变量名,就访问谁 class Father6{ ? ? int num = 10; ? ? int num2 = 200; ? ? public void show2(){ ? ? ? ? int num = 100; ? ? ? ? int num2 = 20; ? ? ?} } class Son6 extends Father6{ ? ? ? ?int num = 30; ? ? ? int num3 = 300; ? ? ? public void show1(){ //? ? ? ? ?int num = 40; ? ? ? ? ? ?System.out.println(num); ? ? ? ? ? ?System.out.println(num2); ? ? ? ? ? ?System.out.println(num3); ? ? ?} } public class ExtendsDemo5{ ? ? public static void main(String[] args){ ? ? ? ? ?Son6 son6 = new Son6(); ? ? ? ? ?son6.show1(); ? ? ?} } 5、继承中出现的问题: ? ? ? 我们现在不仅仅要输出局部范围内的num。我们还想输出父类中的num,怎么办呢? ? ? ? 如果有一个东西,跟this相似,也可以代表父类的引用,通过这个东西去访问父类中的数据就好了。Java替你考虑到了这个问题,提供了一个关键字供我们使用:super ? ? ? 面试题:this关键字与super关键字的使用区别? ? ? ? ? ? ?this代表的是调用该类的当前对象 ? ? ? ? ? super代表的是父类存储空间的的标识(父类的引用,可以操作父类的成员) ? ? 怎么用呢? ? ? ? ? ?1、访问成员变量 ? ? ? ? ? ? ? this.成员变量 访问的是本类中的成员变量 ? ? ? ? ? ? ?super.成员变量 访问的是父类中的成员变量 ? ? ? ? ? 2、访问构造方法 ? ? ? ? ? ? ? ?this(....) ? ? ? ? ? ? ? ?super(....) ? ? ? ? ? 3、访问成员方法 ? ? ? ? ? ? ? ?this.成员方法() ? ? ? ? ? ? ? ?super.成员方法() class Father7{ ? ? int num = 10; ? ? public void show2(){ ? ? ? ? System.out.println("这是父类中的show2方法"); ? ? } } class Son7 extends Father7{ ? ? ?innt num = 20; ? ? ?public void show(){ ? ? ? ? ? int num = 30; ? ? ? ? ? System.out.println("num"); ? ? ? ? ? System.out.println("this.num");//访问的是本来中的成员变量 ? ? ? ? ? //如何访问到父类中的同名成员变量呢? ? ? ? ? ? System.out.println(super.num);//访问的是父类中的成员变量 ? ? ? ? ? show2(); ? ? ? ? ? super.show(); ? ? ? ? ? show3(); ? ? ? ? ? this.show3(); ? ? ? ? ? } ? ? ? ? ? public void show3(){ ? ? ? ? ? ? ? ?System.out.println("这是Son7类中的show3方法"); ? ? ? ? ? } } public class ExtendsDemo6{ ? ? ? public static void main(String[] args){ ? ? ? ? ? ?Son7 son7 = new son7(); ? ? ? ? ? ?son7.show(); ? ? ? } } 6、继承与构造方法的关系: ? ? ? 1)要想初始化子类,必先初始化父类 ? ? ? 2)为什么? ? ? ? ? ? ? 因为子类会继承父类的数据,甚至可能会使用父类的数据 ? ? ? ? ? ? 所以在子类初始化之前,一定会先完成父类的初始化 ? ? ? ? ? ?注意: ? ? ? ? ? ? ? ? 每个子类的构造方法的第一句话默认是super(). class Father8{ ? ? ?int age; ? ? ?Father8(){ ? ? ? ? ?Systenm.out.println("父类中的无参构造方法"); ? ? ?} ? ? ?Father8(String s){ ? ? ? ? ?System.out.println("这是父类带参数的构造方法" +s); ? ? ?} } class Son8 extends Father8{ ? ? ?Son8(){ ? ? ? ? ? System.out.println("子类带参数的构造方法"); ? ? ? } ? ? ? Son8(String s){ ? ? ? ? ? ?System.out.println("子类带参数的构造方法" +s); ? ? ? ?} } public class ExtendsDemo7{ ? ? ? public static void main(String[] args){ ? ? ? ? ? ?Son8 s1 = new Son8("王宇"); ? ? ? ?} } 7、当父类中没有无参构造方法的时候怎么办呢? ? ? ?1)使用super关键字带参数的形式访问父类的带参数构造方法 ? ? ?2)子类this关键字调用本类的其他构造方法 ? ? ? ? ? 注意,本类其他构造方法也必须可以访问父类拥有的构造方法,使用this关键字间接的调用父类的构造方法,无论在哪里调用父类的构造方法,只要最后保证在子类构造方法内容执行之前完成了父类的初始化就可以了 ? ? ? 3)super(...)或者this(...)必须出现在第一条语句上 ? ? ? 4)否则就会出现父类的数据进行了多次初始化 ? ? ? ? ? (重点)每个类只能初始化一次 class Father9{ ? ? ? int age; //? ? Father8(){ //? ? ? ? ?System.out.println("父类中的无参构造方法"); //? ? ?} ? ? ? ?Father9(String s){ ? ? ? ? ? ? System.out.println("这是父类带参数的构造方法" +s); ? ? ? ? } } class Son9 extends Father9{ ? ? ? Son9(){ ? ? ? ? ? ?super("你好"); ? ? ? ? ? ?System.out.println("子类的无参构造方法"); ? ? ? ?} ? ? ? ?Son9(String s){ ? ? ? ? ? ? this(); ? ? ? ? ? //? ?super("你也好"); ? ? ? ? ? ? System.out.println("子类带参数的构造方法" +s); ? ? ? ?//? ? ? ?this(); ? ? ? ? ?} } public class ExtendsDemo8{ ? ? ? public static void main(String[] args){ ? ? ? ? ? Son9 s1 = new Son9("王宇"); ? ? ? } } 8、继承与成员方法的关系: ? ? ? 1)当子类的成员方法名与父类的成员方法名不一样的时候,该调用谁就调用谁的 ? ? ? 2)当子类的成员方法名与父类的成员方法名一样的时候,怎么办呢?(就近原则) ? ? ? ? ? ?a.先在本类中查找,如果有就调用,如果没有就去父类中查找 ? ? ? ? ? ?b.如果父类中有方法,就调用父类的 ? ? ? ? ? ?c.如果连父类中都没有要调用的方法名,报错,提示找不到方法 class Father10{ ? ? ? public void show(){ ? ? ? ? ? System.out.println("这是父类中的show方法"); ? ? ? } } class Son10 extends Father10{ //? ? ? public void show(){ //? ? ? ? ? ?System.out.println("这是子类中的show方法"); //? ? ? } ? ? ? ? public void show2(){ ? ? ? ? ? ?System.out.println("这是子类中的show2方法"); ? ? ? ? ?} } public class ExtendsDemo9{ ? ? ?public static void main(String[] args){ ? ? ? ? ? ?Son10 son10 = new Son10(); ? ? ? ? ? ?son10.show2(); ? ? ? ? ? ?son10.show(); ? ? ?} } 9、重写: ? ? ?1)子类的方法名能不能和父类的方法名一样? ?如果子类的方法声明与父类的方法声明一样,这样的现象叫做方法的重写。 ?重写的现象是发生在继承的关系中 ? ? ? 2)面试题: ? ? ? ? ? ? ? ? 重写与重载的区别: ? ? ? ? ? ? ? ? ? ? 重写是发生在继承的关系中,重载是发生在本类中 ? ? ? ? ? ? ? ? ? ? 重载是方法名一致,参数列表不一致就是重载 ? ? ? ? ? ? ? ? ? ? 重写是方法名,参数列表,返回值都一样,实现不一样,叫方法的重写 ? ? ? ? ? ? ? ? ? ? 重载的英文单词是:overload ? ? ? ? ? ? ? ? ? ? 重写的英文单词是:override ? ? ? ? ?生活中有哪些重写案例? ? ? ? ? ?水杯--保温杯 class OldPhone{ ? ? public void call(String name){ ? ? ? ? System.out.println("给"+ name +"电话"); ? ? ?} } class newPhone extends OldPhone{ ? ? ?@Override ? ? ? public void call(String name){ ? ? ? ? ? super.call(name); ? ? ? ? ? System.out.println("看抖音"); ? ? ? ?} //? ? ? public vodi call(String name){ //? ? ? ? ?System.out.println("打电话给'+name); //? ? ? ? ?System.out.println("看抖音'); //? ? ? ?} //} public class ExtendsDemo10{ ? ? ?public static void main(String[] args){ ? ? ? ? ?newPhone newPhone = new newPhone(); ? ? ? ? ?newPhone.call("王宇"); ? ? } } 10、ExtendsTest1 class Fu{ ? ? ?public Fu(){ ? ? ? ? ? system.out.println("fu"); ? ? ?} } class Zi extends fu{ ? ? ?public int num = 20; ? ? ?public Zi(){ ? ? ? ? ?//super() ? ? ? ? ?System.out.println("Zi"); ? ? ? } ? ? ? public void show(){ ? ? ? ? ? int num = 30; ? ? ? ? ? System.out.println(num); ? ? ? ? ? System.out.println(this.num); ? ? ? ? ? System.out.println(super.num); ? ? ? ?} } class ExtendsTest1{ ? ? ? public static void main(String[] args){ ? ? ? ? ? Zi z = new Zi(); ? ? ? ? ? z.show(); ? ?} } 11、ExtendsTest2: ? ? ? ? 一个类的初始化过程: ? ? ? ? ? ? ?1)栈开辟空间 ? ? ? ? ? ? ?2)堆开辟空间给对象 ? ? ? ? ? ? ?3)成员变量的值是系统默认值 ? ? ? ? ? ? ?4)成员变量显式赋值 ? ? ? ? ? ? ?5)构造方法赋值 class X{ ? ? Y b = new Y();//1 ? ? X(){ ? ? ? ? System.out.println("X');//3 ? ? ?} } class Y{ ? ? ?Y(){ ? ? ? ? ?System.out.println("Y");//2 ? ? ? } } class Z extends X{ ? ? ?Y y = new Y(); ? ? ?Z(){ //? ? ? ?super();//这里的super()存在的意义不大 因为已经初始化过了 ? ? ? ? ?System.out.println("Z'); ? ? ?} } public class ExtendsTest2{ ? ? ?public static void main(String[] args){ ? ? ? ? ? new Z(); ? ? ?} } 二、Math ? ? ? ? ?1、猜数字小游戏(1-100) ? ? ? ?分析: ? ? ? ? ? ? 1)使用Math类中的random()方法获取一个随机数,经过转换得到1-100之间的书random ? ? ? ? ? ? 2)键盘录入猜的数据 number ? ? ? ? ? ? 3)将我们猜的数据与随机生成的数据进行比较 ? ? ? ? ? ? ? ? ?number > random:猜的数字大了 ? ? ? ? ? ? ? ? ?number < random:猜的数字小了 ? ? ? ? ? ? ? ? ?number == random:恭喜你,猜对了 ? ? ? ? ? ? 4)多给几次机会,直到猜中,由于不知道要猜多少次,用while循环 import java.until.Scanner; public class GuessNumber{ ? ? public static void main(String[] args){ ? ? ? ? //Math类使用random()方法产生1-100随机数 ? ? ? ? int random = (int) (Math.random() *100 +1); ? ? ? ? System.out.println("随机数已经生成,请开始猜........"); ? ? ? ? //键盘对象 ? ? ? ? Scanner sc = new Scanner(System.in); ? ? ? ? while (true){ ? ? ? ? ? ? ?System.out.println("请输入一个数据:"); ? ? ? ? ? ? ?int number = sc.nextInt(); ? ? ? ? ? ? ?if (number > random){ ? ? ? ? ? ? ? ? ?System.out.println("您猜的数据大了,请往小了的猜"); ? ? ? ? ? ? ?}else if (number < random){ ? ? ? ? ? ? ? ? ? System.out.println("您猜的数据小了,请往大了的猜"); ? ? ? ? ? ? ?}else { ? ? ? ? ? ? ? ? ? ?System.out.println("恭喜你,猜中了,奖励保时捷5元代金券,猜中的数字为:"+random); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? } ? ? ? ? ? ?}? ?? ? ? ? ?} } 2、Math Math:是属于java.lang包下的,所以将来使用的时候不需要导包 Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数 注意: ? ? ? Math类没有构造方法,因为它的成员变量和成员方法都是被static修饰 ? ? ? 可以直接通过类名.静态成员的方式进行访问 掌握一个方法:random() 获取随机数 ? ? 返回一个double值为正号,大于等于0.0,小于1.0[0.0,1.0] public class MathDemo{ ? ? public static void main(String[] args){ ? ? ? ?//获取一个随机数 //? ? ? ? ?double number = Math.random(); //? ? ? ? ?System.out.println(number); //? ? ? ? ?想要获取一个1-100之间的随机值怎么办呢? //? ? ? ? ?int sum = (int)(Math.random()*100+1); //? ? ? ? ?System.out.println(num); //? ? ? ? ?生成100个1-100之间的随机数 ? ? ? ? ? ?for (int i = 0;i < 100;i++){ ? ? ? ? ? ? ? ?int num = (int) (Math.random()*100+1); ? ? ? ? ? ? ? ?System.out.println(num); ? ? ? ? ? ? } ? ? ? } } ?3、Test1: ? ? ? 请定义一个交通工具(Vehicle)的类其中有:属性:速度(speed)、体积(size)等 ? ? ? ?方法:移动(move())、设置速度(setSpeed(int speed))、加速(speedUp())、减速(speedDown())等 ? ? ? ?最后再测试类Vehicle中的main()中实例化一个交通工具对象并通过方法给它初始化speed,size的值并且通过打印出来 ? ? ? ?另外调用加速,减速的方法对速度进行改变 class Vehicle{ ? ? //定义成员变量 ? ? private int speed; ? ? private int size; ? ? public Vehile(){ ? ? } ? ? public Vehicle(int speed,int size){ ? ? ? ? this.speed = speed; ? ? ? ? this.siaze = size; ? ? } ? ? public int getSpeed(){ ? ? ? ? ?return speed; ? ? } ? ? public void setSpeed(int speed){ ? ? ? ? ?this.speed = speed; ? ? } ? ? public int getSize(){ ? ? ? ? ? return size; ? ? } ? ? public void?setSize(int size){ ? ? ? ? ? ?this.size = size; ? ? } ? ? //移动方法 ? ? public void speedUp(){ ? ? ? ? ?speed = speed +10; ? ? ? ? ?System.out.println("加速后的速度为:"+speed+"km/h"); ? ? ?} ? ? ?//减速方法 ? ? ?public void speedDown(){ ? ? ? ? ? speed = speed -10; ? ? ? ? ? System.out.println("减速后的速度为:" +speed + "km/h"); ? ? ? ?} } public class Test1{ ? ? ?public static void main(String[] args){ ? ? ? ? ? Vehicle vehicle = new Vehicle(50,10); ? ? ? ? ? Vehicle.move(); ? ?//? ? ? vehicle.speedUp(); ? ? ? ? ? vehicle.speedDown(); ? ? ? } } 4、Test2: 定义一个圆类——Circle,在类的内部提供一个属性:半径(r) 同时提供两个方法:计算面积(getArea())和计算周长(getPerimeter()) 通过两个方法计算圆的周长和面积并且对计算的结果进行输出,最后定义一个测试类对Circle类进行使用 class CircleP{ ? ?private int r; ? ?//将无参构造方法去掉原因是一旦创建了之后,半径也就确定了,正常来说,不应该有这个无参构造 //? ?public Circle(){ //? ? } ? ? ? ?public Circle(int r){ ? ? ? ? ? ?this.r = r; ? ? ? ?} ? ? ? ?public double getArea(){ ? ? ? ? ? ?return r*r*3.14; ? ? ? ?} ? ? ? ?public double getPerimeter(){ ? ? ? ? ? ? return 2*3.14*r; ? ? ? ?} ? ? ? ?public int getR(){ ? ? ? ? ? ?return r; ? ? ? ? } } public class Test2{ ? ? ?public static void main(String[] args){ ? ? ? ? ? Circle circle = new Circle(10); ? ? ? ? ? double area = circle.getArea(); ? ? ? ? ? System.out.println("半径为" + circle.getR() + "的圆面积为:" + area); ? ? ? ? ? System.out.println("半径为" + circle.getR() + "的圆的周长为:" + circle.getPerimeter()); ? ? ?} } 5、Test3: 构造方法与重载:定义两个网络用户,要处理的信息有ID、用户密码、emil地址 在建立类的实例时有上三个信息都作为构造函数的参数输入,其中用户ID和用户密码时没有缺省 而emil地址缺省的时候emil地址使用户ID加上字符串"@gameschool.com" class NetUser{ ? ? private String id; ? ? private String password; ? ? private String email; ? ? public NetUser(String id,String psssword){ ? ? ? ? this.id = id; ? ? ? ? this.password = password; ? ? ? ? this.email = id + "@gameschool.com"; ? ? ?} ? ? ?public NetUser(String id,String password,String email){ ? ? ? ? ?this.id = id; ? ? ? ? ?this.password = password; ? ? ? ? ?this.email = email; ? ? ?} ? ? ?public void show(){ ? ? ? ? ?System.out.println("用户ID:"+id+"密码:"+ password+"邮箱:"+email); ? ? ?} } public class Test3{ ? ? public static void main(String[] args){ ? ? ? ? NetUser user; ? ? ? ? Scannner sc = new Scanner(System.in); ? ? ? ? System.out.println("请输入用户ID:"); ? ? ? ? String id = sc.next(); ? ? ? ? Syetem.out.println("请输入用户密码:"); ? ? ? ? String password = sc.next(); ? ? ? ? System.out.println("请问是否需要输入邮箱:(1/2)"); ? ? ? ? int i = sc.nextInt(); ? ? ? ? if(i==1){ ? ? ? ? ? ? System.out.println("请输入用户的邮箱:"); ? ? ? ? ? ? String email = sc.next(); ? ? ? ? ? ? user = new NetUser(id,password,email); ? ? ? ? }else if(i==2){ ? ? ? ? ? ? ?user = new NetUser(id,password); ? ? ? ? }else { ? ? ? ? ? ? ?System.out.println("您输入的有误!"); ? ? ? ? ? ? ?user = new NetUser("null","null","null"); ? ? ? ? } ? ? ? ? user.show(); ? ? } } 6、Test4: sNO表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩 import java.until.Scanner; class Student{ ? ? private String sNO; ? ? private String sName; ? ? private String sSex; ? ? private innt sAge; ? ? private int sJava; ? ? public student(){ ? ? } ? ? public Student(String sNO,String sName,String sSex,int sAge,int sJava){ ? ? ? ? ?this.sNO = sNO; ? ? ? ? ?this.sName = sName; ? ? ? ? ?this.sSex = sSex; ? ? ? ? ?this.sAge = sAge; ? ? ? ? ?this.sJava = sJava; ? ? ? ?} ? ? ? ?public String getsNO(){ ? ? ? ? ? ? return sNNO; ? ? ? ?} ? ? ? ?public String getsName(){ ? ? ? ? ? ? ? return sName; ? ? ? ?} ? ? ? ?public String getsSex(){ ? ? ? ? ? ? ? return sSex; ?? ? ? } ? ? ? ? public int getsAge(){ ? ? ? ? ? ? ? return sAge; ? ? ? ? } ? ? ? ? public int getsJava(){ ? ? ? ? ? ? ? ?return sJava; ? ? ? ? ?} ? ? ? ? ?public void show(){ ? ? ? ? ? ? ?System.out.println("学号:" + sNO); ? ? ? ? ? ? ?System.out.println("姓名:"+ sName); ? ? ? ? ? ? ?System.out.println("性别:" + sSex); ? ? ? ? ? ? ?System.out.println("年龄:"+ sName); ? ? ? ? ? ? ?System.out.println("java课程成绩:"+sJava); ? ? ? ? } } public class Test4{ ? ? public static void main(String[] args){ ? ? ? ? ?Scanner sc = new Scanner(System.in); ? ? ? ? ?//定义一个数组存放5个学生对象的Java成绩 ? ? ? ? ?Student[] arr = new Student[5]; ? ? ? ? ?Student s; ? ? ? ? ?//创建5个学生对象 ? ? ? ? ?for (int i=0;i<4;i++){ ? ? ? ? ? ? ? ?System.out.println("请输入第"+(i+1)+"学生的信息:"); ? ? ? ? ? ? ? ?System.out.println("请输入学生的学号:"); ? ? ? ? ? ? ? ?String sNO = sc.next(); ? ? ? ? ? ? ? ?System.out.println("请输入学生的姓名:"); ? ? ? ? ? ? ? ?String sName = sc.next(); ? ? ? ? ? ? ? ?Syatem.out.println("请输入学生的性别:"); ? ? ? ? ? ? ? ?String sSex = sc.next(); ? ? ? ? ? ? ? ?System.out.println("请输入学生的年龄:"); ? ? ? ? ? ? ? ?int?sAge = sc.next(); ? ? ? ? ? ? ? ?System.out.println("请输入学生的Java成绩"); ? ? ? ? ? ? ? ?int sJava = sc.next(); ? ? ? ? ? ? ? ?s = new Student(sNO,sName,sSex,sAge,sJava); ? ? ? ? ? ? ? ?arr[i] = s; ? ? ? ? ? ? ? ?System.out.println("=================================="); ? ? ? ? ? ?} ? ? ? ? ? ?//调用方法求出5个学生的java成绩平均值 ? ? ? ? ? ?double avgScore = getAvgScore(arr); ? ? ? ? ? ?System.out.println("5位学生的java成绩平均值为:"+ avgScore); ? ? ? ? ? ?System.out.println("*************************************"); ? ? ? ? ? ?//调用方法求出5位学生中Java成绩最高的学生信息 ? ? ? ? ? ?Student student = getMaxScore(arr); ? ? ? ? ? ?System.out.println("java成绩最高的学生为:"); ? ? ? ? ? ?student.show(); ? ? ? ? ? ?System.out.println("*************************************"); ? ? ? ? ? ?//调用方法求出5位学生中java成绩最低的学生信息 ? ? ? ? ? ?Student student2 = getMinScore(arr); ? ? ? ? ? ?System.out.println("java成绩最低的学生为:"); ? ? ? ? ? ?student2.show(); ? ? ? } ? ? ? public static Student getMinScore(Student[] args){ ? ? ? ? ? ?int min = array[0].getsJava(); ? ? ? ? ? ?//定义一个索引保留最终java成绩最高的那个学生索引 ? ? ? ? ? ?int index = 0; ? ? ? ? ? ?for(int i = 1;i <arr.length;i++){ ? ? ? ? ? ? ? ? if(array[i].getsJava()<min){ ? ? ? ? ? ? ? ? ? ? min = array[i].getsJava(); ? ? ? ? ? ? ? ? ? ? index = i; ? ? ? ? ? ? ? ? } ? ? ? ? ? ?} ? ? ? ? ? ?return array[index]; ? ? ? ?} ? ? ? ?public static Student getMaxScore(Student[] array){ ? ? ? ? ? ? int max = array[0].getsJava(); ? ? ? ? ? ? //定义一个索引保留最终Java成绩最高的那个学生索引 ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? for(int i = 1; i<array.length;i++){ ? ? ? ? ? ? ? ? ?if(array[i].getsJava()>max){ ? ? ? ? ? ? ? ? ? ? ? max = array[i].getsJava(); ? ? ? ? ? ? ? ? ? ? ? index = i; ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? return array[index]; ? ? ? ? } ? ? ? ? public static double getAvgScore(Student[] array){ ? ? ? ? ? ? ?int sum = 0; ? ? ? ? ? ? ?for (int i = 0;i <array.length;i++){ ? ? ? ? ? ? ? ? ? ?sum = sum + array[i].getsJava(); ? ? ? ? ? ? ?} ? ? ? ? ? ? ?return (sum*1.0)/array.length; ? ? ? } }? ? ? ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:41:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |