【java基础】java诞生、特点、环境搭建,基础语法、数据类型、运算符、流程控制、数组等

一 、java发展历程

1.java创始
  • 一种面向Internet的编程语言。
  • 开始因为java程序可以在Web浏览器运行,成为java小程序(Applet)
  • applet使用GUI与web交互,applet内嵌在html中
2.java发展、版本迭代
1991年 Green项目,开发语言最初命名为Oak (橡树)
1994年,开发组意识到Oak 非常适合于互联网
1996年,发布JDK 1.0,约8.3万个网页应用Java技术来制作
1997年,发布JDK 1.1,JavaOne会议召开,创当时全球同类会议规模之最
1998年,发布JDK 1.2,同年发布企业平台J2EE
1999年,Java分成J2SE、J2EE和J2ME,JSP/Servlet技术诞生
2004年,发布里程碑式版本:JDK 1.5,为突出此版本的重要性,更名为JDK 5.0
2005年,J2SE -> JavaSE,J2EE -> JavaEE,J2ME -> JavaME
2009年,Oracle公司收购SUN,交易价格74亿美元
2011年,发布JDK 7.0
**2014年,发布JDK 8.0,是继JDK 5.0以来变化最大的版本**
2017年,发布JDK 9.0,最大限度实现模块化
2018年3月,发布JDK 10.0,版本号也称为18.3
2018年9月,发布JDK 11.0,版本号也称为18.9
3.体系平台
  • Java SE(Java Standard Edition)标准版
  • Java EE(Java Enterprise Edition)企业版
  • Java ME(Java MicroEdition)小型版
  • Java Card
4.应用

在这里插入图片描述

5.诞生 特征

java之父:James Gosling 开发Green项目时为了满足一些需求(移植、安全、垃圾回收等)开发
在这里插入图片描述

特征

  • 易学的: 接近c、c++
  • 强制面向对象 : 提供类、接口、单继承、多实现
  • 分布式的:支持Internet开发,java net接口,java的RMI(远程方法激活)
  • 健壮性的:强类型、异常以及① 去除了C语言中的指针 ②自动的垃圾回收机制 -->仍然会出现内存溢出、内存泄漏
  • 安全的 :安全机制,安全防范机制ClassLoader
  • 体系结构中立的:在java平台编译成结构中立class文件
  • 解释型:在java平台编译为字节码文件后,可在实现该java平台的任何系统解释器运行
  • 性能略高
  • 原生支持多线程:线程是特殊对象,需要Thread类或子孙类来创建
6.特点
  • 面向对象
    类、对象
    封装、继承、多态
  • 健壮性
    继承了c/c++的优点,但去掉了影响健壮性的指针、内存的申请与释放等,提供了一种相对安全的内存管理和访问机制
  • 跨平台
    Write once,Run AnayWhere
    在需要运行的java程序的平台安装jvm即可
7.两种机制
  • 垃圾回收机制(Garbage Collection)
  • java虚拟机(Java Virtual Machine)
  • 内存溢出问题仍然会发生
  • 用户-> java->字节码文件->JVM->操作系统->硬件

二、java环境搭建

JDK(java Development Kit )java开发工具包
JRE(java RunTime Environment) java运行时环境

1.Java语言的环境搭建:JDK、JRE、JVM关系

JDK=JRE+开发工具集(javac等)
JRE=JVM+java基础类库
在这里插入图片描述

2.配置java环境

安装:jdk
环境变量配置

  1. 配置JAVA_HOME为 D:\Java\jdk1.8.0_144\
  2. 配置CLASSPATH为 ;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;D:\JMF\lib\jmf.jar;D:\JMF\lib\sound.jar
  3. 配置Path为 %JAVA_HOME%\bin 和 %JAVA_HOME%\jre\bin
3.注释及代码风格
使用文档注释整个类或者方法
使用单行或者多行注释方法某一步
使用Tab实现缩进
运算符前后留出空格
行尾风格和次行风格

三、java基本语法

数据类型

1.关键字&保留字
关键字
用于定义数据类型的
class、interface、enum、byte、short、int、long、float、double、char、boolean、void
用于定义流程控制的
if、else、switch、case、default、while、do、for、continue、break、return
定义访问权限修饰符的
private、protected、public
定义类、函数、变量修饰符
abstract、final、static、synchronized
用于定义类与类之间关系的
extends、implements
用于定义建立实例与引用实例,判断实例的关键字
new、this、super、instanceof
用于异常处理的
try、catch、finally、throw、throws
用于包的
import、package
其他修饰关键字
native、strictfp、transient、volatile、assert
用于定义数据类型值的
true、false、null

保留字尚未使用goto、const

  • native:JNI,Java Native Interface,Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java本地接口)。

  • strictfp:一旦使用了strictfp来声明一个 类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,
    可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字

  • transient:Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输
    transient关键字就是让某些被修饰的成员属性变量不被序列化

  • volatile: volatile是Java提供的一种轻量级的同步机制 Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容易出错。

  • assert:assert意为断言的意思,这个关键字可以判断布尔值的结果是否和预期的一样,如果一样就正常执行,否则会抛出AssertionError。
    assert有两种用法:

    • (1)assert expression1;
    • (2)assert expression1 : expression2;

数据类型
在这里插入图片描述

2.标识符(Identifier)

Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符

技巧:凡是自己可以起名字的地方都叫标识符。

1. 定义合法标识符规则:

由26个英文字母大小写,0-9 ,_或 $ 组成

数字不可以开头。

不可以使用关键字和保留字,但能包含关键字和保留字。

Java中严格区分大小写,长度无限制。

标识符不能包含空格。

2. 命名规范

包名:多单词组成时所有字母都小写:xxxyyyzzz

类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz

变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个 单词首字母大写:xxxYyyZzz

常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ

 注意1:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。

 注意2:java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用。

3.变量

成员变量:
·····实例变量(不以static修饰)、类变量(可以static修饰)
局部变量:
······形参(方法、构造器中定义的变量)、方法局部变量(在方法内定义)、代码块局部变量(代码块内定义)

4.字符集
  • ASCII:除第一位外,后面七位表示,共定义了128种字符:48是0,65是A,97是a

  • Unicode:采用多字节表示,为所有字符分配独一无二的二进制代码,计算机无法辨别表示的是一个字符还是多个字符

  • 在这里插入图片描述

  • Utf-8:变长的字节表示,1~6位,是Unicode的一种,单字节表示时首位为0,类似ASCII

5.String

特点
不可变

效果相当于字符数组,底层是字节数组byte[]

new一次,地址就不同

以“ ”出现的字符串,始终一个String对象
在这里插入图片描述
==与equals

基本类型引用类型
==数据值地址值
equals内容值

API:Application Programming Interface 应用程序接口
StringBuilder
可变的字符串序列,(容器)

添加:append(任意类型) (链式编程: s.append().append().append())
反转:reverse

  • 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

  • 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

  • 在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。

  • StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

  • 由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

6.类型转换
  • 自动转型:容量小的转容量大的
  • 强制转型:容量大的转小的(long b = 154; int a= (int)b;)
  • boolean类型不可以转换为其它的数据类型。 整型默认 int 浮点型默认 double
    通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可 以实现把字符串转换成基本类型。

如: String a = “43”; int i = Integer.parseInt(a);

7.进制转换
  • 正数:原码、反码、补码都一样
  • 负数:原码 -> 原码除首位符号位外取反->反码 -> 反码最后一位加1 -> 补码
  • 二进制:Binary system,简写BIN。
  • 八进制:Octal number system,简写OCT。3位来计算
  • 十进制:Decimal system,简写DEC。
  • 十六进制:Hexadecimal,简写HEX。4位来计算
BIN->DEC:把二进制数按权展开、相加即得十进制数。
DEC->BIN:十进制数除2取余法(二进制位从后往前),即十进制数除2,余数为权位上的数,得到的商值继续除,直到商为0为止
BIN->OCT:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。
OCT->BIN:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。
BIN->HEX:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。
HEX->BIN:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。

运算符

1.取余

如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。

2.运算逻辑
逻辑运算符用于连接布尔型表达式,在Java中不可以写成33 & x<6&”和“&&”的区别: 单&时,左边无论真假,右边都进行运算;

双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。 

“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。

异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。 理解:异或,追求的是“异”! 
// 区分:||| 
		//相同点1:||| 的运算结果相同
		//相同点2:当符号左边是false时,二者都会执行符号右边的运算
		//不同点3:当符号左边是true时,|继续执行符号右边的运算,而||不再执行符号右边的运算
		//开发中,推荐使用||
//区分&&&
	//相同点1:&&& 的运算结果相同
	//相同点2:当符号左边是true时,二者都会执行符号右边的运算
	//不同点:当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
	//开发中,推荐使用&&
3.位运算

&、|、^、<<、>>、>>>、~

  1. 位运算符操作的都是整型的数据

  2. << :在一定范围内,每向左移1位,相当于 * 2

  3. >> :在一定范围内,每向右移1位,相当于 / 2
    在这里插入图片描述

面试题:最高效方式的计算2 * 8 ? 2 << 3 或 8 << 1

4.三元运算

凡是可以使用三元运算符的地方,都可以改写为if-else
反之,不成立。
如果程序既可以使用三元运算符,又可以使用if-else结构,那么**优先选择三元运算符**。原因:简洁、执行效率高。

流程控制

1.if-else

 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量

 语句块只有一条执行语句时,一对{}可以省略,但建议保留`

 if-else语句结构,根据需要可以嵌套使用`

 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略`

 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓 当多个条件是“包含”关系时,“小上大下 / 子上父下”`

2.switch

 switch(表达式)中表达式的值必须是下述几种类型之一:byte,short, char,int,枚举 (jdk 5.0),String (jdk 7.0);

 case子句中的值必须是常量,不能是变量名或不确定的表达式值;

 同一个switch语句,所有case子句中的常量值互不相同;

 break语句用来在执行完一个case分支后使程序跳出switch语句块;如 果没有break,程序会顺序执行到switch结尾

 default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时, 执行default

3.switch和if-else

if和switch语句很像,具体什么场景下,应用哪个语句呢?

如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几 种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。

 其他情况:对区间判断,对结果为boolean类型判断,使用if

凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。

4.循环语句

while:先判断后执行
do-while:先执行后判断
break:终止本层循环
多层循环时,通过添加标签来声明终止哪层循环

lable1:{
    lable2:{
    lable3:{
       break lable2;
     }
   }
}

continue:终止本次循环

数组

 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括 基本数据类型和引用数据类型。 
 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是 这块连续空间的首地址。
 数组的长度一旦确定,就不能修改。
 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
- 数组的分类: 
	按照维度:一维数组、二维数组、三维数组、…
	按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对 象数组)

在这里插入图片描述
对于基本数据类型而言,默认初始化值各有不同

对于引用数据类型而言,默认初始化值为null(注意与0不同!)
byte、short、int、char默认为 0
long 默认为 0L
float默认为0.0F double为 0.0
引用类型默认为 null boolean默认为false
Arrays:
在这里插入图片描述

知识图谱

在这里插入图片描述
在线阅读详细图谱:java基础

此篇仅为java基础入门知识,介绍了简单的数据类型、运算符、字符串、数组等常用
类型,想获取知识图请私信我!
面向对象与异常处理,下篇讲到!

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Itfuture03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值