重庆华清远见Java基础技术总结

java概述

java的发展历史

  • 1990年SUN公司的James Gosling领导设计了一门叫做Oak的语言,但是未发展成功,但是这门语言留了下来。

  • Oak经过改造,成为了现在的java.

  • 1995年,Java正式诞生,推出了Java1.0以及开发工具包JDK1.0

  • 2004年,Java推出了Java5,此后都以JavaX命名

  • 2009年,Sun公司被Oracle收购,之后都由Oracle进行更新维护

  • 2014年,推出了Java8,是当前最流行稳定的Java版本,也是长期维护版LTS

    当前长期维护版为Java8、Java11和Java17

java的分类

  • JavaME(称为Java微型版,现已基本淘汰 )

  • JavaSE(Java标准版,是Java的核心和基础,也是JavaME和JavaEE的核心)

  • JavaEE(Java企业版,用于开发WEB应用。Java的流行全靠JavaEE)

Java流行的原因

他是一门跨平台,半解释半编译的面向对象的语言,有以下主要的优点

  • 简单

  • 安全

  • 开源

  • 多线程

  • 半解释半编译

  • 面向对象

JDK,JRE和JVM三者之间的关系

 

Java代码中的一些注意事项

  • 要写代码,必须先创建class,class称为类,是一个Java程序的基本组成单位。

  • 每个能运行的Java程序,有且只有一个main方法,称为主方法或者入口函数,是程序的起点。

  • 符号

Java中的符号全部都是英文状态下的符号。可以在输入法中设置中文状态下使用英文标点

“{}”必须成对出现。用于定义类、定义方法和定义代码块

“[]”必须成对出现。用于定义数组、使用数组

“()"必须成对出现。用于表示方法的参数

“空格”用于分割关键字和代码。可以是一个空格,也可以是多个

“.”用于调用某个类或对象的属性和方法

“;"用于表示一句代码的结束,大括号后不需要加分号

  • 换行和缩进

  • 在每次出现一次大括号时,就要进行一次缩进

Java中的注释

  • 单行注释(快捷键ctrl+/)

  • 多行注释(快捷键ctrl+shift+/)

  • 文档注释(很少用)

Java编程语言的命名规则

  • 驼峰命名法

    如果用多个单词描述一个内容,除首字母外,其他单词首字母大写。

    如studentName、empId。

  • 帕斯卡命名法

    所有单词首字母全部大写

    如StuendClass、EmpName

Java中的标识符及其命名规则

Java中的类名,方法名和变量名统称为标识符

  • 类名使用帕斯卡命名法

  • 方法名和变量名使用驼峰命名法

  • 做到见名知意

这些要求不是强制的。

命名规则

  • 标识符使用字母,数字,下划线和$组成

  • 不能以数字开头

  • 不能使用Java中的关键字

    关键字如下:

这些是强制要求的,不然无法通过编译。

Java中的数据类型

原始类型

  • 整形

    。byte 字节

    。short短整形

    。int整形

    。long长整形,赋值时在数字后加l或L

  • 浮点型

    。float单精度浮点型,赋值时在后面加f或F

    。double双精度浮点型

  • 字符型

    。char

  • boolean布尔型 

 

引用类型

  • 接口

  • 数组

变量

在内存中的一块区域。由于这块区域中的数据可以发生变化,所以称为变量。定义变量,就是在内存中申请一块相应数据类型的空间,并对其命名的过程。

定义变量

语法:数据类型 变量名;

如果要同时定义多个相同类型的变量,可以写作:数据类型 变量名1,变量名2.....;

运算符

算数运算符

  • 需要两个操作数参与,如果有浮点数参与运算,结果为浮点型。

  • 如果同时多个符号一起使用,遵循数学中的四则运算规则,先乘除,后加减

  • 运算时最终结果的数据类型,以所有参与运算的操作数中所占字节最大的类型为准

 

关系运算符

  • 需要两个操作数参与 ,计算结果为布尔型boolean

  • ==用于判断相等,=用于赋值

  • ==用于比较两个原始类型的值或引用类型的内存地址

  • 关系运算的结果为true/false

 

逻辑运算符

位运算符

 

 

赋值和赋值运算符

 

如:

int a=3;
a*=a=2;//等价于a=a*(a+2) 结果为15

自增自减运算符

 

  • 只有一个操作数参与运算,称为单目运算符

  • a++或++a相当于a+=1或a=a+1。--同理

  • 如果++或--独立成行使用,无论符号在前在后,都将结果+1或-1

  • 如果++或--不是单独成行

    符号在前,先+1或-1计算后再使用值

    符号在后,先使用值后再+1或-1计算

    条件运算符

    表达式1?表达式2:表达式3

    首先运算表达式1,如果结果为true,执行问号后的表达式2;

    如果结果为false,执行冒号后的表达式3。

    整个表达式的最终结果为表达式2或表达3。

运算符的优先级

小括号>>单目运算符>>算术运算符>>关系运算符>>逻辑运算符>>条件运算符>>赋值/复合赋值运算符

使用条件运算符判断闰年

 

条件语句

if语句

单分支if语句

if(判断条件){//判断条件的结果为布尔值
条件满足时执行的代码
}

双分支if语句

if(判断条件){
条件满足时执行的代码
}else{
条件不满足时执行的代码
}

多分支if语句

if(判断条件1){
如果判断条件1满足时执行
}else if(判断条件2){
如果判断条件2满足时执行
}else if(判断条件3){
如果判断条件3满足时执行
}else{
如果所有条件都不满足时执行
}

if嵌套

if(){
if(){
}
}else{
if(){
}
}

if嵌套不要嵌套太多层,会导致代码可读性变低。

if嵌套可以改造成if(){return}形式,让程序满足条件时,不再执行后续内容

switch语句

switch(变量){//要判断的变量,只能是非long整型、字符型char和字符串String和枚举类型
case 值:
//如果变量的值与当前case的值匹配,执行这里的代码
break;
case 值:
//如果变量的值与当前case的值匹配,执行这里的代码
break;
...
default:
//如果没有任何值与变量的值匹配,执行这里的代码
break;
}

注意事项:

swtich小括号中的变量只能是非long的整型、字符型char、字符串String和枚举类型

小括号中的变量类型要与case后的值的类型相匹配

如果有某个case后的内容和变量值匹配,执行case后的代码,如果没有任何case匹配,执行

default后的代码

break和default可以省略。如果不写break,在某个case匹配时,执行玩相应的代码后继续执行后

续case后的代码,直到遇到break或没有代码为止

如果多个case后执行的内容一致,可以省略break,将统一要做的代码放在最后的case后

if 和switch的选择

  • 如果条件能够一一例举出来时,使用switch语句更为简洁

  • 如果条件是一个范围时,只能使用if语句,如大于100

  • switch语句可以改写为if语句,if语句不一定能改为switch语句

if语句和switch语句中的return关键字

  • if语句中可以使用return关键字不再执行后续的代码。可以使用这一点将原本的嵌套改造成if

    return的形式。

  •  

  • switch语句中,也可以使用return,但会造成switch语句之后的代码不执行,所以一般不在switch语句中使用return;

  •  

循环

while

while(循环条件){//小括号中的条件结果为boolean值

满足循环条件时重复执行的代码

}

执行流程:

先执行小括号中的内容,如果结果为true,执行大括号中的内容,再循环执行小括号中的内容,判断如果为false则停止循环。

while循环有可能一次都不执行。

do-while

do{
满足循环条件时重复执行的代码
}while(循环条件);

执行流程:

先执行一次do大括号中的内容,再判断while小括号中的内容,如果成立,再次执行do大括号中的内容,如果不成立,停止循环。

do-while循环至少执行一次

for

//表达式1为定义循环变量
//表达式2为判断循环条件
//表达式3为更新循环变量
for(表达式1;表达式2;表达式3){
循环体
}

执行流程

首先执行表达式1,再执行表达式2,如果表达式2的结果为true,执行循环体,再执行表达式3,再执行表达式2判断,如果表达式2的结果为false,结束循环.

break和return

所有的循环都可以使用break和return停止循环。

break是停止循环后,继续执行循环之外的内容。

return是结束方法,不再执行return之后的内容。

continue

在循环语句中,使用continue,可以停止本次循环,不再执行continue之后的代码,直接进行下一次循环。

int i = 1;
while (i < 10) {
if (i++ % 2 == 0) {
continue;//如果遇到continue,结束本次循环(不再执行continue之后的代码),直接进入下一
次循环
}
System.out.println(i);
}
//最终打印2 4 6 8 10

循环总结

  • 如果已知循环次数,推荐使用for循环。如遍历数组、集合等。

  • 如果未知循环次数,推荐使用while循环。

  • while循环和for循环可以相互转换

  • do-while循环至少执行一次,for循环和while循环有可能一次都不执行

循环嵌套

如果一个重复的过程还需要将其整体重复执行时,可以使用循环嵌套。

//用*打印矩形
//将循环一行这件事再循环5次
for (int n = 1; n <= 5; n++) {
//循环打印一行
for (int i = 1; i <= 10; i++) {
System.out.print("*");
}
System.out.println();
}

数组

概念

  • 一组类型相同数据的有序集合。

关于数组

  • 数组实际在内存中是一块连续的空间。是保存数据的区域。

  • 数组定义时需要确定大小和数据类型,不可改变。

  • 定义数组时的变量保存的是实际内存空间的地址。

  • 数据中保存的数据称为元素,每个元素有一个唯一的位置,称为索引(下标),这个索引从0计数。

  • 可以通过数组的索引给数组赋值或读取数组中某个索引上的值。

定义数组

语法:数据类型[] 数组名; 或 数据类型 数组名[];。建议使用前者。

//定义数组,如果数组未初始化,不能使用
int[] score;
//也可以这样写,但是不建议
//int score[];

数组初始化

语法:数组名=new 数据类型[数组大小];

//定义一个保存数组的变量nameList
String[] nameList;
//在内存中申请一块连续空间,将这个空间的地址保存到变量nameList中
nameList=new String[10];

定义数组的同时初始化

语法:数据类型[] 数组名 = new 数据类型[数组大小];

double[] salary = new double[30];

给数组赋值

动态赋值

通过数组名[索引]给数组中某个位置赋值

静态赋值

在定义数组的同时赋值

  • 数据类型 [] 数组名 = new 数据类型[]{元素1,元素2,...}

  • 数据类型 [] 数组名 = {元素1,元素2,...}

注意

  • 数组一旦初始化后,数组大小不能改变,其中的元素类型要统一

  • 数组的索引范围是[0,数组大小-1],使用时不能超出范围。在编译时无法识别是否超出数组索引,但运行时会抛出"数组索引溢出"异常

  • 数组一旦初始化后,如果没有赋值,默认有初始值

读取数组中的元素

  • 通过“数组名[索引]”读取某个索引对应的元素

    String[] nameList={"王海","刘涛","赵敏"};
    System.out.println(nameList[0]);
    System.out.println(nameList[1]);
    System.out.println(nameList[2]);
  • 可以通过循环给数组赋值和读取元素

增强for循环

专门用于遍历数组或集合元素的一种循环

语法:for(数据类型 变量名 : 数组名){}

String[] list = {"admin","qwe","aaa"};
//使用增强for循环遍历
for(String name : list){
System.out.println(name);
}

冒泡排序

数组中每相邻的两个元素进行比较,如果不满足排序的规则,交换位置。

核心代码j应用举例:

public class ArrayTest5 {
public static void main(String[] args) {
//定义一个整型数组,将其中的元素进行升序排序
int[] list = {17, 22, 13, 20, 32};
//外层循环表示比较的轮数
for (int i = 1; i <= list.length - 1; i++) {
//内存循环表示每轮比较的次数
for (int j = 1; j <= list.length - i; j++) {
//每次比较时,判断是否满足排序要求,如果不满足则交换位置
if (list[j - 1] > list[j]) {//这里需要升序,所以如果第一个元素大于第二个
元素,就要交换位置
//交换位置
int temp = list[j - 1];//先将其中任意一个索引上的元素取出来
list[j - 1] = list[j];//再将另一个元素放过去
list[j] = temp;//再将第一个元素放回来
}
}
}
//打印排序后的元素
for (int i : list) {
System.out.println(i);
}
}
}

附:生成随机数的方法

Random rd = new random();
//生成[0,num)范围内的随机int数
int res=rd.nextInt(int num);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值