java基础内容与控制类型的基础语法

基础内容及语法

1.java基础

由硬件和软件组成

应用领域:

​ 1)科学计算
​ 2)人工智能(数据分析)
​ 3)数据的处理
​ 4)辅助设计
​ 5)计算机网络…

软件的划分:

​ 1)系统软件:dos,windows,Linux(centos7.8,红帽,deepin:国产),Mac
​ 移动端:android,ios, 鸿蒙(华为)
​ 2)应用软件: 客户端软件必须更新才能使用服务器高版本的功能!
​ QQ客户端
​ office办公软件
​ vnc-view(客户端)
​ vnc-service(服务端)

软件结构的划分:

C/S结构 :Client/Server 客户端和服务端
举例:QQ客户端
特点:客户端软件必须升级才能使用服务器高版本的功能

B/S架构:Browser/Server:浏览器和服务器端的交互 (以后的方向)

​ 服务器:开源的服务器:tomcat web容器 理论并发访问量:500个;http服务器:nginx(负载均衡,反向代理):5万个

​ 特点:只要能够满足计算机中有浏览器即可
(IE,firfox,谷歌,浏览器端不需要特定的升级,就能够访问服务器中的一些内容!

软件开发:

notepad++ 高级记事本

idea(2019/2020) :联想很精确(不适合前两周用)

DOS命令:
命令用法
exit退出当前DOS命令窗口
DOS复制:窗口中任意位置点击鼠标右键
dir列出当前目录下的所有子文件/子目录
cd(change directory【改变目录】)
cd …回到上级目录
cd \直接回到根部路径
c:回车 d:回车 e:回车 f:回车切换盘符
Ipconfig查看IP地址
Xxx -version查看版本
Del *删除
md创造一个文件夹
rd删除文件夹(必须为空)
rd /s /q强制删除
rd /s带内容的目录(文件夹):询问是否删除这个目录
java的基本含义:

​ JDK:(Java Development Kit)java开发工具包
​ JRE:(Java Runtime Envirment)java运行环境
​ JVM:(Java Virtual Machine)java虚拟机

下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

安装jdk完成之后:进入dos,输入java -version:查看当前本地的jdk的版本信息

安装好jdk之后:需要在安装目录的bin目录去使用的编译命令和执行命令
javac.exe 编译命令
java.exe 运行命令

path环境(系统配置):

配置path环境变量的原因:
我们需要在任何目录下使用javac和java对Java源文件进行编译和运行

方式1:(存在弊端)

​ win10/win8---->此电脑---->右键属性---->高级系统设置---->环境变量---->系统变量 找到path将jdk安装目录的bin路径复制到path里面即可!

​ path: jdk\bin的路径

弊端:
1)当jdk版本升级了,开发者需要手动更改path:可能造成的path其他变量更改了,所以不好!
2)二阶段使用tomcat服务器(使用java编写的),启动的时候会寻找计算机中系统变量中的path是否存在
JAVA_HOME,如果找不到,服务器启动时候出现"闪屏";

使用方式2:(推荐):

​ win10/win8---->此电脑---->右键属性---->高级系统设置---->环境变量---->系统变量

​ 新建变量名:
​ JAVA_HOME
​ 变量值:
​ jdk路径

优点:

​ 1)不需要手动更改path
​ 2)tomcat服务器启动的时候,找到JAVA_HOME变量,就不会出现闪屏

path环境变量的执行流程:

​ 写好了java文件,对java文件进行编译和运行;

​ 1)首先需要在dos中找到java文件的目录,如果找不到

​ 2)就会在path环境变量中找%JAVA_HOME%\bin

​ 3)如果path中都没有这个文件,那么久会提示 找不到文件…

classpath:临时环境变量(了解):

​ classpath执行流程:先在系统变量中寻找是否存在classpath的路径
​ 如果存在优先的是这里面的xxx.class文件

2.注释

单行注释:
//只注释当前行
多行注释:
 /*

注释内容

注释内容

...

​      */
javadoc注释:

(这种注释是比较专业的注释,该注释信息会被javadoc.exe工具解析提取并生成帮助文档)

/**

\* javadoc注释

\* javadoc注释

\* javadoc注释

\* javadoc注释

\* javadoc注释

*/

3.关键字和标识符

3.1关键字

什么是关键字:
被Java语言赋予特定含义的单词!
而且在高级记事本以及开发工具中,针对"关键字"有一种特殊颜色标记!
notepad++ eclipse/idea
editplus
注意事项:
goto和const这两个作为保留字使用,不是关键字!

关键字:
class :表示创建一个类(是Java最基本的单元)
public :权限修饰符的一种 :公共的,公开的,访问权限足够大
static :后面面向对象部分讲: 静态修饰符号
void :和Java中的方法有关系 (讲Java方法的时候去说)

在这里插入图片描述

3.2标识符

什么是标识符

​ 在Java原程序当中凡是程序员有权利自己命名的单词都是标识符(黑色字体

​ 可以标识的元素:类名、方法名(main)、变量名、接口名、常量名(srgs)…

标识符的组成:

一个合法的标识符只能由“数字、字母、下划线_、$”组成,不能含有其他符号

开头不能是数字

严格区分大小写

关键字(蓝色的)不能做标识符

理论上无长度限制,最好不要太长

如果是单个单词:

字母全部小写
举例:

main()
		int price  = 100 ;

如果是多个单词:

第一个单词字母全部小写,从第二个单词开始每个单词首字母大写,其余小写(小驼峰命名法)
举例:

checkUserName()
			int applePrice  = 100 ;

给常量命名的规则:

如果是单个单词:字母全部大写(推荐多个单词)
举例:

HELLO=100

如果是多个单词:每个单词字母大写,单词和单词使用下划线隔开
举例:

HELLO_WORLD=100

后期学习:Thread:线程类

public final static int MIN_PRIORITY = 1; 最小优先级

public final static int NORM_PRIORITY = 5; 默认优先级

public final static int MAX_PRIORITY = 10;最多优先级

4.常量

在程序的执行过程中,其值不发生改变的量!

1)字面值常量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FfWw62sD-1625888928178)(C:\Users\幻想家懒得想了\AppData\Roaming\Typora\typora-user-images\image-20210710105015203.png)]

**字符串常量:**使用双引号包裹起来的内容:称为"字符串常量"
举例:
“我爱高圆圆”
“HelloWorld”
**字符常量:**使用单引号包裹起来的内容
举例:
‘a’,‘A’,‘0’
‘我’
‘abc’ 非法数据(只能单引号括起来的单个内容)
整数常量:
100 包含"进制" 整数----默认十进制
64

小数常量:
3.14
12.56
布尔常量:true false

空常量:null
引用数据类型默认值null

2)自定义常量

(面向对象后面讲:关键字:final:状态修饰符)

public final static int MIN_PRIORITY = 1; 最小优先级

5.变量

什么是变量?

变量本质上来说是内存中的一块空间,这块空间数据类型、有名字、有字面值

变量包括:数据类型、名称、字面值

变量是内存中存储数据的最基本的单元

变量要求:

变量存储的具体的“数据”,必须和变量的“数据类型”一致,当不一致的时候,编译报错。

变量的声明/定义变量的语法格式:

​ 数据类型 变量名(合法标识符);

变量的赋值:

​ 语法格式:变量名 = 字面值(“=”是赋值运算符)

​ PS.字面值的数据类型必须和变量名的数据类型一致

eg.

Int i=10;//声明和赋值可以放在一起完成

/*
变量赋值之后,可以重新赋值(变量值可变)

有了变量的概念之后,内存空间得到后可重复使用
*/

int i=10;

System.out.println(i);//10

int i=100;

System.out.println(i);//100

...

...

System.out.println(i)
访问变量的访问方法:

​ 1.读取变量中保存的具体数据 get/获取

​ 2.修改变量中保存的具体数据 set/设置

eg.

i=20;//set

System.out.println(i);//get

//变量在一行上可以声明多个。先声明,再赋值,才能访问。

int a,b,c;
int a=1;
int b=2;
int c=3;

Java代码是遵循自上而下的顺序依次执行的,前一行的代码必须完整的结束之后,下一行的程序才能执行

在同一个“作用域”当中,变量名不能重名,但是变量可以重新赋值

变量的作用域:

作用域:变量的有效范围,在什么范围之内是可以被访问的,只要出了这个范围,变量就不会被访问了。出了{}就不认识了。

变量的分类:

根据变量声明的位置来分类:

局部变量:在方法体中声明的变量

成员变量:在方法体外,类体之内声明的变量

(不同作用域中,变量名可以重名;同一作用域中,变量名不能重名)

6.数据类型

数据类型的作用?

​ 不同的数据有不同的类型,不同的数据类型底层会分配不同的空间

​ 数据类型是指导程序在运行阶段应该分配多大的内存空间

6.1基本数据类型

基本数据类型取值范围默认值占用空间大小(字节)
byte-128~12701
short-32768~3276702
int-231~2……231-104
long-263~263-108
float0.0f4
double0.0d8
char0~2^16-1(65535)false(0)2
booleantrue/flase/u00001
字节

1 byte = 8 bit(1bit表示一个二进制位)

1 KB = 1024 byte

1 MB = 1024 KB

1 GB = 1024 MB

1 TB = 1024 GB

整数型当中的byte类型,占用1个字节,所以byte类型的数据占用8个比特位。

byte类型的取值范围是多少呢?

关于java中的数字类型,数字都是由正负之分的,所以在数字的二进制当中有一个二进制位被称为“符号位”,并且这个“符号位”在所有二进制位的最左边,0表示正数,1表示负数。

max:01111111(10000000(二进制)-1=127) min:11111111(-127)

具体的二进制表示还包括:原码、补码、反码

进制转换

二换十 十换二…

计算机只认识二进制,那么计算机是如何表示现实世界当中的文字呢?

八种基本数据类型中char类型表示的是现实生活中的文字,文字和计算机二进制之间默认情况下是不存在任何转换关系的。

为了让计算机可以也表示先生世界当中的文字,我们需要进行人为的干涉,需要人负责提前制定好“文字”和“二进制”之间的对照关系。这种对照关系被称为:字符编码。

计算机最初只支持英文,最先出现的字符编码是:ASCII码

‘a’=97【01100001】

‘A’=65

‘0’=48

编码和解码时采用同一套对照表,不会出现乱码。

当解码和编码时采用的部室同一套对照表时,会出现乱码

数据类型转换
public class 练习{

    public static void main(String[] args){

        /*
        100L是long类型字面值
        x是long类型变量
        不存在类型转换,直接赋值
        */
        long x=100L;
        /*
        x是long类型,8个字节
        y是int类型,4个字节
        编译报错,大容量不能直接变一个小容量
        int y=x;
        大容量转换小容量,需要进行强制类型转换
        强制类型转换需要加“强制类型转换符”
        加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度
        随意强制类型转换谨慎使用,因为损失精度之后损失很严重
        强制转换原理
        原始数据 00000000 000000000 00000000 00000000 0000000 0000000 00000000 01100000
        强制转换之后:00000000 0000000 00000000 01100100

        将左边的二进制砍掉!
        */

        int y=(int)x;
        System.out.println(y);

        /*
        原始数据:00000000 000000000 00000000 00000000 10000000 00000000 00000000 000000000
        强制转换之后的数据:10000000 00000000 00000000 00000000(补码形式)
        以上补码转换到原码就是最终结果
        */

        long k=2147483648L;
        int e=(int)k;
        System.out.println(e);//损失精度非常严重,结果是负数【-2147483648】

        /*
        依据目前内容,以下程序无法编译
        理由:50是int类型的字面值,b是byte类型的变量
        显然是大容量int转换成的小容量byte
        大容量转换成小容量是需要添加强制转换符的,一下程序没有添加强制转换符号,所以编译报错
        但是,实际编译时,以下代码通过了,盖子面值可以直接赋值给byte类型的变量
        */

        byte b=50;//可以
        byte c=127;//可以

        //编译报错,128这个int类型的字面值超出了byte类型的取值范围,不能直接赋值给byte类型的变量
        //byte b1=128;

        byte b1=(byte)128;//-125

        /*
        纠正错误,需要使用强制类型转换符,但是一定会损失精度
        原始数据:00000000 00000000 00000000 10000000
        强制转换之后10000000【这是储存在计算机内部的,这是一个补码,】
        System.out.println(b1);
        */
    }
}

补码:

​ 正数:与原码相同

​ 负数:0变1,1变0,后加1

当一个整数字面值没有超出byte、short、char的取值范围,这个字面值可以直接赋值给byte、short、char类型的变量。(为了方便程序员的编程)

6.2引用数据类型

数组、类、接口

7.运算符

7.1算术运算符

​ 运算符有优先级,一个表达式当中有过多个运算符,不确定的加(),优先级得到提升。

​ 没有必要专门去记忆运算符优先级

​ ++出现在变量后,先做赋值运算,在对变量中保存的值进行自加1
在这里插入图片描述
在这里插入图片描述

​ ++出现在变量前,先进性自加1,在进行赋值
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

7.2关系运算符

​ 关系运算符的运算结果一定是布尔类型:true/false

7.3逻辑运算符

​ & 逻辑与 (两边的算子都是真,结果才为真)

​ | 逻辑或 (两边算子只有一个是真,结果就是真)

​ ! 逻辑非 (取反)

​ ^ 逻辑异或 (两边算子不一样(真假/假真),结果就是真)

​ && 短路与 (与逻辑与运算结果相同,不过短路与存在短路现象)

​ 前半被判为false,整句便是false,后半便不再执行(比逻辑与更智能)

​ || 短路或 (与逻辑或运算结果相同,不过短路或存在短路现象)

​ 前半为真,整句为真,后半不再执行

​ 逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型

7.4赋值类运算符
基本的赋值运算符:

​ =

扩展的赋值运算符:

​ += -= *= /= %=

eg.

byte b=10;

b=b+5;//报错

纠正:

b = (byte)(b+5);

b + = 5;//b+=5等同于b=(byte)(b+5)

扩展类的赋值运算符,不改变运算结果的数据类型(假设最初是byte,无论怎么追加、追减,最终结果还是byte类型)

7.5字符串连接运算符

关于java中的“+”运算符

1加法运算(数字+数字)

2字符串的连接运算(字符串+字符串)

3在一个表达式当中可以出现多个“+”,在没有添加小括号的前提下,遵循自左向右依次运算。

eg.

int a=1;

int b=2;

System.out.println(a+++b+=+(a+b));//1+2=3
7.6三元(三目/条件)运算符

语法规则:

布尔表达式?表达式1:表达式2

执行原理:

当布尔表达式结果为真时,选择表达式1作为整个表达式的执行结果

当布尔表达式结果为假时,选择表达式2作为整个表达式的执行结果

eg1.

boolean sex=true;

Char c =sex ? ‘男’:‘女’;//男

eg2.

Sex=true;

System.out.println(sex ?‘男’:“女”);
7.7位运算符
位运算符
<<乘2的n次幂
>>除2的n次幂
>>>被移位二进制最高位无论是0还是1,空缺位都用0补。

流程控制语句

8.流程控制语句

1.顺序结构语句
2.选择结构语句
2.1 if语句

if语句的语法结构:四种编写方式

/*PS.对于java中的if语句来说,只要有一个分支执行,整个if语句全部结束。*/

//第一种:
if(布尔表达式){
/*
java语句;
java语句;
java语句;
java语句;
...
*/
}

//第二种:
if(布尔表达式){
/*java语句;
java语句;
...
*/
}else{
/*
java语句;
java语句;
...
*/
}

//第三种:
if(布尔表达式){
/*
java语句;
java语句;
...
*/
}else if(布尔表达式){
/*
java语句;
java语句;
...
*/
}else if(布尔表达式){
/*
java语句;
java语句;
...
*/
}.....

//第四种:
if(布尔表达式){
/*
ava语句;
java语句;
...
*/
}else if(布尔表达式){
/**
java语句;
java语句;
...
*/
}else if(布尔表达式){
/*
java语句;
java语句;
*/
...
}else{
/*
java语句;
java语句;
...
*/
}   

第二种编写方式和第四种编写方式都带有else分支,这两种方式可以保证100%会有分支执行。

所有的控制语句是可以相互嵌套使用的。只要河里嵌套就行。

嵌套使用时,代码格式保持完美。【该缩进时,必须缩进】

if语句的分支中只有一条java语句时,大括号可以不写。

eg.

import java.util.Sacnner;

public class 天气问题 {
    public static void main(String[] args) {
        
        System.out.println("闲的没事干的寒假编程练习");
        System.out.println("天气分为“sun”和“rain”两种");
        System.out.println("性别分为“man”和“rain”两种");
        java.util.Scanner s = new java.util.Scanner(System.in);
        
        //接收天气状况
        System.out.print("请输入当前天气状况:");
        String weather = s.next();
        System.out.print("请输入性别:");
        String sex =s.next();
        
        if("sun".equals(weather)){
            System.out.print("请输入今天的温度:");
            int wendu =s.nextInt();
            System.out.println("大晴天");
            if(wendu>30){
                if("man".equals(sex)){
                System.out.println("戴墨镜");
                }else if("woman".equals(sex)){
                System.out.println("撒防晒霜");
                }else{
            System.out.println("看清楚再输入!");
            }
            }else{
            System.out.println("不出门了");
            }
        }else if ("rain".equals(weather)){
            System.out.println("大雨天");
            if("man".equals(sex)){
            System.out.println("大黑伞");
            }else if("woman".equals(sex)){
            System.out.println("小花伞");
            }else{
            System.out.println("看清楚再输入!");
            }
        }else {
            System.out.println("看清楚再输入!");
        }
    }
}
2.2swtich语句
switch语句的语法结构:

    switch(intString类型的字面值或变量){
        case int或string类型的字面值或变量:
        	java语句;
        	...
        breakcase int或string类型的字面值或变量:
        	java语句;
        	...
        breakcase int或string类型的字面值或变量:
        	java语句;
        	...
        breakDefault:
        	java语句;
        	....
    }

执行原理:

1 switch后面小括号当中的“数据”和case后面的“数据”进行一一匹配,匹配成功的分支执行。

2 按照自上而下的顺序依次匹配。

3 匹配成功的分支执行,分支当中最后有“break”语句的话,整个switch语句终止。

4 匹配成功的分支执行,分支当中没“break”语句的话,直接进入下一个分支执行(不进行匹配),这种现象被称为case穿透现象(提供break语句可以避免穿透现象)

5 所有分支都没有匹配成功的话,当有default语句时,会执行default语句中的

6 switch后面和case后面只能是int或string类型的数据,不能是其他类型

当然byte short char也可以直接写到switch和case后面,因为他们可以进行自动类型转换转换成int类型。

7 case可以合并:

int i=10;

switch(i){

	case1:case2:case3:

		System.out.println(“test code!);

}

eg.

import java.util.Sacnner;

public class Switch今天星期几 {
    public static void main(String[] args) {
        
        java.util.Scanner s = new java.util.Scanner(System.in);
        System.out.print("猜猜今天星期几:");
        int num = s.nextInt();
        switch(num){
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;    
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期天");
                break;
            default:
                System.out.println("请输入一到七中的数字");
        }
    }
}
3.循环结构语句
3.1 for语句
switch语句的语法结构:
    
	for(初始化表达式;布尔表达式;更新表达式){
		//是需要重复执行的代码片段【循环体:由java语句构成】
	}

eg.1

public class JavaApplication5 {
    public static void main(String[] args) {
    
   for(int i=1;i<=10;i+=2 ){
             System.out.println("i="+i);
    }
    
    for(int j=2;j<=10;j+=2 ){
             System.out.println("j="+j);
    }
    
    for(int k=10;k>0;k-- ){
             System.out.println("k="+k);
    }
    
    for(int z=100;z>0; ){
             System.out.println("z="+z);
             z-=10;
    }
    }
}

循环语句和条件判断语句嵌套使用

最好不要想太多,即使循环体当中是一个for循环,不要将这个for特殊化,

【for和if的嵌套】

eg.2

//100以内的所有质数
public class ForFor嵌套求质数 {
    public static void main(String[] args) {
        //给范围
        for(int i=2;i<=100;i++){
           //求素数
           boolean sushu = true;
           for(int j=2;j<i;j++){
               if(i%j==0){
                  sushu = false;
                  break;
               }      
           }
           //输出
           if(sushu){
                System.out.print(i+"\t");
           }
    }   
    }
}

eg.3

//10000以内的所有质数,每八个数字换一行

//方法①
public class ForFor嵌套求质数 {
    public static void main(String[] args) {
        int count=0;
        //给范围
        for(int i=2;i<=10000;i++){
           //求素数
           boolean sushu = true;
           for(int j=2;j<i;j++){
               if(i%j==0){
                  sushu = false;
                  break;
               }      
           }
           //输出
           if(sushu){
               count++;
               System.out.print(i+"\t");
                if(count%8==0){
                   System.out.println();
               }
           }
        }   
    }
}

//方法②
public class 求质数升级版 {
     public static void main(String[] args){
         int count=0;
         for(int i=1;i<10000;i++){
             boolean sushu = true;
             for(int j=2;j<i;j++){
                 if(i%j==0){
                  sushu = false;
                  break;
               }      
           }
           //输出
             if(sushu){
               count++;
               System.out.print(i+"\t");
                 if(count==8){
                   System.out.println();
                   count=0;
                }
            }
        }  
    }   
}
3.2 while语句
while循环的语法结构:

    while(布尔表达式){
    	循环体;
    }//表达式为true时,执行循环体

while循环的循环次数:

0到N次,while循环的循环体可能一次都不执行

eg.

//输出0-10:
public class ArrayOutPut {
	public static void main(String[] args){
		int i=0;
		while (i<10){
			System.out.print(i+"\t");
			i++;
        }
	}
}
3.3 da-while语句
\\do...while循环的语法结构:

do{
	循环体;
}while(布尔表达式);

do…whlie循环体代码片段执行次数是:1-N次(至少一次)

do…while循环的注意事项:do…while循环语句最终有一个分号

4.跳转语句
4.1break

break是Java语句中的关键字,翻译为“中断/折断”

break+“;”可以成为以单独的完整java语句:break;

break语句使用在switch语句当中,用来终止switch的语句执行。

break语句同样可以使用在循环语句当中,用来终止循环的执行

break语句使用在for、while、do…while循环语句当中用来跳出循环,终止玄幻的执行。因为当程序循环到某个条件的时候,后续循环没必要执行,在执行也是耗费资源,所以可以终止循环,这样可以提高程序的执行效率。

在默认情况下,break终止的是离他最近的循环语句:

4.2continue

continue表示是:继续/下一个

continue的java语句:continue;

break和continue的区别:

break:跳出循环

continue:进入下一循环

to be continued…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值