javaSE
Day01
本来觉得se比较简单,如果忘记看一下笔记也可以捡起来,但是时间长了,奈何记性太差,学习之后老是忘记自己曾经都学会过什么,所以即便是基础也决定要虚心对待,记录如果出现错误,随时修改。
在csdn记录一下自己学习的过程。
JavaSE知识模块介绍
第一部分:计算机编程语言核心结构:
数据类型,运算符,流程控制,数组...(语法的设计方式)
第二部分:java面向对象核心逻辑:
类和对象,封装,继承,多态,抽象,接口...(调用)
第三部分:javaSE核心高级应用:集合,I/O,多线程,网络编程,反射机制...(偏底层,后期封装)
第四部分:java新特性:Lambda表达式,函数式编程,新DATE/Time API,接口的默认,静态和私有方法...(1.8的新特性)
第五部分:MYSQL/JDBC的核心技术:sql语句,数据库连接池,DBUTILS,事务管理,批处理...
总结:
一部分基础
二部分面试+调用思想
三部分底层,后期源码,要熟练使用框架
四部分开发常用
五部分mysql的sql语句必须会,其余部分属于web部分,maven之后基本不用
1.计算机语言介绍(了解,非面试题)
计算机编程语言是什么?
所谓计算机编程语言,就是人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。
2.字节
计算机存储数据的最小基本单元
8个二进制位等于1个字节
二进制位:bit(0或者1组成)
字节:byte或B
单元转换关系
8bit = 1B
1024B = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
3.常见dos命令(模拟当年的黑窗口,以后一些windows版本的中间件可能使用dos命令才能打开生效,也许面试会问)
打开黑窗口: win+R -> 运行 -> cmd -> enter
常用dos命令:
切换盘符: 盘符名:
查看当前目录下的文件或文件夹: dir
进入指定文件夹名: cd 文件夹名
进入多级文件夹名: cd 文件夹名\文件夹名
退到上一级目录: cd ..
退到根目录: cd \
清屏: cls
创建文件夹: mkdir
创建多级文件夹: mkdir 文件夹名\文件夹名\文件夹名
删除文件夹: rd 文件夹名(直接永久删除,并且不能删除非空路径)
删除文件: del 文件名
批量删除文件: del *.后缀名
退出dos命令窗口: exit
按上下箭头: 查看输入过的命令
Tab键: 补全文件或文件夹名称
选中路径 -> cmd -> 快速进入到指定目录下
Java所需要的环境
1.JVM(定义部分)
虚拟机(Java virture machine)是运行所有java程序的假象计算机,是java程序的运行环境之一,编写的所有java程序,都运行在jvm之中。
2.跨平台(了解)
跨:跨越
平台:操作系统
跨平台:写好的程序能在不同的操作系统上运行
3.虚拟机和跨平台(了解)
跨平台的实现需要虚拟机的支持
Java代码想要在不同的操作系统上运行实现跨平台,就需要安装不同版本的jvm,形象的说,Jvm就像扮演了一个翻译的角色。
4.Jdk和jre
jre (Java Runtime Environment):是Java程序的运行时环境,包含JVM和运行时所需要的核心类库。
jdk(Java Development's Kit):java的开发工具包,jdk包含了jre以及开发人员使用的工具
所以,如果想要运行一个已有的java程序,安装jre即可
如果作为开发,需要安装jdk
jdk包含了jre
jre包含了jvm
5.JVM(面试部分)
java代码一般是在电脑上编写,电脑要安装相应的运行环境,此时jvm就安装在电脑的相应位置。
平时使用的idea等与java相关的软件进行代码的书写,写好的代码就会进入java虚拟机中,java虚拟机再输出机器码给操作系统,操作系统再调用电脑相关硬件完成相应功能。
结论也是越接近调用硬件的语言,运行速度越快。
关于java8之后的jvm内存结构
其中绿色的部分代表jvm能实现的功能
最上面的绿色部分代表功能1:
加载.class文件,不是加载.java文件,到这里就是java虚拟机的能力。
面试题:类加载器有几种?
有4种,分别是
引导类加载器(bootstrap classloader)
扩展类加载器(extension classloader)
应用程序加载器(app classloader)
自定义加载器(可以自定义,但目前没有那个实力)
中间的绿色部分代表功能2:
垃圾回收,垃圾回收机制,涉及比较多。
最下面的绿色部分代表功能3:
作用是生成的.class字节码文件经过执行引擎之后变成电脑能识别的机器码文件,
.class字节码文件可以通过editplus这个文本编辑软件,安装插件HEX-Editor之后,可以看到
类似于哈希值(只是类似)。
橙色部分与蓝色部分与线程有关
线程:是进程调度资源的最小单位。
可以说进入网站点击页面的任意选项进行的操作都可谓是一个线程。
开发时这些线程对应的功能有的是共享的线程,有的是不共享的线程
图中橙色的部分是线程共享的部分,蓝色的部分是线程私有的部分。
蓝色部分
Pc寄存器相当于cpu的秘书,为cpu提供好下一个任务的执行。
Java栈与本地方法栈需要详细介绍。
橙色部分
橙色部分为线程共有区,
分为方法区,java堆和直接内存。
方法区
方法区中含有常量池,
演示代码1:
public interface Constant {
//常量
public final String VOCALIST = "Eason Chen";
//很多常量放在一起的时候,就会变成常量池,例如:
public final String BRAND = "ROLEX";
public final String LANGUAGE = "JAVA";
//这三者在一起的时候,就是常量池,而且修饰符为public为公有的。
}
演示代码2:
public class Demo1 {
private String GAME;
public void add(){
System.out.println("......");
}
//由图中橙色部分可知以上的类,字符串,方法都会放在方法区中
public static void main(String[] args) {
Demo1 demo1 = new Demo1(); //下面创建对象的过程(new Demo1())放在堆中
//demo1对象是放在栈中
//Demo1是指向类模板,放在方法区中
//关于GC,
// Demo1轻易不清除,demo1随main方法销毁,new Demo1()是GC回收的部分。
}
//简单面试题,类与对象的区别?
//类是对象的模板,对象是类的实例。
//模板对应只有一个,实例可以有无数个。
}
关于直接内存,
橙色部分和蓝色部分占用着电脑的部分内存条,绿色部分指的是jvm的功能。
Jvm的内存在不做特殊操作的情况下,占据着电脑大约1/4的内存。
直接内存的意思是在电脑内存中jvm内存的外面开辟一个内存空间,这个内存空间与jvm虚拟机是平级的关系,并且如果电脑的内存是16G,那么虚拟机内存与直接内存加在一起的大小一般不会超过12G。
这个直接内存的大小不受jvm虚拟机控制,受电脑内存大小的影响,这个直接内存是供NIO使用的。
(IO流,从磁盘上读写文件的过程)
NIO也叫新IO,非阻塞IO。
IO叫老IO,阻塞IO。
只有非阻塞IO才可以开启直接内存。
读写文件是浪费电脑性能的(就是慢),所以单独开辟一个空间直接内存,用来读写文件。
面试题:JVM是如何调优的?
- 内存管理(这里的内存管理管不到直接内存,只能管理jvm自身的元素的内存)
- 垃圾回收
整体总结:
面试题:JVM是由什么组成的?
1.功能区域
类加载器,垃圾回收,执行引擎
2.共享区
方法区,堆,直接内存
3.私有区
栈,本地方法栈,PC寄存器
系统重装,找个idea安装包待续...
6.JDK安装
卸载:
卸载方式,选择设置,应用卸载,找到javaSE,大概280M左右。
卸载之后,之前配有环境变量,还要删除环境变量。
选择属性->高级系统设置->环境变量,将之前设置的JAVA_HOME选项删除,
注意不要破坏其他的环境变量,否则有可能需要重新做系统。
还有个人用户的path设置。
安装:
下好的安装包为jdk-8u162-windows-x64(也可以用其他的)
然后双击安装,下一步,选择更改选项,放在合适的盘中,路径不要带有中文。
然后选择jre选择此功能不可用,因为jdk中已经包含了运行环境。
安装完毕,关闭即可。
环境变量的配置(win10):
此电脑->属性->高级系统设置->环境变量->系统变量处
新建->上面填写JAVA_HOME,下面填写jdk安装路径bin路径的上一级,如个人
上面:JAVA_HOME 下面:D:\Develop\JDK8
然后再在系统变量path中配置,选择新建,然后填写路径%JAVA_HOME%\bin,然后上移到最上面,全部确定之后,就可以在任意位置cmd使用java相关指令。
简单程序编写:
编写的java程序都是以.java为结尾的,日后如果有需要修改或者查看编写程序的时候,
可以使用一个软件editPlus进行查看,也比较方便。
另外如果使用cmd进行编译,使用public修饰的类,要和文件名保持一致。
Javac 类名.java 编译
Java 类名 运行
之后就会在窗口显示出相应的结果。
注释
写注释的主要作用是对个人写的代码进行一个说明。
//
单行注释
/**/
多行注释
/** */
文档注释,cmd运行命令javadoc -d doc的文件名 -author -version 类名.java
按下回车后,就会生成doc的文件名相应的文件夹,在其中找到index.html,
就会有之前写好文档注释的相应的说明文档,以html的形式展示出来。
另外如果在程序中还写有相应的/** */注释,都会在html页面中展示出来。
关键字
Java提前定义好的具有特殊意义的小写单词
命令行
cmd命令行窗口默认是gbk编码形式,如果用命令行来进行编译,要将代码改成gbk的形式
类与pubic
一个源文件可以有多个类,但是为public的类只能有一个。
常量
在程序运行的过程中值不会发生改变的数据
分类
整数常量:所有整数
小数常量:所有带小数点的
字符常量:带单引号的 ‘ ’ 单引号必须有且只能有一个内容
字符串常量:带双引号的 ” ”,双引号中随意写
布尔常量:true false
空常量:null 代表什么也不是,什么也没有,数据不存在,不能直接使用
例
System.out.println(‘’); 这样的代码会出现错误,单引号里面必须有一个内容。
System.out.println(‘11’);这样的代码会出现错误,单引号里面必须有一个内容。
单引号中是一个空格或者一个tab键也可以,属于有一个内容。
System.out.println(null); 编译时报错,不能直接使用。
常量之间可以做运算
另外/如果被除数和除数都是整数,结果取整
如果被除数和除数中有小数,结果就是小数