【Java基础一】

Java基础1


学习黑马java系列课程所作笔记

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

1.JDK(Java Development kit)开发者工具包,在Oracle官网下载(link)。
2.LTS(Long-Term Support) Version 有JDK 8、11、1721
3.验证安装成功与否:cmd中输入java -version 、javac -version看版本号。
4.JDK中最重要的两个命令程序 :javac:编译工具 ,java:执行工具
5.常用命令行命令:
在这里插入图片描述


一、Java快速入门

第一个java程序HelloWorld

开发java程序,需要三个步骤,编写代码,编译代码,运行代码
在这里插入图片描述
注意事项:

1.第一个Java程序建议用记事本书写
2.建议代码文件名全英文,首字母大写,满足驼峰模式,源代码文件的后缀必须是.java

具体代码:
在这里插入图片描述
过程:
在这里插入图片描述
Jdk11开始,可直接运行源代码文件,底层生成了临时的class文件
在这里插入图片描述

注意事项:

  • 文件名称的后缀必须是java结尾
  • 文件名称必须与代码的类名称一致
  • 必须使用英文符号

补充知识:JDK组成、跨平台原理

在这里插入图片描述

补充知识:环境变量

在这里插入图片描述

补充知识:环境变量与JAVA_HOME

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、Intellij IDEA下载与使用

1.简介

  • Intelli] IDEA一般简称IDEA,在代码错误提醒,智能代码补全等多方面表现的都非常优秀,是进行ava开发时,很多企业首选的开发工具。

2.IDEA的下载与安装

-下载链接:link

-安装方式:基本上是使瓜式安装,建议修改安装路径(不要安装在有空格和中文的路径下)。

3.IDEA管理Java程序的结构

  • project(项目、工程)
  • module(模块)
  • package(包)
  • class(类)

例:在这里插入图片描述

4.使用IDEA开发一个java程序的步骤:

  1. 创建工程 new project(空工程)
    在这里插入图片描述
  2. 创建模块 new Project(空工程)
    在这里插入图片描述
    !](https://img-blog.csdnimg.cn/direct/6d15be01268d4982b87e2693577eb82d.png)

在这里插入图片描述
3.创建包 new Package
在这里插入图片描述
包名 用公司域名倒写加上项目名字

4.新建类
在这里插入图片描述
建议首字母大写,不要带后缀(IDEA自动帮你加)

5.编写代码、并启动
在这里插入图片描述
6.总结
在这里插入图片描述

5.IDEA中个性化设置与常见快捷键

1.主题与字体
在这里插入图片描述

2.背景色
在这里插入图片描述
3.快捷键
在这里插入图片描述

  • ctrl+X是剪切当前行,比ctrl +Y操作起来更方便

5.IDEA中的其他操作

  • 删除类文件(Delete)
  • 修改类名称(Refactor)
  • 修改模块(Refactor)
  • 导入模块
  • 删除模块(先删目录里的,再删文件夹里的)
  • 打开工程
  • 关闭工程

三.基础语法

1.注释

在这里插入图片描述
快捷键进行注释(想要打开就在按一下
在这里插入图片描述

2.字面量

  • 计算机是用来处理数据的,字面量就是告诉程序员:数据在程序中的书写格式

常用数据
在这里插入图片描述

3.变量

  • 变量是用来记住程序要处理的数据的。

变量的定义格式

在这里插入图片描述

变量的使用注意事项
在这里插入图片描述

补充

  • 计算机中表示数据的最小单元:一个字节(byt,简称B,是使用8个二进制位组成的)
  • 字节中的每个二进制位就称为位(bit,简称b),1B=8b
    在这里插入图片描述
    在这里插入图片描述

4.关键字与标识符

关键字

  • Java语言自己要用到的一些词,有特殊作用的,我们称之为关键字,如:public、class、int···我们不能将之用为类名,变量名。
    在这里插入图片描述

标识符

  • 标识符就是名字,我们写程序时会起一些名字,如类名、变量名等等都是标识符。

标识符的要求

  • 基本要求:由数字、字母、下划线()和美元符($)等组成
  • 强制要求:不能以数字开头、不能用关键字做为名字、且是区分大小写的。

标识符的建议规范

  • 变量名称:满足标识符规则,同时建议用英文、有意义、首字母小写,满足“驼峰模式”,例如:
    int studyNumber =59;
  • 类名称:满足标识符规则,建议全英文、有意义、首字母大写,满足“驼峰模式”,例如:HelloWorld,Student

5.数据类型

5.1数据类型的分类

-基本数据类型:4大类8种
在这里插入图片描述

如果希望随便一个整型字面量默认是long类型的,需要在后面加上L或者l(建议L防止看成1)
例:long lg = 4242442332432L;
long l=40; 就没事

*随便写小数字面量,默认是double,如果希望小数是float,后面加上F或f
例:float f=3.14F;

5.2类型转换

5.2.1自动类型转换
  • 类型范围小的变量,可以直接赋值给类型范围大的变量
    例:byte a=12; int b=a;
    在这里插入图片描述
    在这里插入图片描述
5.2.2表达式的自动类型转换
  • 在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算。在这里插入图片描述
    注意事项
  • 表达式的最终结果类型是由表达式中的最高类型决定。
  • 表达式中,byte、short、char 是直接转换成int类型参与运算的。 (防止两个小类型相加超出小类型的范围)
5.2.3强制类型转换

类型范围大的数据或者变量,直接赋值给类型范围小的变量,会报错。
int a=20;
byte b=1;//报错

  • 强制类型转换:强行将类型范围大的数据或者变量赋值给类型范围小的变量
    在这里插入图片描述
    快捷键强转:alt+enter

在这里插入图片描述
注意事项

  • 强制类型转换可能造成数据(丢失)溢出:
  • 浮点型强转成整型,直接丢掉小数部分,保留整数部分返回

6运算符

6.1 基本的算术运算符

在这里插入图片描述

+号作连接符
  • “+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。
    “abc”+5->“abc5”
  • 识别技巧:能算则算,不能算则在一起。

6.2自增自减运算符

在这里插入图片描述

  • 注意:++ 、–只能操作变量,不能操作字面量。
    在这里插入图片描述

6.3 赋值运算符

在这里插入图片描述
注意:扩展的赋值运算符隐含了强制类型转换。

6.4关系运算符

在这里插入图片描述

  • 注意:在jva中判断是否相等一定是“==”,千万不要把“=”误写成“=”。

6.5逻辑运算符

在这里插入图片描述在这里插入图片描述
注意:在java中,“&”、“|”:无论左边是falsei还是true,右边都要执行。

6.7 三元运算符与运算符优先级

在这里插入图片描述

优先级 运算符 名称或含义 使用形式 结合方向 说明
1 [] 数组下标 数组名[常量表达式] 左到右
1 () 圆括号 (表达式)/函数名(形参表) 左到右
1 . 成员选择(对象) 对象.成员名 左到右
1 -> 成员选择(指针) 对象指针->成员名 左到右
-
2 - 负号运算符 -表达式 右到左 单目运算符
2 ~ 按位取反运算符 ~表达式 右到左
2 ++ 自增运算符 ++变量名/变量名++ 右到左
2 自减运算符 –变量名/变量名– 右到左
2 * 取值运算符 *指针变量 右到左
2 & 取地址运算符 &变量名 右到左
2 ! 逻辑非运算符 !表达式 右到左
2 (类型) 强制类型转换 (数据类型)表达式 右到左
2 sizeof 长度运算符 sizeof(表达式) 右到左
-
3 / 表达式/表达式 左到右 双目运算符
3 * 表达式*表达式 左到右
3 % 余数(取模) 整型表达式%整型表达式 左到右
-
4 + 表达式+表达式 左到右 双目运算符
4 - 表达式-表达式 左到右
-
5 << 左移 变量<<表达式 左到右 双目运算符
5 >> 右移 变量>>表达式 左到右
-
6 > 大于 表达式>表达式 左到右 双目运算符
6 >= 大于等于 表达式>=表达式 左到右
6 < 小于 表达式<表达式 左到右
6 <= 小于等于 表达式<=表达式 左到右
-
7 == 等于 表达式==表达式 左到右 双目运算符
7 != 不等于 表达式!= 表达式 左到右
-
8 & 按位与 表达式&表达式 左到右 双目运算符
9 ^ 按位异或 表达式^表达式 左到右 双目运算符
10 | 按位或 表达式|表达式 左到右 双目运算符
11 && 逻辑与 表达式&&表达式 左到右 双目运算符
12 || 逻辑或 表达式||表达式 左到右 双目运算符
-
13 ?: 条件运算符 表达式1?表达式2:表达式3 右到左 三目运算符
-
14 = 赋值运算符 变量=表达式 右到左
14 /= 除后赋值 变量/=表达式 右到左
14 *= 乘后赋值 变量*=表达式 右到左
14 %= 取模后赋值 变量%=表达式 右到左
14 += 加后赋值 变量+=表达式 右到左
14 -= 减后赋值 变量-=表达式 右到左
14 <<= 左移后赋值 变量<<=表达式 右到左
14 >>= 右移后赋值 变量>>=表达式 右到左
14 &= 按位与后赋值 变量&=表达式 右到左
14 ^= 按位异或后赋值 变量^=表达式 右到左
14 |= 按位或后赋值 变量|=表达式 右到左
-
15 , 逗号运算符 表达式,表达式,… 左到右

6.8 Java API入门

在这里插入图片描述

在这里插入图片描述

7.程序流程控制

7.1分支结构

7.1.1 if分支
  • 根据条件(真或假)来决定执行某段程序

if分支有三种形式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • if(条件){},()后不能跟";",否则0中的代码将不受的控制了。
  • 如果If语句的{}中只有一行代码的情况,{}可以省略不写(但是不推荐省略)。
7.1.2 switch分支
  • 是通过比较值来决定执行哪条分支
    在这里插入图片描述

switch分支的执行流程

  1. 先执行表达式的值,再拿着这个值去与case后的值进行匹配。
  2. 与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。
  3. 如果全部case后的值与之匹配都是false,则执行default块的代码。

if、switch的比较,以及各自适合什么业务场景?

  • if在功能上远远强大于switch.
  • 当前条件是区间的时候,应该使用f分支结构。
  • 当条件是与一个一个的值比较的时候,switch分支更合适:格式良好,性能较好,代码优雅。
switch使用时的注意事项
  1. 表达式类型只能是byte,short,int,char,JDK5开始支持枚举,JDK7开始支持String,不支持double,float,long
  2. case给出的值不允许重复,且只能是字面量,不能是变量
  3. 正常使用switch的时候 ,不要忘记写break,否则会出现穿透现象。

当存在多个case分支的代码相同时,可以把相同的代码放到一个case块中,其他的case块都通过穿透性穿透到该case块执行代码即可,这样可以简化代码。

7.2循环结构

7.2.1 for循环
  • 控制一段代码反复执行多次

for循环格式
在这里插入图片描述

7.2.2 while循环

在这里插入图片描述

7.2.3 do-while循环

在这里插入图片描述

7.2.4 三种循环的区别小结
  • for循环和while循环(先判断后执行);do-while(先执行后判断)
  • for循环和while循环的执行流程是一模一样的,功能上无区别,for能做的while也能做,反之亦然。
  • 使用规范:如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
7.2.5 死循环
  • 可以一直执行下去的一种循环,如果没有干预不会停下来。

死循环的写法
在这里插入图片描述

7.2.6 循环嵌套
  • 循环中又包含循环。

    循环嵌套的特点
  • 外部循环每循环一次,内部循环会全部执行完一轮。
7.2.7 跳转关键字
  • break:跳出并结束当前所在循环的执行。
  • continue:用于跳出当前循环的当次执行,直接进入循环的下一次执行。

注意事项
break:只能用于结束所在循环,或者结束所在switch分支的执行。
continue:只能在循环中进行使用。

7.2.8案例技术:生成随机数

在这里插入图片描述
在这里插入图片描述

8.数组

  • 数组就是一个容器,用来存储一批同种类型的数据。

例子
在这里插入图片描述

8.1数组的定义与访问

8.1.1静态初始化数组
  • 定义数组的时候直接给数组赋值
    在这里插入图片描述
  • 数组在计算机中的基本原理
    在这里插入图片描述
8.1.2 数组的访问

数组的访问
在这里插入图片描述

8.1.3 数组的遍历
  • 遍历:就是一个一个地访问一遍容器中的数据
    在这里插入图片描述
8.1.4 动态初始化数组
  • 定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组的长度
    在这里插入图片描述
    动态初始化数组元素默认值规则
    在这里插入图片描述
  • 动态初始化:适合开始不确定具体元素值,只知道元素个数的业务场景。
  • 静态初始化:适合一开始就知道要存入哪些元素值的业务场景。

8.2 数组在计算机中的执行原理

8.2.1数组的执行原理,Java程序的执行原理

在这里插入图片描述
Java内存分配介绍

  • 方法区
  • 本地方法栈
  • 程序计数器
    在这里插入图片描述
    数组在计算机中的执行原理
    在这里插入图片描述
8.2.2多个变量指向同一个数组的问题


使用数组时常见的一个问题

  • 如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象
    在这里插入图片描述

8.3补充知识:Debug工具的使用

  • IDEA自带的断点调试工具,可以控制代码从断点开始一行一行的执行,然后详细观看程序执行的情况

DEBUG工具基本使用步骤
在这里插入图片描述

9.java 方法

9.1方法概述

  • 方法是一种语法结构,它可以把一段代码封装成一个功能,以便重短调用。

方法的完整格式
在这里插入图片描述
方法如何执行?

  • 方法定义后,必须调用才可以跑起来,调用格式:方法名(…);

方法的调用流程 - Debug
在这里插入图片描述
方法定义时几个注意点
在这里插入图片描述

  • 方法的修饰符:暂时都使用public static修饰。
  • 方法申明了具体的返回值类型,内部必须使用return返回对应类型的数据。
  • 形参列表可以有多个,甚至可以没有;如果有多个形参,多个形参必须用“,”隔开,且不能给初始化值。

9.1方法定义的其他形式

  • 方法定义时:需要按照方法解决的实际业务需求,来设计合理的方法形式解决问题。
    在这里插入图片描述
    注意事项
  • 如果方法不需要返回数据,返回值类型必须申明成void(无返回值申明),此时方法内部不可以使用return返回数据。
  • 方法如果不需要接收数据,则不需要定义形参,且调用方法时也不可以传数据给方法了。

9.2方法使用时的常见问题

  • 方法在类中的位置放前放后无所谓,但一个方法不能定义在另一个方法里面。
  • 方法的返回值类型写==void(无返回申明)==时,方法内不能使用return返回数据,如果- 方法的返回值类型写了具体类型,方法内部
  • 则必须使用return:返回对应类型的数据。
  • return语句的下面,不能编写代码,属于无效的代码,执行不到这儿。
  • 方法不调用就不会执行,调用方法时,传给方法的数据,必须严格匹配方法的参数情况。
  • 调用有返回值的方法,有3种方式:1、可以定义变量接收结果2、或者直接输出调用,3、甚至直接调用:
  • 调用无返回值的方法,只有1种方式:1、只能直接调用。

9.3方法在计算机中的执行原理

  • 方法被调用的时候,是进入到栈内存中运行
    在这里插入图片描述
    sum方法执行完就会从栈中清除掉,main方法继续执行
    在这里插入图片描述
    main方法执行完也会从栈里面清除掉
    在这里插入图片描述
    更复杂的例子
    main调用study,study调用eat,
    在这里插入图片描述
    eat方法执行完出去,study继续调用sleep方法
    在这里插入图片描述
    sleep执行完出去,然后study相当于也执行完了,也出去,main没有余下的代码,也执行完了
    在这里插入图片描述

9.4java的参数传递机制

Java的参数传递机制都是:值传递

  • 所谓值传递:指的是在传输实参给方法的形参的时候,传输的是实参变量中存储的值的副本。
    -实参:在方法内部定义的变量。
    -形参:定义放法时“(…)”中所声明的参数。
    在这里插入图片描述
9.4.1基本类型的参数传递

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9.4.2引用类型的参数传递

其实也是值传递,不过传的是地址
在这里插入图片描述
在这里插入图片描述

9.4.3 练习案例

在这里插入图片描述

import java.util.Random;
import java.util.Scanner;

public class demo {
   
    public static void main(String[] args) {
   

        int[] codes ={
   };
        printArray(codes);
        
    }
    public  static void printArray(int[] arr){
   
        if (arr==null){
   
            System.out.println(arr);
            return;
        }
        System.out.print("[");
       for (int i=0;i<arr.length;i++)
           System.out.print(i==arr.length-1?arr[i]:arr[i]+",");

        System.out.print("]");
    }
}
9.4.4方法重载
  • 一个类中,出现多个方法的名称相同,但是它们的形参列表是不同的,那么这些方法就称为方法重载了。

方法重载的注意事项

  • 一个类中,只要一些方法的名称相同、形参列表不同,那么它们就是方法重载了,其它的都不管(如:修饰符,返回值类型是否一样都无所谓)。
  • 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。

方法重载的应用场景

  • 开发中我们经常需要为处理一类业务,提供多种解决方案,此时用方法重载来设计是很专业的。
    案例导学
  • 开发武器系统,功能需求如下:
    ①可以默认发一枚武器。
    ②可以指定地区发射一枚武器。
    ③可以指定地区发射多枚武器。
    在这里插入图片描述
9.4.5 补充知识 在方法中单独使用return关键字
  • return;可以用在无返回值的方法中,作用是:立即跳出并结束当前方法的执行
    在这里插入图片描述

9.5 案例

9.5.1买飞机票

在这里插入图片描述

public class demo {
   
    public static void main(String[] args) {
   

        double price=calculate(1000,11 ,"经济舱");
        System.out.println("优惠价是"+price+"元");

    }
    public  static  double calculate(double price,int month,String type){
   

        if (month>=5&&month<=10){
   
            //旺季
           switch (type)
           {
   
               case "头等舱":
                   price *=0.9;
                   break;
               case "经济舱":
                   price*=0.85;
                   break;
           }
        }
        else {
   
            switch (type)
            {
   
                case "头等舱":
                    price *=0.7;
                    break;
                case "经济舱":
                    price*=0.65;
                    break;
            }
        }
        return price;

    }
}
9.5.2开发验证码

在这里插入图片描述

public class demo {
   
    public static void main(String[] args) {
   


        System.out.println("验证码是:"+createCode(5));

    }
    public  static  String  createCode(int n){
   
        Random r=new Random();
        String code="";
        //1.定义一个for循环用于控制产生多少位随机字符
        for(int i=1;i<=n;i++){
   
            //为每个位置随机生成一个随机字符,可能是数字,大小写字母。
            //思路,随机一个0 1 2之间的数字,分别代表数字,大写字母,小写字母
            int type=r.nextInt(3);//0,1,2
            switch (type){
   
                case 0:
                    //随机一个数字字符
                    code+=r.nextInt(10);//0-9
                    break;
                case 1:
                    code+=(char)('A'+r.nextInt(26));
                    break;
                case 2:
                    code+=(char)('a'+r.nextInt(26));
                    break;
            }
        }
        return code;

    }
}

在这里插入图片描述

9.5.3评委打分

在这里插入图片描述

public class demo {
   
    public static void main(String[] args) {
   


        System.out.println("当前选手得分是:"+getAverageScore(5));

    }
    public  static  double  getAverageScore(int number){
   
        int[] scores =new int[number];
        //scores=[0,0,0,0,······];

        Scanner sc=new Scanner(System.in);
        for(int i=0;i<scores.length;i++){
   

            System.out.println("请您输入第"+(i+1)+"个评委的分数");
            scores[i]=sc.nextInt();

        }
        //从数组中计算出总分,找出最高分、最低分
        int sum=0;
        int min=scores[0];
        int max=scores[0];
        for (int i=0;i<scores.length;i++){
   
        sum+=scores[i];
        if(scores[i]<min)
            min=scores[i];
        if(scores[i]>max)
            max=scores[i];
        }
     return (sum-min-max)/(scores.length-1);
    }
}
9.5.4数字加密

在这里插入图片描述

public class demo {
   
    public static void main(String[] args) {
   


        System.out.println(encrpt(8346));

    }
    public  static String  encrpt(int number){
   
        //假设 number=1983
        //1.把这个密码分为一个一个的数字,才可以对其进行加密
     int[] numbers = split(number);
        //numbers=[1,9,8,3]
        //2.遍历每个数字,并加密
     for(int i=0;i<numbers.length;i++){
   
         numbers[i]=(numbers[i]+5)%10;
     }
     //numbers=[6,4,3,8]

        //3.反转数组,单独写一个方法
        reverse(numbers);

     //4.把数字拼接起来
        String data="";
        for (int i=0;i<numbers.length;i++){
   
            data+=numbers[i];
        }
        return data;
    }

    public static int[] split(int number) {
   
        int[] numbers =new int[4];
        numbers[0]=number/1000;
        numbers[1]=(number/100)%10;
        numbers[2]=(number/10)%10;
        numbers[3]=number%10;
        return numbers;
    }
    public static void reverse(int[] numbers){
   
        for(int i=0,j=numbers.length-1;i<j;i++,j--){
   
            int temp=numbers[i];
            numbers[i]=numbers[j];
            numbers[j]=temp;
        }
    }
}
9.5.5数组拷贝

在这里插入图片描述

public class demo {
   
    public static void main(String[] args) {
   


        int[] arr={
   11,22,33};
        int[] arr2=copy(arr);
        printArray(arr2);;

        //注意,这不是拷贝,指向的是同一个数组
        //int[] arr3=arr;
    }

    public static void printArray(int[] arr){
   
        System.out.print("[");
        for (int i=0;i<arr.length;i++){
   
            System.out.print(i==arr.length-1?arr[i]:arr[i]+",");
        }
        System.out.print("] ");
    }

    public static int[] copy(int[] arr) {
   

        int[] arr2 = new int[arr.length];
        for (int i = 0; i <
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值