Java大学习(个人记录用)

Java大学习(个人记录用) 目录Day01关于javaDay02基础语法Day03流程控制语句Day04数组Day05面向对象基础Day06面向对象高级部分Day07面向对象高级Day08常用APIDay01关于java1.Q: Java的起源A: 1995年詹姆斯高斯林于sun公司创建在2009年被Oracle公司收购。2.Q: Java能做什么三大技术平台是哪些A: 能做目前市面上大部分的企业级应用开发。三大技术平台分别是JavaSE、JavaEE、JavaME。3.Q: Jdk由什么组成其中的编译工具是哪个运行工具是哪个Java能够跨平台是依据什么A: 由开发工具与JRE组成JRE又有核心类库与JVM组成。编译工具是Javac.exe。运行工具是Java.exe。Java能够跨平台的依据是JVM,也称Java虚拟机具体来说是每个系统有着对应的Java虚拟机。4.Q: 今天所学的DOS命令都有哪些A: 换盘符D:、E:、查询当前路径下所有的文件dir)、进入下一级目录cd)、退到上一级目录cd..、回到盘符根目录cd/、查看历史命令上下键、清屏cls、自动补全tab、退出exit。Day02基础语法1.Q: 常用的注释都有哪些该如何使用A:单行注释//、多行注释/*。2.Q; 关键字是什么能够被使用吗A:被赋予了特殊含义的英文单词不能被我们拿来做变量、类名等3.Q: 以下数据的类型分别都是什么该如何在程序中写出666、13.14、程序员、我、真假、 。A:整形666、浮点型13.14、字符串“程序员”、字符‘我’、布尔值true、false、空值null。4.Q: 变量需要怎么样才能使用变量是什么类型与数据是什么类型有关吗变量在什么范围内有效可不可以出现同名变量变量定义时需要赋值吗使用时要有值吗一条语句里多个同类型变量用什么分隔A:变量需要被定义才能使用变量是什么类型就要装对应类型的数据变量在自己{}的范围内有效可以出现同名变量但一定不能再同一个范围内变量定义时可以暂时不赋值但使用时内部一定要有值一句话里多个同类型变量用逗号分隔。5.Q: 标识符的命名规则是命名规范是A:规则如下由数字、字母、下划线(_)和美元符($)组成不能以数字开头、不能是关键字、区分大小写命名情况分两种第一种是给变量与方法命名如果是一个单词则全部小写如果是多个单词第二个单词的开头大写第二种情况是给类命名如果是一个单词全部小写如果是多个单词首字母都要大写。6.Q: 基本数据类型中的整数数据类型有哪些浮点数?字符布尔A:byte、short、int、longfloat、doublecharboolean。7.Q: 算数运算符有哪些A:、-、*、/、%。8.Q: 自增自减运算符是哪些int a3,b; b (a)(a)(a--)(--a)(a*50)(a--)a?b?A:自增运算符是自减运算符是--a 2、b 169。9.Q: 类型转换有哪些分别都是怎么转换A:有隐形转换与强制转换小转大为隐性转换、大转小为强制转换。10.Q: 赋值运算符都有哪些a10,b20,ab为A:赋值、加后赋值、减后赋值-、乘后赋值*、除后赋值/、除余后赋值%。答案为a30。11.Q: 关系运算符都有哪些值返回什么A:、!、、、、返回true或false。12.Q: 逻辑运算符都有哪些A:与遇false则false、或|、遇true则true、非、取反、异或^、一样则false非同则true。13.Q: 三元运算符 的执行流程是A: 先计算判断条件的值如果值为true值1就是运行结果如果值为false值2就是运算结果。14.Q: 如何使用Scanner键盘录入显示自己想要输出的东西A:import java.util.Scanner; ​ public class sclianxi { public static void main(String[] args) { String name; System.out.println(请问你的名字是); Scanner name1 new Scanner(System.in); name name1.next(); System.out.println(我知道了你的名字是name);15.Q: 方法的调用格式是什么A:public (static) 返回值类型 方法名参数{ 方法体; return 数据; } ●定义方法时要做到两个明确 明确参数主要是明确参数的类型和数量 明确返回值类型主要是明确方法操作完毕之后是否有结果数据 如果有写对应的数据类型如果没有写void ●调用方法时 void类型的方法直接调用即可 非void类型的方法推荐用变量接收调用 例如class biography public void demo() 则biography a new biography(); a.demo();15.Q: 方法的注意事项有哪些A:方法不调用就不执行 方法与方法之间是平级关系不能嵌套定义 方法的编写顺序和执行顺序无关 方法的返回值类型为void表示该方法没有返回值没有返回值的方法可以省略return语句不写如果要编写return后面不能跟具体的数据。 return语句下面不能编写代码因为永远执行不到属于无效的代码16.Q: 方法重载的格式有哪些A:同一个类中方法名相同参数不同的方法与返回值无关。核心记忆口诀重载看参数个数、类型、顺序其他统统不算数。Day03流程控制语句1.Q: 流程控制语句根据结构可以怎么分A顺序结构分支结构if语句、switch语句循环结构for循环语句、while循环语句、do...while循环语句。2.Q: if语句有什么作用if语句的三种格式A:if执行流程①首先计算判断条件的结果;②如果条件的结果为true就执行语句体1;③如果条件的结果为false就执行语句体2 if(){ }else{ } 格式1单 if 语句条件成立就执行内部的与具体 ​ 格式2if...else语句如果...否则的效果 ​ 格式3if...else if...语句如果需要编写多个判断条件就使用第三种格式3.Q: switch语句有什么作用A:switch通过比较值来决定执行哪条分支; switch分支的执行流程 ①先计算表达式的值再拿着这个值去与case后的值进行匹配 ②与哪个case后的值匹配为true就执行哪个case块的代码遇到break就跳出switch分支 ③如果全部case后的值与之匹配都是false,则执行default块的代码 switch(表达式){ case值1:语句体1; break; case值2:语句体2; break; default:语句体n1; break; }4.Q: for语句有什么作用A:可以让一段代码重复执行很多次也就是循环这个代码。 for(初始化语句条件判断语句条件控制语句迭代语句){ 循环体语句 } 执行初始化语句, 在整个循环期间, 只执行一次 执行判断条件, 看其返回的结果是true, 还是false false : 循环结束 true : 进入第三步 执行循环体语句 执行条件控制语句 回到2继续5.Q: for语句有什么注意事项A:注意事项 1.循环{}中定义的变量在每一轮循环结束后都会从内存中释放 2.循环()中定义的变量在整个循环结束后都会从内存中释放 3.循环语句()和{}之间不要写分号 ​6.Q: while语句有什么作用A:也是一个循环语句。 初始化语句; while(判断语句){ 循环体语句; 控制语句; } ​ 执行流程和for循环执行流程一致 1. 执行初始化语句, 在整个循环期间, 只执行一次 2. 执行判断条件, 看其返回的结果是true, 还是false false : 循环结束 true : 进入第三步 3. 执行循环体语句 4. 执行条件控制语句 5. 回到2继续7.Q: while和for有什么区别什么时候用for什么时候用whileA:功能上是完全一样的for能解决的while也能解决反之亦然 使用规范知道循环次数使用for不知道循环次数建议使用while8.Q: 什么是do...while语句A:do...while也是一个循环语句但它的特点是先执行后判断。 初始化语句; do{ 循环体语句; 条件控制语句; }while(循环条件);9.Q: 三种循环的区别A: 三种循环区别其实主要在于for、while与do...while的区别。前两者都是先判断后执行后者是先执行在判断。10.Q: break与continue分别是什么它们之间的区别是什么A:break:终止当前循环体内容的执行也就是结束当前的整个循环。不在继续循环 continue:跳过某次循环内容的执行继续下一次的执行。跳过这一次循环如果条件仍满足仍要继续循环 break只能在循环与switch中使用continue只能在循环中使用。11.Q: 什么是RandomA:Random 和 Scanner 类似也是 Java 已经写好的类我们可以使用 Random 产生随机数.操作过程①:导包告诉程序去JDK的哪个包中找随机数生成器②:抄代码代表得到随机数生成器对象(东西)③:抄代码生成一个随机数指定随机范围import java.util.Random;public class Test {public static void main(String[]args){Random rnew Random();int num1 r.nextInt(10);}}注意 r.nextInt(n);0~n但是不包含n。即r.nextInt(10)将得到0~9的随机数。Day04数组1.Q: 什么是数组它的定义格式是什么静态初始化是什么A:数组指一种容器可以存储同种类型的多个值. 它的定义格式有两种 ●格式一数据类型[] 数组名 ●范例int[] array ●格式二数据类型 数组名[] ●范例int array[] 而初始化就是在内存中为数组容器开辟空间并将数据存入容器中的过程。 例如int[] array new int[]{ 11, 22, 33 };2.Q: 数组的元素访问是什么怎么访问的A: 数组的元素访问是查询到数组内对应位置的元素访问格式是数组名[索引];索引是数组容器中空间的编号编号从0开始逐个1增长也就是我定义一个数组a,里面数据依次是11、22、33当我输入a[1]时输出的是22。3.Q: 动态初始化是什么与静态初始化的差别在哪A:动态初始化是指初始化时只指定数组长度由系统为数组分配初始值 ●格式数据类型[]数组名new数据类型[数组长度]; ●范例int[]arr new int[3]; ​ 两者的区别在于: - 动态初始化手动指定长度系统分配默认值 - 静态初始化手动指定元素系统计算出数组长度 ​ 使用的场景: 1. 动态初始化不明确要操作的数据。 2. 静态初始化要操作的数据, 需求中已经明确告知了。4.Q: 什么是二维数组它的定义格式是什么A:二维数组是一种容器该容器用于存储一维数组 ●格式数据类型[][]数组名new数据类型[][]{{元素1,元素2},{元素1,元素2}}; ​ ●范例int[][]arr new int[][]{{11,22},{33,44}}; ​ ●简化格式数据类型[][]数组名{{元素1,元素2},{元素1,元素2}}; ​ ●范例int[][]arr {{11,22},{33,44}}; ​ 二维数组元素访问 ●格式数组名[索引][索引]; ​ ●范例int[][]arr new int[][]{{11,22},{33,44}}; arr[1][0];Day05面向对象基础1.Q: 面向对象重点学什么?A: 自己设计对象;使用已有的对象。2.Q: 类和对象的关系是什么?类的组成有哪些格式又有哪些A:依赖关系需要根据类创建对象 数量关系一个类可以创建出多个对象。 ​ 类的组成属性、行为 属性成员变量指描述事物的名词 行为成员方法指描述事物的动词 ​ 创建对象格式类名 对象名 new 类名(); 使用对象格式对象名.变量名; 对象名.方法名();3.Q: 成员变量与局部变量的差别?A:区别成员变量局部变量类中位置不同方法外方法中初始化值不同有默认初始化值没有使用之前需要完成赋值初始化值不同有默认初始化值没用使用前需要完成赋值内存位置不同堆内存栈内存生命周期不同随着对象的创建而存在随着对象的消失而消失随着方法的调用而存在随着方法的运行结束失而消失而消失作用域在自己所归属的大括号中在自己所归属的大括号中4.Q: this关键字的原则是什么?作用是什么A: 就近原则this的作用是调用本类的成员格式如下this.本类成员变量;this.本类成员方法();5.Q: 构造方法的格式是什么它的作用是什么有哪些注意事项A:格式: 1.方法名与类名相同大小写也要一致 2.没有返回值类型连void都没有 3.没有具体的返回值不能由return带回结果数据 ​ 作用: 1.本质作用创建对象 2.其他作用可以在创建对象的过程中给属性赋值 ​ 注意事项: 1.构造方法的创建 ●如果没有定义构造方法系统将给出一个默认的无参数构造方法 ●如果定义了构造方法系统将不再提供默认的构造方法 ​ 2.构造方法的重载 ●构造方法也是方法允许重载关系出现 ​ 3.推荐的使用方式 ●无参数构造方法和带参数构造方法都自己手动给出6.Q: 封装是什么A:封装就是将数据(属性)和操作数据的方法捆绑在一起组成一个整体也就是类。 同时通过访问修饰符来控制对类中属性和方法的访问权限从而实现信息隐藏。 ●更好的维护数据 ●使用者无需关心内部实现只要知道如何使用即可7.Q:static关键字是什么有什么特点A:static是静态的意思可以修饰成员变量也可以修饰成员方法。 特点: ●被其修饰的成员被该类的所有对象所共享 ●多了一种调用方式可以通过类名调用 ●随着类的加载而加载优先于对象存在 ●常用于工具类8.Q: static注意事项有哪些A:static方法中,只能访问静态成员 (直接访问) - 因为 static 的成员随着类的加载而加载非静态的成员需要创建对象后才能使用 - 静态成员存在的时候非静态的成员还没有所以无法在静态方法中访问非静态成员 - 除非创建对象访问 static 中不允许使用 this 关键字 - this 代表对象的地址地址是创建对象之后才有的东西所以 static 中不能使用 this9.Q: 重新认识main方法。A:public class HelloWorld { public static void main(String[]args){ System.out.print1n(HelloWorld); } } ● public: 被JVM调用访问权限足够大 ● static: 被JVM调用不用创建对象 因为main方法是静态的所以测试类中其他方法也需要是静态的 ● void: 被JVM调用不需要给JVM返回值 ● main: 一个通用的名称虽然不是关键字但是被JVM识别 ● String[]args: 以前用于接收键盘录入数据的现在没用 ​Day06面向对象高级部分1.Q: 继承是什么该怎么使用格式是什么有什么特点A:继承是让类与类之间产生关系子父类关系子类可以直接使用父类中非私有的成员。 使用关键字extends使用。 继承的使用格式为: public class 子类名 extends 父类名{} 举个例子: public class Zi extends Fu{} Fu:是父类也被称为基类、超类 Zi:是子类也被称为派生类 最主要的特点是Java只支持单继承不支持多继承但支持多层继承。父类中非私有的属性子类是可以直接使用的。 同理成员变量私有后我们会使用setXxx和getXxx方法。2.Q: 子父类中如果出现了重名的成员变量使用的时候会使用哪个A:出现这种情况会使用就近原则。在没有特别修饰的情况下优先寻找方法内的变量。 在有this关键字修饰的情况下优先去查询当前本类的成员变量。 在有super关键字修饰的情况下优先去查询父类的成员变量。 例子如下 class Fu{ int a 10; } ​ class Zi extends Fu{ int a 20; public void method(){ int a 30; System.out.println(a); //就近原则先找方法内输出30 System.out.println(this.a); //有this关键字输出20 System.out.println(super.a); //有super关键字。输出30 } }3.Q: 方法重写是什么有什么使用要求有什么注意事项A:在继承体系中子类可以继承到父类的方法。但有时子类并不想原封不动地继承父类的方法而是想作一定的修改。这就需要采用方法的重写方法重写又称方法覆盖。 使用时需要注意的是子类重写父类方法需要保证方法声明完全一致方法名参数返回值类型需要保持一致。 使用 Override 注解可以校验当前方法, 是否是重写的方法。 需要的注意事项有以下两点: 1.父类中私有方法不能被重写。 2.子类重写父类方法时访问权限必须大于等于父类。4.Q: 继承中构造方法有什么需要注意的A:1.构造方法不能继承子类需要手动编写自己的构造方法。 2.在所有的构造方法中都默认隐藏了一句话 super();通过这句代码来访问父类的空参构造方法。 3.super()必须写在第一行先执行父类的构造在执行子类的构造5.Q: this与super关键字的总结。A:关键字成员变量成员方法构造方法thisthis.成员变量访问本类成员变量this.成员方法访问本类成员方法this.(...)访问本类构造方法supersuper.成员变量访问父类成员变量super.成员方法访问父类成员方法super.(...)访问本类构造方法this() super() 二者都在争夺构造方法的第一行位置所以二者不能共存。即一个构造方法中只能存在一个this()或者super()6.Q: final是什么意思有什么作用A:final关键字是最终的意思可以修饰方法类变量。 ​ 修饰方法表明该方法是最终方法不能被重写。 修饰类表明该类是最终类不能被继承。 修饰变量表明该变量是常量不能再次被赋值。 ​ final修饰的变量就变成了常量常量的命名规范的如下 1. 如果是一个单词: 所有字母大写 MAX 2. 如果是多个单词: 所有字母大写, 中间使用_分割 MAX_VALUE补充: 被fianl修饰的基本数据类型不能修改里面的值。 被final修饰的引用数据类型被修饰的是该引用数据类型的地址值而不是里面的变量 例如:创建名为一个Student的方法。final Student st new Student(张三,23) 在这里被修饰的是st而不是st里面的值 也就是说我仍然可以对里面的值进行修改例如st.setName(李四)7.Q: 抽象和抽象方法是什么格式是什么有什么特点A:抽象类关键字:abstract 抽象类是一种特殊的父类内部允许编写抽象方法 抽象方法是将共性的行为方法抽取到父类之后发现该方法的实现逻辑无法在父类中给出具体明确该方法就可以定义为抽象方法。 ​ 抽象方法的定义格式 : public abstract void 方法名(); 去掉 {} 方法体, 在返回值类型前面加入 abstract 关键字 抽象方法需要存放在抽象类中 ​ 抽象类的定义格式 : abstract class 类名称 {} 在 class 前面加入 abstract 关键字 ​ 抽象方法的特点强制要求子类重写8.Q: 抽象类的注意事项A:1.抽象类不能实例化。 如果可以创建抽象类的对象的话用对象调用一个没有方法体的抽象方法没有任何意义。 2.抽象类中不一定有抽象方法 作用:为了不让外界创建本类的对象 有抽象方法的类一定是抽象类 3.抽象类中可以有构造方法 作用:为了给成员变量赋值 4.抽象类的子类要么重写抽象类中的所有抽象方法(正常内容) 要么子类也是抽象类(意义不大)abstract关键字的冲突问题 与final: 被abstarct修饰的方法强制要求子类重写被final修饰的方法子类不能重写。 与private: 被private修饰的方法强制要求子类重写被private修饰的方法子类不能重写。 与static:被static修饰的方法可以类名调用类名调用抽象方法没有意义。9.Q: 接口是什么格式是什么A:接口体现的思想是对规则的声明java中的接口更多体现的是对行为的抽象。 接口的格式如下: 接口用关键字interface来定义 ​ public interface接口名{} 接口不能实例化 接口和类之间是实现关系通过implements关键字表示 ​ public class类名implements接口名{} 接口的子类(实现类) ​ 要么重写接口中的所有抽象方法 要么是抽象类 ​ 接口是不允许实例化的因为内部的方法都是抽象方法如果允许创建对象就可以调用内部的抽象方法了抽象方法没有逻辑调用起来没意义10.Q: 接口中的成员特点有哪些类与接口之间的各种关系是A:成员变量:只能是常量 默认修饰符public static final 构造方法:没有 成员方法:只能是抽象方法 默认修饰符public abstract ​ ●类和类的关系 继承关系只能单继承但是可以多层继承 ​ ●类和接口的关系 实现关系可以单实现也可以多实现还可以在继承一个类的同时实现多个接口 ​ ●接口和接口的关系 继承关系可以单继承也可以多继承 ​11.Q: 接口新特性有哪些A:新增了默认方法、静态方法、私有默认方法、私有静态方法。xxxxxxxxxx 新增了默认方法、静态方法、私有默认方法、私有静态方法。默认方法 ​ 允许在接口中定义非抽象方法但是需要使用关键字default修饰这些方法就是默认方法 作用解决接口升级的问题 接口中默认方法的定义格式 格式public default返回值类型方法名(参数列表){} 范例public default void show(){} ​ 注意事项: 1.默认方法不是抽象方法所以不强制被重写(但是可以被重写重写的时候去掉default关键字) 2.public可以省略default不能省略 3.如果实现了多个接口多个接口中存在相同的方法声明子类就必须对该方法进行重写静态方法 ​ 接口中允许定义static静态方法 接口中静态方法的定义格式 ●格式public static返回值类型方法名(参数列表){} ●范例public static void show(){} ​ 注意事项 1.静态方法只能通过接口名调用不能通过实现类名或者对象名调用 2.public可以省略static不能省略私有默认/静态方法方法 ​ JDK9版本开始接口允许定义private私有方法 接口中私有方法的定义格式 1.私有默认方法: ●格式1:private返回值类型方法名(参数列表){} ●范例1:private void show(){} ​ 2.私有静态方法: ●格式2:private static返回值类型方法名(参数列表){} ●范例2:private static void method(){}Day07面向对象高级1.Q: 多态是什么使用它要什么前提条件多态的成员访问特点是什么A:多态是指同一个行为具有多个不同表现形式或形态的能力。 ​ 使用多态的前提如下: 1.有继承/实现关系 2.有方法重写 3.有父类引用指向子类对象 ​ 访问特点如下: 成员变量:编译看左边(父类)执行看左边(父类) 成员方法:编译看左边(父类)执行看右边(子类)2.Q: 多态的好处与弊端都有什么转型有什么隐患A:多态的好处提高了程序的扩展性 多态的弊端不能直接使用子类的特有成员想要使用的话需要向下转型。 ​ 转型又分向上转型与向下转型 向上转型从子到父父类引用指向子类对象 格式:父类 引用 new 子类(); 向下转型从父到子将父类引用所指向的对象, 转交给子类类型 格式:子类 引用 (子类) 父类引用; ​ 如果被转的引用类型变量对应的实际类型和目标类型不是同一种类型那么就会报错。 可以使用 instanceOf 关键字解决 使用格式 对象名 instanceof 类型 判断一个对象是否是一个类的实例 通俗的理解判断关键字左边的对象是否是右边的类型返回boolean类型结果3.Q: 关于栈内存、堆内存、方法区。A区域名称存什么栈内存 (Stack)线程私有局部变量、方法调用、引用变量堆内存 (Heap)线程共享对象 (new 出来的)、实例变量方法区 (Method Area线程共享类结构、static 变量、常量、代码字节码核心口诀: new出来的对象 → 永远在堆。 方法里的局部变量 → 永远在栈。 static修饰的 → 永远在方法区。 引用变量 → 在栈但指向堆Day08常用API1.Q: String类用于比较的方法是哪些A:字符串比较 ● equals方法(要比较的字符串) 完全一样结果才是true,否则为false ● equalslgnoreCase(要比较的字符串) 忽略大小写的比较 ​ 例子: String s1 abc; String s2 new String(abc); ​ System.out.println(s1 s2); // false System.out.println(s1.equals(s2)); // true ​ String s3 ABC; System.out.println(s1.equals(s3)); // false System.out.println(s1.equalsIgnoreCase(s3)); // true2.Q: String类和遍历有关的方法有哪些A:toCharArrav()将字符串转换为字符数组 ​ chatAt(int index)根据索引找字符 ​ length():返回字符串的长度3.Q: String类截取方法有哪些A:●substring(int beginlndex,int endindex)截取 注意点包头不包尾包左不包右 只有返回值才是截取的小串 ●substring(int beginlndex)截取到末尾4.Q: String类截取方法有哪些A:● public String replace(旧值新值)替换 注意点返回值才是替换之后的结果 ● public String[]split(String regex): 根据传入的字符串作为规则进行切割将切割后的内容存入字符串数组中并将字符串数组返回5.Q: 什么是StringBuilder有什么方法A:StringBuilder 是字符串的缓冲区, 我们可以将其理解为是一种容器 ​ 构造方法: public StringBuilder() 创建一个空的字符串缓冲区(容器) public StringBuilder(String str) 创建一个字符串缓冲区并初始化好指定的参数内容 ​ 方法名 public StringBuilder append(任意类型) 添加数据并返回对象本身 public stringBuilder reverse() 反转容器中的内容 public int length() 返回长度(字符出现的个数) public String tostring() 通过tostring()就可以实现把stringBuilder转换为string ​6.Q: 什么是集合如何创建集合增删改查分别是哪些A:集合是一种容器用来装数据的类似于数组。 集合和数组的使用选择 数组: 存储的元素个数固定不变 集合: 存储的元素个数经常发生改变 ​ 创建集合的方式为: ArrayListString list new ArrayList(); ​ public boolean add(E e) 将指定的元素添加到此集合的末尾 public void add(int index,E element) 在此集合中的指定位置插入指定的元素 public E get(int index) 返回指定索引处的元素 public int size() 返回集合中的元素的个数 public E remove(int index) 删除指定索引处的元素返回被删除的元素 public boolean remove(object o) 删除指定的元素返回删除是否成功 public E set(int index,E element) 修改指定索引处的元素返回被修改的元素 ​