Java学习_基础入门篇知识问题整理

  1. java的核心优势:
    跨平台,由于提供不同系统的jvm可以让javaapp通过jvm面对不同的操作系统
  2. java各个版本的含义:
    javaSE:JAVA STANDARD Edition:标准版:定位个人计算机,java平台的核心,提供丰富的API包含AWT及Swing,此外Applet被FLASH、HTML5取代;必学
    javaEE:JAVA ENTERPRISE EDITION: 企业版,定位服务器,SE的扩展,增加用于服务器开发的类库。如JDBC、Servlet、Request-Response、JSP
    JAVEME:JAVE MICRO EDITION: 微型版,定位消费电子产品,含J2SE一部分核心类,SE的内伸。被Android取代
  3. java的特性和优势:
    ①跨平台/可移植性:如int永远32位
    ②安全性:为网络/分布式环境构建了防病毒,防篡改的系统
    ③面向对象:比C++(兼容C)更彻底,完全面向对象。
    ④简单性:C+±,去除头文件,指针运算,结构,联合,操作符重载,虚基类,基于C易学习
    ⑤高性能:初期性能低,后期优化jvm加入JIT(即时编译技术),通过编译本地化“热点”代码,并缓存起来,提高编译效率。
    ⑥分布式:为Internet分布式环境设计,可处理TCP/IP协议,可通过URL访问网络资源和访问本地文件相似,支持远程方法调用(RMI,Remote Method Invocation),使程序可通过网络方法调用。
    ⑦多线程:带来更好的交互和实时行为。也是成为主流服务端开发语言原因之一。
    ⑧健壮性:去除指针,内存申请和释放等。自带GC;出色的异常机制避免了计算机崩溃和程序崩溃。
  4. java的运行机制:
    源文件.java,通过jdk编译器编译成.class文件,通过JRE的类装载器,字节码校验器,解释器以及JIT进行解释执行,系统运行app
  5. JVM、JRE、JDK区别
    JVM:java virtual machine:虚拟机,执行bytecode字节码的虚拟计算机,定义了:指令集,寄存器集,结构栈,垃圾收集堆,内存区域。负责将java字节码解释运行,解释边运行。
    JRE:java runtime environment:含JVM、库函数、运行java程序必须的文件(只运行javaapp只需要jre)
    JDK:java development kit:含JRE,以及增加编译器和调试器等用于程序开发的文件(开发必备);
    JDK(javac,jar,debugging,tools,javap)》JRE(Java,javaw,libraries,rt,jar)》JVM(JIT)
  6. 标识符的概念及规则、规范:
    概念:用于命名:变量、类、方法名
    规则:用字母、数字、下划线_、 线 开头 由字母、数字、下划线、 、数字组成
    大小写敏感,无长度限制
    不可以为关键字;
    规范:类名:每个单词首字母大写
    方法名、变量:第一个单词首字母小写,其余单词首字母大写,“驼峰原则”
  7. 变量的本质:
    是可操作的连续空间,空间位置确定,内容不定,可通过变量名访问“存储空间”,并进行操作。
    包含:变量名,变量类型,作用域;先声明分配相应长度存储空间,[初始化]后使用;
  8. 变量类型:
    基本类型,引用类型
  9. 变量分类:
    局部变量local variable:声明在语句块活方法内,从属方法或语句块,周期跟随方法活语句块,必须初始化使用;
    成员变量member variable(实例变量):声明于类内部方法外部,丛书对象,周期跟随对象,可默认初始化,
    静态变量static variable(类变量):声明于类内部,static修饰,从属类,周期跟随类加载、卸载、消失,可被更改,所有类对象公用一个。
  10. 常量定义,分类:
    定义:固定的值,(符号常量)用final修饰,一旦初始化不能修改,(静态变量通行不可更改,故而用加上final变成静态常量且需要手动初始化)
    分类:字面常量:1,2,true,’b’,”hello”
    符号常量:用final修饰定义。final double PI = 3.14;
  11. 变量和常量命名规范:
    所有变量、方法、类名:见名知意
    类成员变量:首字母小写,驼峰原则
    局部变量:首字母小写驼峰原则
    常量:大写字母和下划线组合:MAX_VALUE
    类名:首字母大写和驼峰原则:GoodMan
    方法名:首字母小写和驼峰原则
  12. 数据类型分类,详细分类
    基本数据类型(primitive data type):
    数值型:
    整数类型:byte 1byte,short 2byte,int 4byte,long 8byte
    浮点类型:float 4byte,double 8byte
    字符型:char 2byte
    布尔型:boolean 1bit
    引用数据类型(reference data type):(记录的是对象的地址)
    类:class 4byte
    接口:interface 4byte
    数组:array[] 4byte
  13. 整数变量各个类型的范围,表现形式:
    byte 1byte -128-127 (二进制8位,正负各分一半)
    short 2byte -32768-32767
    int 4byte -21亿-21亿
    long 8byte -263-263-1
  14. 整数常量的四种进制表现形式:
    十进制:99,
    八进制:0开头
    十六进制:0X或0x开头
    二进制:0b或0B开头
  15. Java 默认整数(字面)常数类型:
    int ,如果声明long型字面常量可后加L或l(不加可能导致超过int范围,没出错是在范围内的自动转型)
  16. 浮点变量的各个类型和范围
    float 4byte -3.4E38-3.4E38
    double 8byte -3.4E308-3.4E308
    float可精确7位尾数,单常用的是double,精度是float的两倍,
  17. 浮点字面常量的默认类型:
    double
  18. 浮点型字面常量的各进制表现形式:
    十进制:3.14
    科学计数法:314e2,314E-2
    float的字面数值后要加F或f,没有的默认为double类型,可在double后加D或d
  19. 精确的无误差数字计算使用的类:
    java.math.BigDecimal类用于浮点运算,常用于金融领域。
    java.math.BigInteger类常用于整数运算。
  20. 浮点数比较方式:
    通过BigDecimal;
  21. BigDecimal的常用方法:
    BigDecimal.valueOf(double):用于获取精确的浮点值
    subtract(BigDecimal):用于减法。
    multiply(BigDecimal):乘法
    add(BigDecimal):加法
    divide(BigDecimal):除法
    abs(BigDecimal):绝对值
    compareTo(BigDecimal):比较,等为0,大为1,小为-1
    在这里插入图片描述
  22. ‘A’ == “A”的结果,为什么?
    结果是不能比较,编译出错;一个是字符一个是字符串。
  23. char使用的字符集,占空间大小,范围
    Unicode编码表中的字符,占2字节,允许0-65536个字符;编码从‘\u000’到‘\uFFFF’
    u表示Unicode,后加四位16进制。注意‘One’是错的,他是无效字符
  24. char字面常量的表现形式
    char可以用16进制方式也可以直接用字符来表示。
  25. char常用的转义字符\搭配
    \b退格 \u0008
    \n换行 \u000a
    \r回车 \u000d
    \t制表符tab \u0009
    \”双引号 \u0022
    \’单引号 \u0027
    \反斜杠 \u005c
  26. String的本质:
    字符序列:char sequence
  27. boolean常量值true/false在内存中占空间?
    1位
  28. 运算符的分类:8种
    算数运算符(一元,二元)
    赋值运算符
    扩展运算符
    关系运算符(除去大小等等,还有instanceof用于实例相同比较)
    逻辑运算符
    位运算符
    条件运算符
    字符串连接符
  29. %的作用:
    取模,取余数
  30. 二元运算符的运算规则:
    整数运算:
    两个整数字面量为操作数,存在一个为Long,结果也为Long
    没有Long时,都为int,无论操作数是byte和short
    浮点运算:
    有double,结果为double
    两个都为float则结果为float。
    取模运算:
    操作数可为浮点数,一般用整数,结果为“余数”,符号与左边操作数相同。
  31. 一元运算符运算规则:“++/–”自增运算符
    i++:先用后自增
    ++i:后用后自增
    看自增运算符是先是后,在前就先自增。
  32. 关系运算符的操作数类型,结果类型
    =不是关系运算符;
    ==,!= 是所有(基本和引用)数据类型都可以使用;当为引用(如String)时比对的是引用地址。
    '>、>=、<、<='仅针对数值类型(byte/short/int/long,float/double,char)
  33. 逻辑运算符的操作数类型,运算结果类型,&和&&,|和||的区别,逻辑异或^的判断方式:
    操作数和结果类型:boolean值。
    &&是短路与,一旦左边第一个条件为false则直接返回false,&则需要判断所有操作数,此外&的操作数为非boolean时则是位运算与。
    ||是短路与,一旦左边第一个条件为true则直接返回true,|则需要判断所有操作数,此外|的操作数为非boolean时则是位运算非
    短路常用于空指针的预防。
    ^:两个操作数相相为false,不同为true;此外|的操作数为非boolean时则是位运算异或
  34. '3<<2’的值,'12>>3’的值,~3的值:
    3为0b10100b0101:结果为4
    ‘322’,2为3的二进制左移两位,结果为12
    ‘12/2/2/2’,3为12的2进制有右移动3位置.结果为1,同理,'12>>4’结果为0
  35. 字符串连接符“+”规则:
    只要两个操作数中有一个时String类型,则系统将会将另一个操作数自动转换为字符串然后拼接。
  36. 运算符优先级:
    一般逻辑非》逻辑与》逻辑或
    A||B&&C的实际运算为:A||(B&&C)
  37. 数据类型的自动转换:
    在这里插入图片描述
    在这里插入图片描述
    注意字面常量数的范围,如果为默认时别超过int的范围21亿
  38. 强制类型转换的概念:
    又称造型(由大到小):用于显示转换一个数值的类型,可能会出现丢失信息,可能造成精度降低或溢出。
    (type)var
    当出现目标type的范围时,会被截断成不同的值(一般是范围内的循环)
    不可以在布尔类型和任何数值类型之间做强制转换。
  39. Java的键盘输入常用类及方法:
Scanner   scanner =  new Scanner(System.in);
String   name =  scanner.nextLine();
int   age = scanner.nextInt();
  1. 流程控制语句的分类:
    顺序结构,选择结构,循环结构
  2. 程序的本质:
    变量,选择语句,循环语句
  3. 算法的基本构成:
    变量,选择结构,顺序结构,循环结构共同支撑了算法的基本结构
  4. 选择结构的分类:
    If选择结构:if单选择结构,if-else双选择结构,if-else if-else多选择结构
    Switch选择结构。
  5. 获取0-1之间的随机数,
    Java.lang.Math.ramdom();可以生成[0,1)之间的随机数。
  6. If单分支如果不写{}后续代码的执行效果:
    会执行后面的第一条语句。
  7. If-else有时候可以通过那种方式替换:
    1>2?”假的”:”真的”;条件运算符。
  8. If-else if-else多选择结构的执行顺序,以及编写建议:
    执行顺序:从上到下,遇真进入执行并返回
    编写建议:后续分支的条件不要和先序条件有交集。逐层递进,需要理清先后顺序。
  9. switch多选择结构的语法,执行原理:
switch (表达式) {
case 值1: 
语句序列1;
[break];
case 值2:
 语句序列2;
[break];
     … … …      … …
[default:
 默认语句;]
}

根据表达式的值,从相匹配的case标签处开始执行,一直执行到break语句处,或是语句末尾。如果一直不匹配,则进入default(当default存在时)
50. switch中表达式的可用类型:
jdk1.5前:必须是整数,long除外;或者是枚举,不可以为字符串
jdk1.7之后:可以为String
当前表达式可以为:byte,short,int,char,枚举;Stirng(1.7以上)
51. if多分枝和switch多分枝的使用区分:
任何switch多分枝可以通过if多分枝替换;
表区间判断的时候,只能够用if多分枝;
当是对明确值做等值判断时建议使用switch分支,明确。
52. 循环结构的分类:
当型:当布尔表达式条件为true时,反复执行某语句块,当表达式为false时才停止循环。While/for
直到型:先执行某语句,再判断布尔表达式。如果为true,再次执行。反复,直到布尔表达式为false停止。Do-while
53. While循环的使用注意点:
循环开始即判断布尔表达式。先执行先判断
语句中应该有是循环趋向结束的语句,否则陷入死循环。
54. do-while循环的使用注意点:
先执行一次语句,再判断布尔表达式。后执行后判断
语句中应该有是循环趋向结束的语句,否则陷入死循环。
55. for循环的语法,语句执行顺序:
for(初始表达式;布尔表达式;迭代因子){
循环体;
}
A. 初始化部分设置循环变量的初值
B. 条件判断部分为任意布尔表达式
C. 循环语句(可能跳过)
D. 迭代因子控制循环变量的增减
B.。。。。。
56. for循环和while,dowhile的区别:
for循环:支持迭代的通用结构,有效灵活,第一次反复之前,需要执行初始化,再进行布尔表达式的判断;之后执行语句;执行完之后,会执行迭代因子的步进;(先初始化,再判断,后执行,最后迭代)
while:不支持迭代,手动迭代,先判断后执行;
do-while:不支持迭代,手动迭代,先执行后判断。
57. java中逗号分隔符常用于何处:
多个变量声明;for循环初始表达式;布尔表达式;迭代因子的多个分割;多个接口实现;形式参数和实际参数列表分割
58. for循环的循环部分是否可以为空:
可以,但是要用两个分号分隔,表示进入死循环
59. 双层for循环的嵌套方式理解:
外层控制行数,内层控制列数
60. Continue和break的区别
Break:用于控制循环的流程,强行退出循环,不执行循环中剩余的语句;此外,switch多分枝语句中break用于中断分支。不在进行下面的语句
Continue:用于终止某次循环过程,跳过该次循环中的剩余语句,开启下一次循环,for语句中还需要执行迭代因子的步进,在while和dowhile中直接跳回到循环首部。
61. 带标签的break和continue的用法:
由于goto是java的保留字,当前要跳出多层循环需要使用带标签的break和continue
用法:
(只有)在循环语句前,加上 “标签名:”形式声明跳出位置;在循环中通过使用:braek 标签名或者continue 标签名的形式做跳出。
62. 语句块的定义,嵌套的语句块中能声明相同名称的变量吗:
又称复合语句,用{}扩起来的任意数量的简单java语句,决定了局部变量的作用域,块中的程序代码作为整体被执行。且块可以嵌套。
不能。
63. 方法的定义:
用来完成特定功能的代码片段;
用于定义类及类对象的行为特征和功能实现。
方法是类和对象行为特征的抽象。
类是java程序的基本单位,方法从属于类和对象。
64. 方法的调用方式:
对象名.方法名(实参列表);这里的对象名实际是实例引用地址
静态方也法可以直接通过类名调用。非静态方法必须通过实例调用,常见的看到的类内部的没有加对象是因为默认有this指针表示当前创建的对象。
65. 方法使用的注意事项:
实参数目、数据类型、次序必须和方法声明的形式参数一致。
Return语句终止犯法的运行并返回需要类型的数据。无返回值时要用void做返回类型。
Java中方法调用传参,遵循值传递(传递的都是数据的副本,引用类型数据是地址的副本)
基本类型传递的是该数据值的copy值
引用类型传递的是该对象应用的copy值,但指向的是同一个对象。
在这里插入图片描述
66. 方法的重载:overload定义:
指一个类中可以定义多方法名相同,但参数不同的方法。调用时,根据不同的参数自动匹配对应的方法。
67. 构成方法重载的条件:
重载的方法,实际是完全不同的方法,只是名称不一样而已!
不同:形式参数类型,形式参数个数,形式参数顺序
只有返回值不同,不构成方法的重载,会报异常。(不提供根据返回值判断依据)
只有形式参数的名称不同,不构成方法的重载。(无意义)
在这里插入图片描述
注意自动转换类型。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
68. 调用方法,涉及到重载时的匹配方式:
通过调用方法的实际参数的类型,先经行原类型匹配,如果没有,则遵循自动转换类型规则进行匹配,且遵循少跨级原则。如果没有则为异常。
在这里插入图片描述
69. 递归算法的基本思想,内容组成:
自己调用自己
70. 定义递归头:告诉什么时候不再调用方法自身。如果没有尽头则会陷入死循环。
71. 定义递归体:用于实际需要递归处理的具体处理方法,业务处理语句,同时展现进行递归调用。
求n!;

public class TestRecursion{
		public static void main(String[] args){
				long n = 100;
				System.out.printf("%d阶乘的结果:%s%n", n, factorial(n))
		}
		static long factorial(long n){
			if(n==1){//递归头(尽头)
				return n;
			}else{
					return n*factorial(n-1);//递归体  //实际就是  n * (n-1) 这里的n-1就是//需要通过递归求取的  
			)
}
}

调用原理:
在这里插入图片描述
72. 递归的优缺点:
有点:程序简单易懂,易于理解和调试,不强调效率时,用递归。
缺点:(耗时耗内存)大量占用系统堆栈;内存消耗多;当调用层次多时,速度明显慢于循环。此外任何用递归解决的问题,使用循环迭代都能解决。当性能要求高时,用循环。

发布了37 篇原创文章 · 获赞 29 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42755868/article/details/104873492