Java知识学习笔记(1)

Java知识学习笔记(1)
三分看,七分练

最起码代码写两遍
学习捷径:敲,狂敲
有些代码不需要理解但是必须写
模仿好的编码习惯
整理回顾

框架表示的是对现有的组件的一些整合
sping + springMvc + Mybatis
Spring + Struts2 + Hibernate

微服务的崛起:
互联网中的众筹项目:
Maven + Svn /SpringBoot/ Activti/ SpringCloud

Redis表示的是内存数据库

JavaEE高级:
SVN/IDEA开发工具
分布式版本管理工具:Git和GitHub
mysql高级
mycat实现MySQL的分布式,分库分表、读写分离
JVM内存模型,参数调优
JUC线程高级
分布式架构注册中心:Zookeeper
虚拟化应用容量Docker
全文检索引擎ElasticSearch
消息队列RabbitMQ
前端vue/ES6

java基础是学习javaEE、大数据、Android开发(JAVA语言是基础)的基础

在很多的APP中对某些组件进行操作的时候需要使用java代码

面向对象编程是java的核心

施乐-苹果-微软

常用的一些DOS命令:
dri:列出当前目录下的文件和文件夹
md:创建目录
rd:删除目录
cd:进入指定目录
cd…:退回到上一级目录
cd\:退回到根目录
del:删除文件
exit():退出dos命令行

echo name: wyy.age = 1> test.doc
表示的是将内容:name: wyy.age = 1 写到test.doc中

del *.txt表示将删除所有扩展名为txt的文件

使用rd操作删除文件目录时需要该目录中没有文件

JAVA语言概述:
ios 和 Android都使用的是linux内核

c 和 c++ 开发效率不高但是执行效率高

C#、C等语言是重型语言

OC、Swift等主要是用于开发苹果的相关的应用

java是sun公司推出的

后台开发用到的语言
java(中大型网站) php(一些小型网站) python

Go语言

Node.js(后台和js相似的语言)

java9.0 - 10 - 11 迭代的速度很快

(每隔6个月更新一次)

javaSE(之前称为:J2EE)主要是编写基于桌面的应用程序

javaEE主要是企业级开发,其中包含的主要技术有:
Servlet Jsp等

JavaME:
主要是支持运行在移动终端平台上

javaCard主要是支持一些java小程序运行在小内存设备
(如智能卡)上的平台

java的垃圾回收机制是自动执行的(相当于一个保姆)
但是还是会出现内存溢出或内存泄露的问题(和异常有关)

新开发的JDK必须向下兼容

JDK包含了jre(jre表示的是java运行的时候需要的环境)
但是只设置编写java的话我们只需要的是jdk即可

java代码和运行的步骤:
1.将java代码编写到.java文件中
然后通过Javac命令对该Java文件进行编译
通过java命令对生成的class文件进行运行

在使用dos命令时候我们需要注意的是weindows是不区分大小写的

注释:
三种注释类型:
单行注释 //
行尾格式(这种方式和Javah源码一样,习惯上是将大括号放到一行的末尾)

多行注释 /多行注释的格式/

单行注释和多行注释在编译的之后的.class字节码文件中不包含注释掉的信息

文档注释(java特有的注释格式)
/**
@author
@version
*/
注释的内容可以被JDK提供的工具jvadoc所解释成一套以网友
显示形式显式体现的该程序说明文档

使用doc命令行操作包含文档注释的文件的命令如下:
javadoc -d mydoc -author -version HelloWorld.java

多行注释的注意点:
多行注释是不可以嵌套使用的

javaAPI的文档(主要是说明的是用户如何使用java基类等)

chm文件表示的是编译HTML的帮助文件

在一个java文件中只可以有一个public类
同时在定义一个公共类的时候我们需要注意的是
类名字和文件名字一样即可

编译之后回生成多个字节码文件并且字节码文件的文件名
和java文件中的类一样

形成良好的编译风格:
运算符号的左右两边应当加上空格

IDE就是集成开发环境的意思(Integrated Development
Environment)

eclipse是IBM开发的

重点知识点:
JDK = JRE + Java的开发工具(javac.exe;java.exe;javadoc.exe):
JRE = JVM + Java核心类库

安装路径中不可以写进去中文的字符和空格

为什么配置path路径:
保证IDE在任何开发环境中都可以将java代码执行成功

关键字和保留字:
关键字:被java语言赋予了特殊的含义用做专门用途的字符串
关键字中的所有字母都是小写的

保留字:
现有的Java版本没有使用但是以后的版本中可能会作为关键字
自己命名的时候需要注意避开(例如:goto,const)

标识符:
java中对各种类、方法还有很多的变量命名时使用的字符序列
称为标识符
或者是凡是自己可以起名字的地方都也可以叫做标识符
并且是在Java中遵循严格的大小写,长度没有限制
数字不可以开头
不可以使用关键字和保留字但是可以包含两者
标识符中不可以包含空格

包名:由多单词组成时需要所有的字母都小写
类名:所有单词的首字母大写
变量名和方法名:第一个单词的首字母小写但是第二个单词开始
每个单词的首字母大写
常量名:所有字母都大写,多单词时每一个单词下划线连接

7-4号 笔记:
java标识符:
规则需要必须遵守的但是规范是提倡的

java中给变量起名字的时候需要见名知意
java中可以使用汉字定义变量

java中定义的变量的格式:数据类型 变量名 = 变量值

如果对变量定义过但是没有初始化会导致-编译错误

java中的字符串是一个类

其中的变量类型:
byte 一个字节 (-128 - 127)
short 两个字节
int 4个字节
long 8个字节 (必须以”l“或者是“L”结尾)

浮点型变量:
float是单精度(尾数可以精确到7位有效数字,但是一般情况下
很难满足要求)需要以f或是F结尾
double是双精度(精度是float的两倍)

char类型的变量格式:char c1 = ‘a’

\n表示换行符
\t表示制表符
\u表示unicode编码集

A-65(其余的后延就行)
a-97(其余的后延就行)

UTF-8是互联网上使用最广的一种Unicode的实现方式

在java中:‘a’ + 1 可以进行运算

基本数据类型之间的运算规则:
前提讨论是7种基本数据类型变量间的运算,不包含boolean类型的
自动类型转换:
容量小的和容量大的运算时自动转换为容量大的
(其中的容量小和容量大表示的数的范围的大小)
(byte char short) int long float double
对于char、byte、int这三个变量类型做运算时候结果是int类型
当然对于这三个自己给自己做运算的结果也是int类型的

强制类型转换:自动类型提升的逆运算
使用的格式:(其中写入的是强制转换类型)
(int)xxx 在转换的过程中进行四舍五入(损失精度)
1.需要使用强制转换符
例如:
int i2 = 128;
byte b = (byte)i2;
得到的结果是 b = -128 (和二进制有关)

对变量编码的实际情况:
1.对于使用long型变量的时候我们需要注意的是(如下:)
long test = 217913;(没有加l)
但是test此时是int类型的变量

对于使用float的情况(例子如下:)
float i = 12.3
此时编译报错,因为后边的12.3是double类型的其长度是
大于float的

例子如下:
byte b = 12;
byte b1 = b + 1;
会报错:编译错误,因为默认将后边的b + 1 编译成了
int 类型的
(整型常量默认类型是int型;同时,浮点型常量是doule类型的)

7-5号笔记:
String类型变量的使用(String是引入数据类型):
使用"“进行对字符串的定义(使用’'定义char变量)
String可以和8种基本数据类型作运算,并且运算只能是:”+"
最后得到的运算结果仍然是String类型的
char c = ‘a’;
int num = 7;
此时有:c + num = 107 将’a’ 表示的数字 97 和 num相加即可
对于使用:
float test = 3.5f;
在输出的时候:test + “” = 3.5(f不可要)

不同进制之间的转换方式:
int num1 = 0b110(2进制)
int num2 = 0127(8进制)
int num2 = 0x110A(16进制)

二进制转换为十进制的说明:
正数的原码反码补码都相同
计算机底层都以补码的方式来存储
-128的二进制补码是:1000 0000
二进制中:{正数的原码补码反码是一样的}
{负数的反码是原码除符号位之外各位取反,但是补码是反码最后一位加1}
十进制转换为二进制的方法:十进制除2取余的逆
二进制到八进制的转换:
直接取二进制的三位数即可
二进制到十六进制的转换:
直接取二进制的四位数即可

toBinaryString() 表示的是转换为二进制字符串
toHexString() 表示的是将转换为八进制字符串

具体的保留字:
goto 和 const

相关代码的书写可以参考《代码之道》

使用char test = 97 开发非常少见

7-7号java学习笔记----------------------------------------------
没有一定是容量小的转换为容量大的

二进制数据的存储方式:
底层都以补码的形式存储
正数:三码合一
负数:原码出符号位之外全部取反是反码,同时对反码末尾加1得到补码

算数运算符的运用:

      • / %
        ++ 和 – 都是:
        (前)表示的是先加再进行运算;(后)表示的是先运算再进行加;

在使用/运算符号时,当我们使用int定义接受变量时得到的是取整后的结果
但是,当我们使用double定义接受变量时得到的是浮点数类型结果

%取余操作:
当一个正数除以一个负数时,我们得到的结果是正数。
结论:结果的符号和被摸数的符号相同

当有:
++a 和 a++单独出现时,产生的是一样的效果—都是先加后运算

特别注意:
当变量使用自增时,不会出现类型的改变
大多数再完成自增时,我们推荐使用自增

a % b的结果:在0-(b - 1)之间

赋值运算符:
= 支持连续赋值
扩展赋值运算符: += -= *= /= %=

int i = 1, j = 3是允许的
int i, j;
i = j = 12也是可以的

num += 1 的作用和: num = num + 1 是一样的
相同地:
num %= 5 的作用和:num = num % 5 是一样的

使用 num += 2 不会改变变量的类型
推荐使用自变量的增加

笔试会出现的题目:
int n = 10
n += (n++) + (++n)
System.out.println(“输出结果是:” + n)
运行结果是:32
解释原理:
当运算的时候。首先,(n++)表示的是先运算再加1
(但是在运算之后先加1,也就是说在后边再次使用n的时候
是加1之后的结果,那么在后边的(++n)的时候我们使用
的就是在最初的基础上加了2的n,所以最后的结果是:32)

比较运算符:
其中例如:a instanceof A 的作用是:检查a是否是类A的对象

注意:
boolean b1 = true
boolean b2 = false
System.out.println(b1 = b2)
最后的输出结果是:false

7-16号下午java学习笔记-----------------------------------------------------
2.4.4 逻辑运算符:
& 与
&& 短路与
| 逻辑或
|| 短路非
^ 逻辑异或(当a和b相同的时候是false)
!逻辑非

测试代码总结:
& 和 && 的相同点(开发中推荐使用&&)
不管是使用&还是使用&&运算结果都是一样的
等符号左边是true时那么二者都会执行右边的运算
但是当左边是false时那么&会继续执行符号右边的运算;&&则不再执行

| 和 || 的相同点(开发中推荐使用&)
两者的运算结果相同
当左边的符号是false时,二者都会执行后边的运算

7-17号java学习笔记(上午)-------------------------------------------------
位运算符是直接对整数的二进制进行的运算(开发的时候用的比较少)
位运算符操作的都是数值

<<左移(左移的时候右边需要补0;同时移动一次相当于对原来的数乘了一个2;但是右移的位数是需要限制的)
如果是右移到一定程度之后就会出现负数的情况(物极必反的道理)

右移(右边移动的时候左边需要补充和原来符号位相同的符号)

无符号右移(不管是正数还是负数在左边空出来的位置我们都拿着0补充)
无符号右移是在集合中使用较多

&与运算(对于该符号如果左右都是布尔类型的那么就是)
|或运算(对于该符号如果左右都是布尔类型的那么就是)
^异或运算
~取反运算

结论:
1.操作的都是整形变量
2.<<在一定范围内,每向左移一位相当于 * 2

在一定范围内,每向右移一位相当于 / 2
面试题:
以最高效方式计算2*8 答案是: 2 << 3; 8 << 1(两者都是常数级的运算 O(1))

三元运算符
格式 :(条件表达式) ? 表达式1 : 表达式2
条件表达式为true 那么执行1 否则执行2
上述的两个表达式必须是统一类型的
三元运算符中可以重复嵌套

结论:
凡是可以使用三元运算符的都可以使用if - else结构
但是使用if - else结构的语句不一定可以写成三元运算符

如果程序中两者都可以使用那么我们优先使用三元运算符(原因是运算效率高)

运算符的优先级
只有单目运算符、三元运算符、赋值运算符是从右向左运算的
想让谁先运算那么就是直接加括号就行
SCJP(现在叫OCJP)表示java认证考试

程序的流程控制 2.5.2

顺序结构

分支结构
包含的语句:
if(){}else{}
if(){}else if(){}else{}

循环结构的三种类型
for
while
do-while

每日总结(7-17号下午学习)---------------------------------
连接符+只可以使用在string类和其他类型之间
在进行变量的增加操作的时候我们推荐使用num++,因为不会改变变量的类型
字符串可以按照某种方式比较大小
== 有的时候比较的是不是同一个对象
单元运算符和双元运算符区分的关键就是有几个变量参与运算
逻辑运算符操作的都是boolean类型的变量
截止到day04 第5节(7-17号下午15:36截止)

9-14号学习笔记(晚上学习):
从键盘获得int型数据:
Scanner scanner = new Scanner();
scanner.nextInt();表示获得一个int类型的数据
在doc里面直接:
使用javac 文件名,直接进行编译,实现输出相关的输出
对于char型的获取Scanner类没有提供一个相关的方法,并只能获得一个字符串
使用scanner.next();方法获得
截止到9-14号晚上20:02(day04 - 05)

//10-13号下午15:32继续学习=======================================
从day04 - 05 继续学习:
测试实现使用Scanner实现怼用户输入的获取

day04-06:
实现从键盘获得多种类型的数据
使用nextXxx()方法获得需要的数据

如果获取的是一个字符,Scanner类中不提供nextChar()方法,而是直接可以使用next()来获得

day04- 07 :
if - else结构中else是可选择的
针对于条件表达式,如果多个条件表达式之间是互斥关系(或没有交集的关系),
那么写的顺序是完全可以改变的
如果多个表达式中间有交集的关系那么需要根据实际情况考虑清楚应该将那个结构声明在上面
有包含关系的话将小范围的写在大的上面
否则范围小的不可以执行了

你可能感兴趣的:(java学习,java)