说明:
本系列以 尚硅谷宋红康老师主讲的java核心基础为蓝本,加上个人的理解。以期作为日后研究复习的资料。如果错误,请留言。
ans 代表 回答。
【后续会补充为什么叫上帝视角,现在只是一些填鸭式的内容,方便复习】
-------------------------------------------------------------------------------------------------------------------------------
1、为什么可以跨平台?
通过不同操作系统的JVM版本,使得java可以运行在不同的操作系统。通过jvm实现跨平台!
用户-java文件-class字节码文件-
2、java的两种核心机制
ans:
-
Java虚拟机:屏蔽底层,提供跨平台能力
-
垃圾回收机制:自动回收,程序员不用管。
java还会出现内存泄露和内存溢出吗? ans:会!
3、java环境
-
JDK(Java development kit) java开发工具包,包含了JRE(运行环境)、javac.exe(编译工具)、jar.exe(打包工具)等。
-
JRE (Java runtime environment)java 运行时环境,包括 JVM 和 java SE 标注类库
-
JVM (Java virtual machine)java虚拟机
bin 目录就是开发工具,有很多。
db是java写的一个数据库
include 是C语言写的头文件;没错,java是C写的!
jre 就是运行时环境
lib 库文件 就是 相关的一些jar包
JavaFX-src 用Java代码编写的类和接口组成类库源码文件。该API旨在成为Java虚拟机(Java VM)语言的友好替代方案,例如JRuby和Scala。
src.zip 是java开源的一些代码,常见的一些 类 库 的源码!
4、java程序 运行过程
-
用户编写 java 程序 得到 .java 文件
-
使用javac 命令对.java 文件进行编译,得到.class 文件
-
使用java 命令 运行生成的 .class文件
java严格区分大小写,但是windows系统 文件名不区分大小写!
5、java程序 注释
-
单行: //
-
多行 : /* */ 不可用嵌套使用
-
文档注释 : /** */ 就是比多行多了一个
文档注释可以被 javadoc.exe 解析使用javadoc 命令 + java文件 会生成html文件
6、源文件可以写多少个类?
ans:1个源文件可以声明很多类,但是最多只能有1个类被声明为 public 并且 声明为public 的这个类名必须与文件名一致!
6.1 编译之后会生成多少个class文件?
ans:一个类 会生成一个 class文件,即使写在一个java 文件中;class文件的文件名与类名一致!
思考一下为什么?
7、程序的入口 ?
ans:程序的入口是 main 方法,必须是 public, static,void 格式是固定的。参数是可变的
8、关键字与标识符【变量】
8.1具有特殊意义,有专门用途的字符串,所有字母都是小写 。
8.2标识符:
变量名、方法名、类名等自己需要起名字的字符序列。
-
字母、数字、下划线、美元符
-
数字不可用开头
-
不可以使用关键字、保留字
-
区分大小写,长度不限制、不能有空格
8.3命名规范:
-
包名:所有字母都消息
-
类名、接口名:所有单词首字母大写
-
变量名、方法名:小驼峰
-
常量名:全部大写,单词之间下划线连接
8.4变量使用:
-
先声明、再使用
-
作用域在 包含它的大括号内
-
同一作用域不允许有同名变量
-
生命周期?
9、数据类型:
9.1数据类型分类:
不用的数据类型在内存中分配了不同的内存空间,换句话说为了确定需要分配的内存空间大小,定义了这些数据类型。
9.2、详细介绍
-
通常整型默认为int 如需声明未 long型 需要在后面加上 l 或者大写的L(int 可以表示21亿这么多的数,基本够用了)
-
byte 不常用,一般只会在 I/O操作时,会使用 一个byte数组作为缓冲容器。
-
java中的浮点型默认为 double ,如果需要float型需要 加上f 或者大写的F
-
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
-
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
对精确度要求特别高时,必须使用Bigdecimal。
神奇的事情:float虽然只有4个字节,但是能表示的范围比long要大
原因是:存储的是 科学计数法,分为底数和指数。
https://blog.youkuaiyun.com/weixin_42518062/article/details/85046071
-
字符型 char 占用2个字节 ,1个字节是8个bit。所以 1个char类型占用 16个bit
-
所有的字符都是使用 Unicode 编码,所有一个字符可以存储1个汉字或者1个汉字或者其他字符
-
有3中表现形式: 单引号('a')、反斜杠表示转义特殊字符('\n')、直接使用Unicode值表示('\u000a')
-
char 可以进行运算,因为每一个字符都有自己的Unicode码,实质是Unicode码运算。
-
ASCII编码;Unicode编码 UTF-8是Unicode的一种实现。使用1-6个字节表示。
boolean 型: 只有2个值 true 和false
-
不可以用0 、非0来表示 true、false;C语言是可以的
-
但是事实上,编译之后还是用int型表示真假,1替换true,0替换false。写代码还是必须写true、false
String 类型:
-
其实String类型和我们自己定义的类没有什么区别
-
String 使用""来声明一个字符串
-
String 只能使用 + 来和8种基本数据类型做运算,结果依然的String类型。其实就是字符串拼接。
-
为什么呢?
-
9.3、变量位置分类
9.4、类型转换
-
自动类型转换【基本类型之间的类型转换,除boolean之外】
容量小【表示数的范围】的会自动转换为容量大的。
-
char、byte、short 三种之间是不会转换的,这3和其他的运算会先转换为int 再运算
-
boolean类型不参与运算
-
String 与这些类型进行 + 运算时,其他类型会变成String类型,进行字符串合并
2.强制类型转换
就是将容量大的转换为容量小的
-
使用强制类型转换符号 (需要强制转换的类型)
-
可能会造成精度降低、或者溢出
-
String类型不能直接转换为基本类型,但是可以通过 要转换的基本类型的包装类的方法类进行转换
String a= '43'; int i = Integer.parseInt(a);
10、进制【了解】
对于整数:
java中的二进制:
-
java中整数默认int,占4个字节 共32bit。用二进制表示整数,第32位是符号位;当long类型,第64位就是符号位。即最后1位是符号位。
-
有三种形式:原码、反码、补码。 正数来说,3码合一。
原码:直接将一个数值转换为二进制数,最高位是符号位
反码:对原码进行按位取反,最高位为1;正数的反码是原码本身。
补码:正数的补码是原码本身,负数的补码是反码+1
-
计算机都是以补码储存数据的!!!
-----------------------------------------------------------------------------------------
01完结!