Corejava知识点

  1. 什么java?一门人和计算机进行交互的语言。学会了,可以控制计算机帮助我们做东西。
  2. 计算机语言,好多种。Java,Python,php.net,C语言,C#,C++,Java和他们区别
  3. 语言的区别:Java和Python主要做应用程序部分,软件。C和C++,嵌入式(硬件,芯片)
  4. 市场占有率,国内60%,全球20%。
  5. java的产生,1995年年底。Java之父是詹姆斯高斯林。(James Gosling
  6. Java的分类:JavaSE(基础语法),JavaEE(SSM之前),JavaME(微机版)
  7. Java包括:jdk,jre和JVM。
    1. Jdk是java的开发的工具包。开发者安装,包含jre和jvm
    2. Jre:java的运行环境。客户现场使用的。安装了jdk还会自动安装一个jre。
    3. Jvm:java虚拟机(底层的东西)
      • 类加载
      • 调优
      • 内存结构
      • 垃圾回收
  8. 环境变量的配置
    1. Path:在任何地方都能执行java命令。编译交给开发工具了。我们配置的时候,需要配置成JAVA_HOME,因为jdk是java开发的基础,后续好多软件需要依赖jdk,他们没法直接用path里面提取jdk路径,公约 JAVA_HOME,指定到jdk的home路径下,根路径。要运行需要到bin路径下,path里面  %JAVA_HOME%\bin,tomcat,maven,oracle的sqldev
    2. Classpath:可以不用配置,编译用的,配置了,然后用记事本写的代码,在电脑任何地方都可以使用  javac命令(早都不用了)
  9. Java的关键字:
    1. 48个关键字:abstract、assert(断言)、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp(严谨,浮点型使用)、super、switch、synchronized、this、throw、throws、transient(临时忽略,实体类字段)、try、void、volatile(内存中使用)、while
    2. 3个特殊直接量:true、false、null
    3. 2个保留字:goto、const             
    4. 一些常见单个的英文单词尽量也不要使用
  10. Java中的命名规范:(阿里的规范)
    1. 项目命名:全小写(也有部分公司使用小驼峰的,但是自从springbott出来后,必须是全小写,因为Springboot不支持项目名称有大写字母)
    2. 包的命名:全小写,并且是你所在的公司的域名的导致 baidu.com  com.baidu.xiangmuming.mokuai
    3. 类的命名:大驼峰
    4. 方法的命名:小驼峰
    5. 变量的命名:idea推荐小驼峰(在以前是全小写,特别方便,避免了和数据库不区分大小写的麻烦),数据库不区分大小写,mysql全小写,Oracle全大写。这时出来了一个驼峰映射  userName,映射成user_name 把大写映射成  _小写,(在一些国企或者军队项目里面,也有变量名称全大写的,比较少)
    6. 常量:全大写,要是有多个英文单词,单词之间_
  11. 变量的长度:理论上255个长度,实际中变量的名字,两三个单词就Ok。实际中,2-16位,尽量使用英文的,或者汉语拼音,汉字的变量名称也行,但是尽量不要使用,因为汉字的编码太复杂
  12. 注释:
    1. 单行,可以在一行的任何位置出现 前半行是代码,后面是注释,注释一行单行一行写在上面。黑马的老师,他们年龄较大的。
    2. 多行注释:一般是方法或者类上面的注释,和单行注释是一样的,只是给开发人员看的,打成文档之后,就没有了。或者生成接口后,对方也看不到。
    3. 文档注释,这个打成文档或者接口后,客户也能看到,和文档注释作用一样。文档注释每一行前面都有注释,多行注释只有第一行和最后一行有注释。开发工具里面颜色不一样。
  13. 数据类型-8种基本类型(最高位是符号位,0表示正数,1表示负数)
    1. Byte1个字节,8个比特位  范围  -128——127(-2^72^7-1)  

01111111  10000000

    1. Short2个字节:16个比特位
    2. Char2个字节:16个比特位
    3. Int4个字节:32个比特位:  -2^31——2^31-1109次方)
    4. Long8个字节:64个比特位  -2^63——2^63-11019次方)
    5. Float4个字节:32个比特位   1038次方
    6. Double8个字节:64个比特位  10308次方
    7. Booleanjavaapi中没有明确规定,在实际操作中,单个boolean类型变量按照int处理,但是boolean[]类型的数组是按照  byte类型处理,1个字节。其中严格意义来说,应该按照1个字节,因为  byteshortchar单运算都是提升为int
  1. 存储原理
    1. 数据在计算机底层是以二进制存储的,0和1,而且数据是有正负之分,最高位是符号位,0表示正数,1表示负数。一个数值,在计算机地城符号位占据一位了,数值就少了一位,以byte为例

0 1 1 1   1 1 1 1   byte的最大值   二级制和十进制的转换

2^0*1+2^1*+...+2^6*1 = 2^7-1

0 0 0 0   0 1 0 1  2^0*1+2^1*0+2^2*1= 5

an=2^n,  求Sn=an+1-1

  1 1 1 1   1 1 1 1 +1 =  1   0 0 0 0  0 0 0 0  只能存储8位,1就没有了,溢出,8个0是就是0,一个数值+1等于0啊,8个1就是-1。-128就是1个1,后面7个0.  -128 =  1 0 0 0  0 0 0 0   给-128减去1, 就变成0后面7个1了,是127了。   我们用的是byte类型,别的类型也一样,

最大值+1 = 最小值

最小值-1 = 最大值  物极必反(曲线)抛物线

    1. 测试的话,在开发工具里,必须用int或者long来测试,因为短整形都自动提升为int了    byte a = 2;  byte b = a+2(错误的);   byte c = a+=2;
    2. 最大值的大小排序  double > float > long >int,float只有4个字节,但是比long大,原因是存储的方式不一样,整型在计算中是以2进制存储,浮点型是以常数e的指数位的方式存储
    3. 底层二级制数据,数码的转换,正码,补码,反码
    4. 浮点型:小数点在计算机底层会丢失精度,不是100%精度存储
  1. 关于coreJava的东西,在面试问到了,要给人一种,我记得好像是这样子的,大概等,开发好多年没用过
  2. 算术运算符  +  -  *  /  %  ++  --  ++--变量在前后的区别x++   ++x区别
  3. 赋值运算符=  ==  ===(js中有,绝对相等)   +=   sql+=”str”   sql=sql+”str”;
  4. 比较运算符  >  >=  <  <=  在计算中,尽量带着效率问题
  5. 位运算符  &  |   &&  ||    单和双的区别:&前后条件都满足返回true|前后只要有一个满足就返回true&&,要是前面不满足,后面就没有意义了,结果都是不满足,&&后面不执行了,单&,后面还要执行,判断空指针,前面要是空,后面不能在执行,必须使用&&,要不然就真空指针了。  ||只要前面满足,后面不执行了。 
  6. 复杂的算术运算:二级制里面在运算(计算中用的较多,一般在算法和游戏开发中较多)。  & | ^ ~(~单目运算符,其他都是双目运算符,也称双元运算符),三目运算符  ()?A :B

^异或,两个一样返回false,不一样返回true

  1. 位运算符中的(二进制中的)   <<(左移,位数补0,移动很可能导致数值正负发生变化)  >>(右移,正数补0,负数补1  >>>(无符号右移,最高位一律补0)
  2. 逻辑条件:if if else  else if  switch case    大括号可以省略,但是有条件不能多于一行代码,并且这行代码中不能定义变量(代码要有意义),ifelse  或者 elseif 都是一个整体,只执行其中某一块       if if    和一个if else (细心,不能落下那一部分),要是层次多一定要加注释 一次性把ifelse语法写出来。Switch在使用的时候,jdk1.5之前不能是string类型,现在可以用string类型了。Case 里面一定要有break关键字,要是忘了,最后一个case的话,不影响,但是不是最后一个的话,会穿透,成为case穿透。Default可以有,也可以没有,就相当于else,可以没有的。
  3. 四大循环:
    1. For循环,有角标,或者在循环中还需要判断等,或者需要循环的话步长不是1的时候。
    2. forEach:不需要角标,直接遍历一下就Ok
    3. While:一般是结果集,没有角标,能根据指针判断里面还有么有下一个,rs结果集
    4. Do-while:用在欢迎页能,不管怎么样都需要先执行一遍。
  4. 循环的注意事项
    1. For循环和while无论什么情况下,都可以相互转化。
    2. 循环的大括号也可以省略,但是我们要养成良好的编程习惯。
    3. 循环的嵌套。想跳出本次循环,使用continue,跳出本层循环,使用break,想跳出整个循环,使用return(可以的,但是整个方法就结束了),需要给循环加标签,给循环起名字。 然后break aa;
    4. For的三个参数,声明参数,可以放在外面,然后++可以放在循环体里面,但是需要放在最后面。(和放在小括号里面效果一样,都是最后执行)
  5. 数组容器:变量(单一数值)—数组(同一种类型)—集合(map严格来说是映射)
    1. 数组的声明方法:String[] arr={};String[] a1 = new String[5];
    2. 数组的类型:一维数组和二维数组(上面的一维,二维就是数组套数组,后面有集合代替,但是前台是还是数组),前台传递过来的数组,在后台可以使用数组接收,也可以使用list来接收。后台我们的数组和list之间可以相互转换。 Arrays.asList

List.toArray

  1. 方法
    1. 方法名:小驼峰,见名识意
    2. 参数:形参和实参:形参是声明方法的时候定义的,形参有类型啊,名字随便叫。实参是使用的时候,传递的参数,这个不能定义类型等,要和调用的这个参数的形参类型一致。实参的类型不能大于形参。比如,形参定义的是List,实参可以传递list,或者ArrayList,但是不能传递collectionJS中(没有形参和实参之说,现在也有形参和实参,只不过形参不用定义类型)
    3. 返回值类型:(单返回),没有返回值 void Ok啦,构造方法是特殊的方法,没有返回值。不能用void。(构造方法严格意义上来说,不能参与重载的界定)
    4. 访问修饰符(权限修饰符)private 不写(defaultfriendly,不是关键字)  protected public
  2. 构造函数
    1. 用来初始化,特殊的函数,没有返回值(不是void,是不写),不参与重载判断。(方法和类名相同,没有返回的声明,不能有return语句)
    2. 重写构造器的话,一定要把无参构造器重写一下
  3. 主方法:main方法 整个程序的入口的方法,java工程的入口。Boot工程也是main方法入口,这个关键字不能写错了。
    1. Publicstatic顺序可以调换
    2. Voidmain不能调换
    3. 可以添加修饰符final,只要在void前面,都可以,三个修饰符可以随便写顺序,可以形式形参
    4. 参数是string类型的数组,只要满足string类型数组的写法都可以,参数的名字只是一个形参,可以随便叫 默认是args   arguments  可以叫aaa  bbb
      • String[] args
      • String args[]
      • String... args
      • final String[] args
    5. Main方法的赋值(需要使用命令行,在运行时赋值)
    6. Main方法能重写吗?不是重写,这叫隐藏(静态方法不能重写)
  4. 面向对象的三大特征(四大特征)
    1. 封装(实体类)
    2. 继承:子父类之间,把一些公共方法抽出去,放在父类中,后面谁想用,谁继承就Ok啦。类与类之间是单继承。接口与接口之间是多继承,类与接口多实现。
    3. 多态(抽象也是他的一部分,通过父类来new 子类的对象),两个具体的实现就是重载和重写
      • 重载:同一个类里面:一同三不同  方法名相同  参数个数 类型 顺序不同,修饰符、返回值,异常无关
      • 重写:子父类之间:方法名称相同、参数相同、(访问修饰符(大)、异常类型(小)、返回值类型(小)),两同两小一大

 

  1. String类的一些方法
    1. Stringbufferstringbuilder的区别:自己总结
    2. 常见方法:截取,打断,获取角标、替换等
    3. 尤其substring数据库的区别,数据库中是从什么地方开始,截取多少个长度,而java中是从什么开始到什么地方结束
  2. 关键字的
    1. Return:作为方法的返回值使用,也可以结束方法中的某些操作,结束方法,结束所有操作
    2. Break:中断当前操作,不在继续,只能中断一层操作,比如在多重循环中,他只能中断所在的那一层循环,不能中断全部循环,要是想中断全部循环,可以使用return,或者也可以给循环命名:给循环加标签,break  标签名。要是使用return直接终结方法了。
    3. Continue:中断当前操作的当前步骤,进入下一步
    4. Final:修饰的量为最终量,不可以被修改。他要是修饰的是变量,这个变量就相当于常量,要是修饰的是方法,这个方法不能重写,他要回修饰的类的,这个类不能被继承
    5. Finally:通过在异常的时候,为了最后释放资源,关闭流等操作,在面试中很喜欢用到。测试打印
    6. Finalized:垃圾回收的,我们几乎用不到。
    7. Static:修饰变量、修饰方法、类、静态代码块,静态导入,可以把要导入的类中静态方法导入,不用再使用类名、方法名的方式来调用,直接调用就OK啦。静态在项目中,能不用就别用了,因为他的生命周期太长了,只要第一次被使用后,就一直在内存里面直到项目停掉。把项目启动后一直用的东西可以用静态,其他的都不要静态
  3. 方法的加载顺序(常见于面试的笔试题中,判断初始化顺序)
    1. 子父类的构造器
    2. 子父类的静态方法
    3. 子父类中的静态代码块
    4. 顺序:父类的静态代码>子类的静态代码块>父类构造器>子类构造器(四个一定会出现,要是接着new对象,接着父类构造器,再子类构造器)
  4. 集合类(自己整理),特点,层次关系,底层结构,jdk版本不同,底层结构不同,一值在优化底层,为了效率
    1. List(列表)
      • Arraylist:底层是动态数组:有角标,查询快。底层数组默认大小10,当存储量达到10的时候,自动扩容,扩容(0.5倍),0.5倍向下取整,我们在定义的时候,是可以自定义数组的大小的。定义多少就是多少。
      • Linkedlist:双向链表:当我们找到了链表的节点,需要修改直接修改,要是需要删除或者新增的话,直接把链的节点打开,然后把我们要新增的对象新增进去,再次把链连接上就OK啦。
      • Vector:线程安全的操作,在我们实际开发中,99.99%的情况下,集合不用考虑线程安全问题,集合一般不允许是成员变量,集合都是局部变量,每个请求过来,都重新创建集合,也就是自己使用自己的。集合一般是用来存储数据的,不涉及线程问题。
    2. Set(集)
      • Set的特点,无序,不可以重复,我们经常在去重的时候,可以使用
      • Hashset:通过哈希算法存储的。哈希表(散列表)
      • Treeset:二叉树存储
      • Linkedhashset
      • 有一个
    3. Map(映射)底层结构(自己整理,数组+链表,1.7之后加入了红黑树)
      • Hashmap:默认大小是16,负荷因子0.75.当他达到 大小*负荷因子的时候进行扩容。扩容每次翻倍,大小是 16*2^n次方大小,负荷是通过时间和空间的取值的。空间复杂度和时间的复杂度
      • Hashtable
      • Treemap
      • 好几个
    4. 空间复杂度和时间的复杂度
  5. 常用类:
    1. String
    2. Arrays
    3. Math
    4. Java.lang里面的(包括异常等)
  6. 异常
    1. Exception:异常,软件可以处理
      • 编译时异常:需要trycatch处理,不处理报错  所有和流有关的操作都是编译时异常。
      • 运行时异常:空指针,算术异常,sql异常、角标越界等 runtimeexception
      • 自定义异常:
    2. Error:错误,软件无法处理,栈内存溢出
      • 内存溢出:是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
      • 内存泄露:是指程序在申请内存后,无法释放已申请的内存空间
    3. 抓取异常,直接处理
      • 异常抛出
        1. 不能把异常抛给别的调用者,抛出的异常自己在别的地方一定要处理
        2. 我们开发中,终端代码不能抛异常,比如controller中,就不能抛异常
        3. 异常在抛的时候,不要都直接抛出最大的,不利于抓取处理
    4. 异常的状态码
      • http:200,304,400,403,404,405,415,500,505,506(这些状态码分别是什么意思)
      • Java中直接异常等没有编号
      • Mysql:有编号的:
      • Oracle也有编号:ora-12541等
  7. 算法:
    1. 冒泡:排序(代码)
    2. 折半:查找(代码)
    3. 希尔:排序
    4. 哈希:算法
    5. 迭代:查找
    6. 递归:算法(代码,手写)
  8. 数据结构
    1. 数组
    2. 队列:先进先出
    3. 栈:先进后出  递归  进栈(压栈),出栈(弹栈),内存溢出(取决于你的电脑内存和电脑分配给Jvm的内存)
    4. 链表
  9. 树(二叉树),java中平常所说的树就是二叉树
    1. Ztree第一个树(不是二叉树)
    2. 根节点(最上面的节点)、子节点(有孩子有父亲的节点)、叶子节点(没有孩子的节点)
    3. 树的深度:从祖宗到叶子的层级
    4. 二叉树:最多只有有两个子节点
    5. B树和B+树(不是二叉树)
    6. 平衡二叉树:左右子树的高度相差不超过 1 的树为平衡二叉树
    7. 红黑树:红黑树是一种特定类型的二叉树,它是在计算机科学中用来组织数据比如数字的块的一种结构红黑树是一种平衡二叉查找树的变体,它的左右子树高差有可能大于 1,所以红黑树不是严格意义上的平衡二叉树(AVL),但对之进行平衡的代价较低, 其平均统计性能要强于AVL



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值