JAVA基础语法(一)

计算机介绍: 

计算机包括 硬件 (hardware) 软件 (software) 两部分。硬件包括计算机中可以看得见的物理部分。而软件提供看不见的指令。这些指令控制硬件并且使得硬件完成特定的任务。
内存中的信息在断电时会丢失。那我们可以考虑将程序和数据永久的保存在存储设备上。当计算机
确实需要这些数据时,再移入内存,因为从内存中读取比从存储设备读取要快得多。

计算机硬件介绍:内存

比特 (bit) 和字节 (byte)
 在讨论内存前,先清楚数据是如何存储在计算机中的。
 计算机就是一系列的电路开关。每个开关存在两种状态:关(off) 和开 (on) 。如果电路是开的,它的值是1 。如果电路是关的,它的值是 0
 一个0 或者一个 1 存储为一个比特 (bit) ,是计算机中最小的存储单位。
 计算机中是最基本的存储单元是字节(byte) 每个字节由 8 个比特构成。
计算机的存储能力是以字节和多字节来衡量的。如下:
千字节 (kilobyte,KB) = 1024B
兆字节 (megabyte,MB) = 1024KB
千兆字节 (gigabyte,GB) = 1024MB
万亿字节 (terabyte,TB) = 1024GB

实测发现: 内存存取数据的速度比硬盘的存取速度快 10 ,在某些环境里,硬盘和内存之
间的速度差距可能会更大。而 CPU 的速度比内存不知还要快多少倍 。当我们把程序从硬盘
放到内存以后, CPU 就直接在内存运行程序,这样比 CPU 直接在硬盘运行程序就要快很多。
 内存解决了一部分CPU 运行过快,而硬盘数据存取太慢的问题。 提高了我们的电脑的运行
速度。内存就如同一条“高速车道”一般,数据由传输速度较慢的硬盘通过这条高速车道
传送至 CPU 进行处理!
 但内存是带电存储的( 一旦断电数据就会消失 ) ,而且容量有限,所以要长时间储存程序或数
据就需要使用硬盘。
 内存在这里起了两个作用:
1. 保存从硬盘读取的数据,提供给 CPU 使用
2. 保存 CPU 的一些临时执行结果,以便 CPU 下次使用或保存到硬

java语言概述:

Java基础知识图解

SUN( S tanford U niversity N etwork ,斯坦福大学网络公司 ) 1995 年推出的一门高级编程语言。
 是一种面向Internet 的编程语言。 Java 一开始富有吸引力是因为 Java 程序可以在Web 浏览器中运行。这些 Java 程序被称为 Java 小程序( applet )。 applet 使用现代的图形用户界面与Web 用户进行交互。 applet 内嵌在 HTML 代码中。
 随着Java 技术在 web 方面的不断成熟,已经成为 Web 应用程序的首选开发语言。 后台开发:Java PHP Python Go Node.js

Java在各领域的应用:

Java 的应用领域来分, Java 语言的应用方向主要表现在以下几个方面:
企业级应用 :主要指复杂的大企业的软件系统、各种类型的网站。 Java 的安全机制以及它的跨平台的优势,使它在分布式系统领域开发中有广泛应用。应用领域包括金融、电信、交通、电子商务等。
Android 平台应用 Android 应用程序使用 Java 语言编写。 Android 开发水平的高低很大程度上取决于Java 语言核心能力是否扎实。
大数据平台开发 :各类框架有 Hadoop spark storm flink 等,就这类技术生态圈来讲,还有各种中间件如flume kafka sqoop 等等 ,这些框架以及工具大多数是用Java 编写而成,但提供诸如 Java scala Python R 等各种语言 API 供编程。
• 移动领域应用:主要表现在消费和嵌入式领域,是指在各种小型设备上的应用,包括手机、PDA 、机顶盒、汽车通信设备等。

Java语言主要特性:

Java 语言是易学的 Java 语言的语法与 C 语言和 C++ 语言很接近,使得大多数程序员
很容易学习和使用 Java
Java语言是强制面向对象的 Java语言提供类、接口和继承等原语,为了简单起见, 只支持类之间的单继承,但支持接口之间的多继承 ,并支持类与接口之间的实现机制(关键字为implements)。
Java语言是分布式的 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库, 包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活) 机制也是开发分布式应用的重要手段。
Java语言是健壮的。 Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是Java 的明智选择。
Java 语言是安全的。 Java 通常被用在网络环境中,为此, Java 提供了一个安全机制以防恶意代码的攻击。如: 安全防范机制(类ClassLoader) ,如分配不同的名字空间以防替代本地的同名类、字节代码检查。
Java 语言是体系结构中立的。 Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为class 的文件),然后可以在实现这个Java平台的任何系统中运行。
Java 语言是解释型的。 如前所述, Java 程序在 Java 平台上被编译为字节码格式,然后可以在实现这个Java 平台的任何系统的解释器中运行。
Java 是性能略高的。 与那些解释型的高级脚本语言相比, Java 的性能还是较优的。
Java 语言是原生支持多线程的。 Java 语言中,线程是一种特殊的对象,它必须由Thread 类或其子(孙)类来创建。

Java语言运行机制及运行过程:

Java语言的特点

特点一: 面向对象
两个基本概念:类、对象
三大特性:封装、继承、多态
特点二: 健壮性
吸收了 C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
特点三: 跨平台性
跨平台性:通过 Java 语言编写的应用程序在不同的系统平台上都可以运行。 Write once , Run Anywhere
原理:只要在需要运行 java 应用程序的操作系统上,先安装一个 Java虚拟机 (JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。

Java两种核心机制

Java 虚拟机 (Java Virtal Machine)
垃圾收集机制 (Garbage Collection)

核心机制 垃圾回收
不再使用的内存空间应回收 —— 垃圾回收。
C/C++ 等语言中,由程序员负责回收无用内存。
Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM 空闲时,检查并释放那些可被释放的存储空间。
垃圾回收在 Java 程序运行过程中自动进行,程序员无法精确控制和干预。

Java语言的环境搭建

简单而言,使用 JDK 的开发工具完成的 java 程序,交给 JRE 去运行。
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE = JVM + Java SE标准类库


Java基本语法

关键字与保留字

关键字 (keyword) 的定义和特点
定义: Java 语言赋予了特殊含义,用做专门用途的字符串(单词)
特点: 关键字中所有字母都为小写
官方地址: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

Java 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字;goto 、 const

标识符(Identifier)

标识符:
Java 对各种 变量 方法 等要素命名时使用的字符序列称为标识符
技巧:凡是自己可以起名字的地方都叫标识符
定义合法标识符规则:
26 个英文字母大小写, 0-9 _ $ 组成
数字不可以开头。
不可以使用关键字和保留字,但能包含关键字和保留字。
Java 中严格区分大小写,长度无限制。
标识符不能包含空格。
Java中的名称命名规范:
包名 :多单词组成时所有字母都小写: xxxyyyzzz
类名、接口名 :多单词组成时,所有单词的首字母大写: XxxYyyZzz
变量名、方法名 :多单词组成时,第一个单词首字母小写,第二个单词开始每个
单词首字母大写: xxxYyyZzz
常量名 :所有字母都大写。多单词时每个单词用下划线连接: XXX_YYY_ZZZ
注意 1 :在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
注意 2 java 采用 unicode 字符集,因此标识符也可以使用汉字声明,但是不建议使用。

变 量

变量的概念:

内存中的一个存储区域
该区域的数据可以在同一类型范围内不断变化
变量是程序中最基本的存储单元。包含 变量类型、变量名和存储的值
变量的作用:
用于在内存中保存数据
使用变量注意:
Java 中每个变量必须先声明,后使用
使用变量名来访问这块区域的数据
变量的作用域:其定义所在的一对 { }
变量只有在其作用域内才有效
同一个作用域内,不能定义重名的变量

   声明变量

 语法:< 数据类型 > < 变量名称 >
 例如:int var;
变量的赋值
 语法:< 变量名称 > = < >
 例如:var = 10;
声明和赋值变量
 语法: < 数据类型 > < 变量名 > = < 初始化值 >
 例如:int var = 10;

变量的分类-按数据类型

对于每一种数据都定义了明确的具体数据类型(强类型语言),在内存中分配了不同大小的内存空间。

整数类型:byteshortintlong

Java 各整数类型有固定的表数范围和字段长度,不受具体 OS 的影响,以保证java 程序的可移植性。
java 的整型常量默认为 int 型,声明 long 型常量须后加‘ l’ 或‘ L’
java 程序中变量通常声明为 int 型,除非不足以表示较大的数,才使用 long

浮点类型:floatdouble

与整数类型类似, Java 浮点类型也有固定的表数范围和字段长度,不受具体操作
系统的影响。
浮点型常量有两种表示形式:
十进制数形式:如: 5.12 512.0f .512 ( 必须有小数点)
科学计数法形式 : 如: 5.12e2 512E2 100E-2
 float:单精度,尾数可以精确到 7 位有效数字。很多情况下,精度很难满足需求。
    double: 双精度,精度是 float 的两倍。通常采用此类型。
Java 的浮点型常量默认为 double 声明 float 型常量,须后加‘ f’ 或‘ F’

字符类型:char

char 型数据用来表示通常意义上 字符 ”(2 字节 )
Java 中的所有字符都使用 Unicode 编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
字符型变量的三种表现形式:
字符常量是用单引号 ( ‘ ’ ) 括起来的单个字符。例如: char c1 = 'a'; char c2= '中 '; char c3 = '9';
Java 中还允许使用转义字符‘ \ ’来将其后的字符转变为特殊字符型常量例如:char c3 = ‘\n’; // '\n' 表示换行符
直接使用 Unicode 值来表示字符型常量:‘ \uXXXX’ 。其中, XXXX 代表 一个十六进制整数。如:\u000a 表示 \n
char 类型是可以进行运算的。因为它都对应有 Unicode 码。

布尔类型:boolean

boolean 类型用来判断逻辑条件,一般用于程序流程控制:
if 条件控制语句;
while 循环控制语句;
do-while 循环控制语句;
for 循环控制语句;
boolean 类型数据只允许取值 true false ,无 null
不可以使用 0 或非 0 的整数替代 false true ,这点和 C 语言不同。
Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true1表示,false用0表示。

基本数据类型转换

字符串类型:String

 String不是基本数据类型,属于引用数据类型
 使用方式与基本数据类型一致。例如:String str = “abcd”;
 一个字符串可以串接另一个字符串,也可以直接串接其他类型的数据。

强制类型转换

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符:() ,但可能造成 精度降低或溢出 , 格外要注意。
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
如: String a = “43”; int i = Integer.parseInt(a);
boolean 类型不可以转换为其它的数据类型。

进 制

所有数字在计算机底层都以 二进制 形式存在。
对于整数,有四种表示方式:
二进制 (binary) 0,1 ,满 2 1. 0b 0B 开头。
十进制 (decimal) 0-9 ,满 10 1
八进制 (octal) 0-7 ,满 8 1. 以数字 0 开头 表示。
十六进制 (hex) 0-9 A-F ,满 16 1. 0x 0X 开头 表示。此处的 A-F 不区分大小写。
如: 0x21AF +1= 0X21B0
Java 整数常量默认是 int 类型,当用二进制定义整数时,其第 32 位是符号位;
当是 long 类型时,二进制默认占 64 位,第 64 位是符号位
二进制的整数有如下三种形式:
原码 :直接将一个数值换成二进制数。最高位是符号位
负数的反码 :是对原码按位取反,只是最高位(符号位)确定为 1
负数的补码 :其反码加 1
计算机以二进制 补码 的形式保存所有的整数。
正数的原码、反码、补码都相同
负数的补码是其反码 +1
为什么要使用原码、反码、补码表示形式呢?
计算机辨别“符号位”显然会让计算机的基础电路设计变得十分复杂 ! 于是人们想出了将符号位也参与运算的方法. 我们知道 , 根据运算法则减去一个正数等于加上一个负数, : 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了。

运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
算术运算符
赋值运算符
比较运算符(关系运算符)
逻辑运算符
位运算符
三元运算符

算术运算符

算术运算符的注意问题
如果对负数取模,可以把模数负号忽略不记,如: 5%-2=1 。 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。
对于除号“ /” ,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如:int x=3510;x=x/1000*1000; x 的结果是?
+” 除字符串相加功能外,还能把非字符串转换成字符串 . 例如:System.out.println(“5+5=”+5+5); //打印结果是? 5+5=55 ?

赋值运算符

符号: =
当“ = ”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
支持连续赋值。
扩展赋值运算符: +=, -=, *=, /=, %=

比较运算符

 

逻辑运算符

逻辑运算符用于连接布尔型表达式,在 Java 中不可以写成 3<x<6 ,应该写成x>3 & x<6
&” 和“ &&” 的区别:
& 时,左边无论真假,右边都进行运算;
& 时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|” 和“ ||” 的区别同理, || 表示:当左边为真,右边不参与运算。
异或 ( ^ ) 与或 ( | ) 的不同之处是:当左右都为 true 时,结果为 false
理解:异或,追求的是“异” !

位运算符

三元运算符

 

ASCII

在计算机内部,所有数据都使用 二进制 表示。每一个二进制位( bit )有 0 1 两种状态,因此 8 个二进制位就可以组合出 256 状态,这被称为一个字节( byte )。一个字节一共可以用来表示 256 种不同的状态,每一个状态对应一个符号,就是 256 个符号,从0000000 到 11111111
ASCII 码:上个世纪 60 年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII 码。 ASCII 码一共规定了 128 字符的编码,比如空格“SPACE” 32 (二进制 00100000 ),大写的字母 A 65 (二进制 01000001 )。这128个符号(包括 32 个不能打印出来的控制符号),只占用了一个字节的后面 7 位,最前面的1 位统一规定为 0
缺点:
不能表示所有字符。
相同的编码表示的字符不一样:比如, 130 在法语编码中代表了 é ,在希伯来语编码中却代表
( ג )

Unicode 编码

乱码:世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因 此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。
Unicode 一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一 无二的编码,使用 Unicode 没有乱码的问题。
Unicode 的缺点: Unicode 只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储:无法区别 Unicode ASCII :计算机无法区分三个字节表示一个符号还是分别表示三个符号。另外,我们知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费。

UTF-8

UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。
UTF-8 是一种变长的编码方式。它可以使用 1-6 个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则:
对于单字节的 UTF-8 编码,该字节的最高位为 0 ,其余 7 位用来对字符进行编码(等同于ASCII码)。
对于多字节的 UTF-8 编码,如果编码包含 n 个字节,那么第一个字节的前 n 位为 1 ,第一个字节的第 n+1 位为 0 ,该字节的剩余各位用来对字符进行编码。在第一个字节之后的所有的字节,都是最高两位为"10" ,其余 6 位用来对字符进行编码。

程序流程控制

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
• 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
顺序结构
分支结构
循环结构
顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。
分支结构
根据条件,选择性地执行某段代码。
if…else switch-case 两种分支语句。
循环结构
根据循环条件,重复性的执行某段代码。
while do…while for 三种循环语句。
注: JDK1.5 提供了 foreach 循环,方便的遍历集合、数组元素。

顺序结构

程序流程控制
程序流程控

分支结构:if-else使用说明

条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
 语句块只有一条执行语句时,一对{} 可以省略,但建议保留
 if-else语句结构,根据需要可以嵌套使用
 当if-else 结构是“多选一”时,最后的 else 是可选的,根据需要可以省略
 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓当多个条件是“包含”关系时,“小上大下 / 子上父下”

switch-case结构

switch 语句有关规则
 switch(表达式 ) 中表达式的值 必须 是下述几种类型之一: byte short, char int ,枚举 (jdk 5.0) String (jdk 7.0)
 case子句中的值必须是 常量 ,不能是变量名或不确定的表达式值;
 同一个switch 语句,所有 case 子句中的常量值互不相同;
 break语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果没有break ,程序会顺序执行到 switch 结尾
 default子句是 可任选的 。同时,位置也是灵活的。当没有匹配的 case 时,执行default
switch if 语句的对比
if switch 语句很像,具体什么场景下,应用哪个语句呢?
如果判断的具体数值不多,而且符合 byte short char int String 、枚举等几种类型。虽然两个语句都可以使用,建议使用swtich 语句。因为 效率稍高
其他情况:对区间判断,对结果为 boolean 类型判断,使用 if if 的使用范围更广。也就是说, 使用 switch-case 的,都可以改写为 if-else 。反之不成立。

循环结构

循环结构
在某些条件满足的情况下,反复执行特定代码的功能
循环语句分类
for 循环
while 循环
do-while 循环
最简单“无限” 循环格式: while(true) , for(;;), 无限循环存在的原因是并不 知道循环多少次,需要根据循环体内部某些条件,来控制循环的结束。
嵌套循环 ( 多重循环 )
 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为 外层循环 内层循环
 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
 设外层循环次数为m 次,内层为 n 次,则内层循环体实际上需要执行 m*n 次。

break的使用

continue的使用

return的使用

return :并非专门用于结束循环的,它的功能是结束一个方法。 当一个方法执行到一个return 语句时,这个方法将被结束。
break continue 不同的是, return 直接结束整个方法,不管这个return 处于多少层循环之内

特殊流程控制语句说明

break 只能用于 switch 语句 循环语句 中。
continue 只能用于 循环语句 中。
二者功能类似,但 continue 是终止 本次 循环, break 是终止 本层 循环。
break continue 之后不能有其他的语句,因为程序永远不会执行其后的语句。
标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
很多语言都有 goto 语句, goto 语句可以随意将控制转移到程序中的任意一条语句上,然后执行它。但使程序容易出错。Java 中的 break continue 是不同于goto 的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值