DAY 1 概述

Java语言版本————JDK与openJDK

Java SDK最早叫Java Software Develop Kit,后来道改名为JDK,即Java Develop Kit。JDK作为Java开发工具包,主要用于构建在Java平台上运行的应用程序、回Applet 和组件等。

其中包括了Java编译器、JVM、大量的Java工具以及Java基础度API里面是Java类库和Java的语言规范,同时Java语言的任何改进都应当加到其中,作为后续版本发知布。(JDK,JRE和JVM:https://www.cnblogs.com/mambahyw/p/7978832.html)

Java语言特点

编译型语言:用这种语言写出代码首先通过编译器的编译,全部转化成目标代码(在win上,就是二进制可执行文件.exe),然后依次在操作系统中运行。

解释型语言:转化一句,执行一句。

从 .java--->.class--->java虚拟机 这个角度来讲,Java是解释型语言

跨平台——通过Java语言编写的应用程序在不同的系统平台上都可以运行——实现原理:Java程序在jvm上运行,而非直接运行于操作系统

面向对象

健壮

分布式

多线程

解释型

动态

高效

结构中立(字节码)

开源

(Java核心技术I p2-6)

Java运行原理

Path环境变量与Classpath

path环境变量:告诉操作系统到哪里去找javac可执行程序配置

classpath环境变量:给JVM用,告诉JVM到哪里去加载字节码文件配置

配置path环境变量的官方推荐方式:

1.JAVA_HOMEH环境变量:F:\java\bin——根据自己的javac位置

2.配置path环境变量:%JAVA_HOME%\bin

在Java语言中,一个Java文件中只能定义一个被public修饰的类,且被public修饰的类的类名,必须和Java文件的文件名相同

DAY2

IDEA的基本使用

1.在idea的一个窗口,一次只能打开一个project。

2.idea中module就相当于一个项目——类比为eclipse里的workspace,一个project中可以有多个module,多个module之间相互独立

关键字(变量等起名不可用的)

被java语言赋予了特殊含义的单词(目前有且仅有50个)

特点:组成关键字的单词全部小写

注意事项:在高级的编译器或专门的开发工具中,关键字会有高亮效果,goto和const作为保留字符存在,目前并不使用

标识符(自己可以起的名字)

就是给类、接口、方法、变量等起名字时使用的字符序列

组成规则:a.英文字母大小写

b.数字字符

c.$和_

注意事项:不能以数字开头,不能是java中的关键字(保留字),区分大小写

常见命名规则:驼峰命名

包命名:单级和多级包名,在java语言中,以包来组织java中的l类

为了保证包名的唯一,以域名(唯一)反转的方式来命名包

单级:一个全部小写的单词

多级:以域名反转的 方式来命名,单词全部小写,单词之间以 . 来分隔,例如com.baidu.name

类的接口命名:

单个:首字母大写,其余字母全部小写

多个单词:每个单词首字母大写,其余字母全部小写

变量和方法的命名:

单个:所有字母小写

多个单词:第一个单词首字母小写,第二个单词开始,每个字母首字母大写  intValue

常量的命名:所有字母全部大写

单个:单词的所有字母全部大写。例如:MAX

多个单词:每个单词全部大写,单词之间以下划线分隔  例如MAX_AGE

在实际开发当中,命名遵循的一个核心原则是见名知意

注释

单行注释   //

多行注释  /* 注释内容 */

文档注释 /** 文档注释内容 */

常量、进制、进制转化、有符号表示

字面值常量:字面值常量,字符串常量,小数常量,字符常量,布尔常量,空常量(NULL)

自定义常量

变量

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

类型

占用存储空间

表数范围

byte

1字节

-128~ 127

short

2字节

-2^15~2^15-1

int

4字节

-2^31~2^31-1

long

8字节

-2^63~2^63-1

float

4字节

-3.403E38~3.403E38

double

8字节

-1.798E308~1.798E308

不同类型之间的转化规则:

Boolean类型的变量不能直接转化为其他类型的值

byte,short,char相互之间不能转化 ——>int——>long——>float——>double

byte,short,char相互之间不转换,他们参与运算首先转换为int类型

变量的数据类型和类型转化

目标类型 变量名=(目标类型)(被转换的数据);

字符串的拼接

操作数1 + 操作数2        两个操作数中,只要至少有一个是字符串, +操作执行的就是字符串拼接

除法运算

当参与除法运算的除数与被除数,他们都是整数的时候,此时除法运算的结果,会丢弃小数部分,只保留整数部分

逻辑运算符

位运算符

位运算符:针对变量的二进制位来进行运算

运行其他人的项目——>new一个directory(在项目下新建一个项目文件夹)命名为out——>设置一下编译输出路径project structure(若没有,自己新建一个编译输出目录即可)——>将project complier output设置为自己新建的输出目录即可

Scanner in中 int  和boolean都以空格作为分隔符,string以回车作为分隔符

DAY 4

顺序结构

选择结构

if语句

与三目运算符的一些区别:

对于三目运算符,结果一定是一个值,例如a>b?1:2  而不能是a>b?System.out.print(a):System.out.print(b)

用if语句实现把获取两个数据较大的值给输出出来,这个通过三元运算符就没办法写了。

switch语句

switch语句表达式的取值:byte,short,int,char

case后面的值,不能相同,但必须得是常量值,必须和表达式值的类型相同

break可以省略,但是省略之后会出现case穿越

default可以省略,一般不建议省略(根据开发的实际情况决定),且不一定要放在最后,如果不在最后,仍然会发生case穿越

DAY 5

循环结构

for循环

while循环

do-while循环:与while相比不管是否满足循环条件,都首先执行一次循环体中的代码

for(;;)---while(true)死循环并非不能使用(在多线程时可以)

for-each循环  for(变量类型 变量名:数组)————从头到尾的遍历数组

跳转控制语句

break:在for循环中只是停止当前层的循环,外层循环依然可以执行

想要停止整个循环,在最外层设置一个标签outer

outer:for(int i=0; i<3; i++)

{for(int j=0; j<3; j++)

{if(j==2)

{breakouter;

}

}

}

continue:退出循环的一次迭代过程,必须配合if使用

return:不是为了跳出循环体,更常用的功能是结束一个方法(函数),也就是退出一个方法,跳转到上层调用的方法

方法

格式说明:

修饰符:现在先认为是public static

返回值类型:方法体中的代码执行结果的数据类型

方法名:标识符

参数:类比数学中函数的自变量z = f(x,y)

方法体:实现具体功能的语句结合

return:跳转控制关键字

返回值:方法执行的到的最终结果

没有返回值的方法,可以有return,也可以没有return

void

调用没有返回值的方法,只能使用直接调用

方法调用的注意事项

方法不调用不执行

方法与方法是平级关系,不能嵌套定义

方法定义的时候参数之间用逗号隔开

方法调用的时候

方法重载(over load)

在同一个类中,允许存在一个以上的同名方法

只要他们的参数个数不同

参数类型不同

参数顺序不同:不是指形式参数的变量名顺序,而是指形式参数的类型顺序

public static int add(double a, intb){

}public static int add(int a , doubleb){

而非public static int add(double b, int a){

所以,编译器区分方法的是通过区分方法签名(方法名+参数列表)

但是编译器并不会考虑方法的返回值

public static int add(int x,inty) {

}public static double add(int x, inty){

直接调用add(a,b),没用调用double和int,编译器自然无法区分。因此再次印证了编译器只通过方法签名来区分,而不能通过返回值类型来区分

比较两个数据是否相等

编译器默认的方向是小范围转大范围,重载的时候是寻找最接近的数据类型。

DAY6

数组

相同数据类型的数据元素的有序集合(容器)

同一数组的单元都是物理紧邻

访问数组中任意元素,所用时间几乎相同(而数组的元素类型相同,也是为了保证随机存取)

数组当中可以存放:1.基本类型数据  byte,short char int double float

2.引用类型数据   对象

Java中的数组必须先初始化,然后才能使用 ——所谓的初始化,就是为数组中的元素分配内存空间,并为每个数组元素赋初值

数组初始化的方式:动态初始化:初始化时程序只指定数组的长度,由jvm为数组分配初始值

静态初始化:初始化时指定每个数组元素的初值,由系统决定数组长度

静态初始化:

int[] a = new int[]{1,2,3}

简化写法:int[] a = {1,2,3}//只有在声明数组的时候才能使用,声明好的数组变量不能使用

JVM虚拟机内存模型:一个Java程序在虚拟机运行的过程中,在内存中需要保存很多种类型的数据。比如说局部变量,数组等。不同类型的数据,其使用方式和生命周期,都不相同。为了更好的管理这些不同类型的数据,jvm将自己的内存空间划分为不同的内存区域,各个区域针对不同类型的数据,其内存空间有不同的管理方式。

栈(stack):存储局部变量

堆(heap):存储new出来的东西

方法区:

本地方法栈(系统相关):比如说c/c++

程序计数器:指明代码执行的位置

栈上的变量

堆上的变量

变量类型

局部变量

new出来的东西

初值

局部变量的初始值,coder自己给变量赋初值

天然有初值,jvm赋予的

整数类型(byte,int等):0

字符型char:'\u0000'码值0对应的字符

小数型(float,double):0.0

布尔类型:false

引用类型:null

内存管理方式

管理和作用域相关

和栈内存管理方式完全不同(比如有垃圾回收期来管理堆空间上的内存)

DAY7

二维数组

存储一维数组的数组

初始化格式:

1.数据类型[][] 变量名 = new数据类型[m][n];2.数据类型[][] 变量名 = new数据类型[m][];

没有给出一位数组的元素个数,可以动态的给出3.数据类型[][] 变量名 = new 数据类型[][]{{元素,...},{元素,...},{元素,...}};

DAY8

参数传递:

如果是基本数据类型,形参的改变不影响实参

参数有两份,同时参数对应的数据的值,也有两份

如果是引用数据类型,形参的改变会改变实参

参数值有两份,但是两个数组类型引用变量,对应的值(数组),只有一个

在Java语言中,不管参数的类型,是引用类型还是基本数据类型,实际参数和形式参数进行值传递的方式只有一种:实际参数的值复制一份赋值给形式参数;所以实参的值其实有两份,调用方法中一份,被调用方法中一份

关于栈空间的内存管理:

1.栈空间内存分配的基本单位:

局部变量(方法的形式参数和方法中定义的变量)存储在栈空间中

一个方法当他被调用执行的时候,方法中的局部变量等,才需要在栈空间上存储

即每一个运行中的方法,都需要占用栈内存中的一片存储空间

于是,每一个运行中的方法,都会在栈上分配一片,只属于该运行中的方法的内存空——栈帧

2.何时分配,何时回收(销毁)内存

当一个方法被调用执行的时候,给该运行中的方法分配栈帧

当一个方法执行完毕的时候,他所对应的栈帧被回收(销毁)

栈帧:给每一个运行中的方法来使用,每一个运行中的方法都对应着一个栈帧

当方法被调用执行时栈帧被创建,当方法调用结束栈帧被回收

同一方法多次执行,每一次执行的时候,都会在栈上分配一个栈帧

递归

递归的定义:方法定义中调用方法本身的现象

核心思想:分而治之

递归的注意事项:

递归一定要有出口

次数不能太多,不然还是会出现StackOverFlowException

警惕递归方法的缺陷:有重复计算的问题

poker java idea_JavaBasic学习笔记相关推荐

  1. Java NIO 学习笔记(三)----Selector

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  2. 可能是最全面的 Java G1学习笔记

    转载自 可能是最全面的 Java G1学习笔记 引子 最近遇到很多朋友过来咨询G1调优的问题,我自己去年有专门学过一次G1,但是当时只是看了个皮毛,因此自己也有不少问题.总体来讲,对于G1我有几个疑惑 ...

  3. 深入浅出 Java CMS 学习笔记

    转载自  深入浅出 Java CMS 学习笔记 引子 带着问题去学习一个东西,才会有目标感,我先把一直以来自己对CMS的一些疑惑罗列了下,希望这篇学习笔记能解决掉这些疑惑,希望也能对你有所帮助. 1. ...

  4. Java NIO学习笔记之图解ByteBuffer

    转载自 Java NIO学习笔记之图解ByteBuffer ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要 ...

  5. 转载:mongoDB java驱动学习笔记

    http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...

  6. 2019年Java Web学习笔记目录

    Java Web学习笔记目录 1.Java Web学习笔记01:动态网站初体验 2.Java Web学习笔记02:在Intellij里创建Web项目 3.Java Web学习笔记03:JSP元素 4. ...

  7. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结

    Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...

  8. Java 虚拟机学习笔记 | 类加载过程和对象的创建流程

    前言 创建对象是 Java 语言绕不开的话题,那么对象是如何创建出来的呢?我们今天就来聊一聊.对象创建第一步就是检查类是否加载,而类的加载又牵扯到类的加载过程.如果单说对象的创建而绕开类的加载过程,感 ...

  9. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

最新文章

  1. Swift3.0带来的变化汇总系列一——字符串与基本运算符中的变化
  2. java打印系统参数_Java学习(二十):获取系统参数
  3. 一文盘点数据行业的动态演变
  4. Java IO 之 InputStream源码(2)
  5. excel导入linux乱码怎么解决方法,,请大家都来看下,Excel导入有乱码?原因出在哪里?应该怎么解决?...
  6. 来电语音播报软件下载apk_消息语音播报app下载-消息语音播报安卓版 v1.0.1 - 安下载...
  7. PostGreSql学习笔记002---Navicat Premium中管理PostGreSql 错误:字段rolcatupdate 不存在
  8. 批处理定时执行任务_[Abaqus tips ] 分析任务的定时执行
  9. 基于 Spring Boot + Vue.js + MySQL 的 QQ 登陆实战
  10. php发送邮件pop3,php 发送邮件与pop3邮件登录代码
  11. IT资源书籍999999999本
  12. android studio partially installed,APK安装流程详解2——PackageManager简介
  13. 2022-2027年中国新能源车电控电机市场竞争态势及行业投资前景预测报告
  14. IOS11的新功能你发现了没有~~~
  15. 微信公众平台消息管理与群发图文教程
  16. C#语言实例源码系列-异或算法加密解密
  17. 2020届IC企业校招部分笔试题
  18. 玩机器人可以学到什么?
  19. Java中如何定义一个数组呢?
  20. GET提交中%5B与%5D代表什么意思?

热门文章

  1. R语言实战应用精讲50篇(二十七)-R语言实现随机森林(附R语言代码)
  2. Tableau系列之使用日期
  3. linux vim编辑kconfig 无法wq,编译linux-3.15.5时遇到的几个错误
  4. gitHub使用记录
  5. 虚拟机安装多了,怎么删除?
  6. Kafka设计解析(四):Kafka Consumer解析--转
  7. MySQL数据库InnoDB存储引擎中的锁机制--转载
  8. Java 理论与实践: 非阻塞算法简介--转载
  9. 安装opencms时遇到问题及解决方法
  10. ASIHTTPRequest类库简介和使用说明