一、JAVA基础

一、Java程序运行机制

1、.java:称之为源文件或者源码文件,用于编写指定java代码
2、.class:字节码文件,用于计算机运行java程序
3、javac:编译指令,将指定的.java文件编译成指定的.class文件
4、java:运行命令,在jvm虚拟机上运行指定的.class文件

二、变量

1、格式:数据类型 变量=值;
2、特点
(1)随机性:变量存储位置不固定
(2)唯一性:变量的地址唯一,按照指定规则定义变量名,代替地址的记忆
(3)目前定义的变量称为局部变量,只针对某个代码块起作用,必须定义初始值

三、数据类型

分类
1、引用数据类型

String类、接口、数组------》默认值为null(空)

2、基本数据类型

(1)数值型

类型

作用

byte

字节型整数,可以视作计算机中最小的存储单位[-128,127]

short

短整型,基本不用

int

整数型,是java中默认的整数类型,默认值是0

long

长整型,可以在值后边编写L或l,表示为long型

float

单精度浮点型,值的后面必须定义F或f,表示当前数据是float类型数据

doubel

双精度浮点型,是java中默认的浮点类型,默认值为0.0

(2)字符型:char,只能存储一个字符,值必须定义在''中,默认值为空格符号

(3)布尔型:boolean,只有两个值,true(真)/flase(假);主要用于逻辑判断,默认值为flase

3、转义字符

转义字符

作用

\t

表示一个制表符,等价于Tab键

\n

表示回车

\'

表示单引号

\"

表示双引号

\\

表示\

4、数据类型转换
(1)纵向不能转换,横向可以任意转换
byte
short--->>>int---->long---->float---->double
char
(2)ASCII值(字符与数值对照表)

字符

ASCII值

A-Z

65-90

a-z

97-122

'0'-'9'

48-57

(3)转换(强制类型转换)-----》将大的值赋值给小的数据类型 自转----》将小的赋值给大的数据类型

①格式:小的数据类型 变量名=(小的数据类型)大的值;

②不足:造成数据精确度降低

③没有四舍五入操作,直接将数值超过的部分分割掉

四、运算符

作用:使用Java中指定的运算符号,按照指定规则连接操作多个数据

1、分类

赋值运算符:+= -= *= /= =

算数运算符:+ - * / % ++ --

①+:当操作双方都是基本数据类型时(除了布尔型以外),则进行和的运算,当操作的变量有一个是String类型时,从String类型值开始进行拼接操作

②/:当两个操作数的数据类型相同时,结果还是这个数据类型,当两个不同数据类型相除时,结果一定是数据类型较大的那个类型

③%:取模(取余) 获取两个相除后的余数部分,余数结果的正负与被除数有关

④++:表示在原有值的基础上进行+1;再将结果赋值给当前变量,等效于+=1操作

简述++的运算规则:

当作为单条语句定义时,则++定义在变量前或者变量后,结果没有区别

当作为组合语句定义时,则++定义在变量前,先自身+1,再执行操作;++定义再变量后,先执行操作,操作完成后再自身+1

关系(比较)运算符:>、>=、<、<=、==、!= (结果为布尔类型且只适用于数值型和字符型的比较)

字符串类型的比较相等:equels,equalsIgnoreCase(不区分大小写)

逻辑运算符:&&、||、!

位运算符&(按位与)和逻辑与操作效果一致;|(按位或)和逻辑或操作效果一致。

面试题:简述逻辑与(&&)和按位与(&)的区别:

当前一个表达式能够判断整体表达式的结果时,逻辑与直运行当前;而按位与会执行所有;因此实际开发中推荐使用逻辑与,效率更高。

条件运算符(三元运算符):

(1)格式:(任意的关系表达式或逻辑表达式)?结果1:结果2

2、运算符优先级(由高到低)

(1)只要想要先计算,就将表达式放在()中

(2)!、++、--

(3)算数运算符:*、/、%、+、 -

(4)关系运算符:>、>=、<、<=、==、!=

(5)逻辑运算符:&& ||

(6)条件运算符:(任意表达式或逻辑表达式)?结果1:结果2

(7)赋值运算符:*=、/=、+=、-=、=

五、文本扫描器

1、导入操作:当亲定义的内容不存在当前类中时,需要外部导入
2、关键字:import 包名.类名;
3、包名.类名:专业上称之为全限定路径名

java.util --util表示Java中定义的工具包,Scanner是工具包中一个具体工具类

4、定义
int 变量名=scanner.nextInt();
double 变量名=scanner.nextDouble();
String 变量名=scanner.next();

六、流程控制语句

1、条件语句(if...else... ,switch)

(1)简述if...else...语句与条件运算符的应用场景

当根据关系表达式或逻辑表达式判断后,还需要进行其它代码操作时,推荐使用if...else...语句;如果直接显示结果,推荐使用条件运算符

(2)switch
switch(等值表达式){
    case 等值结果1:
        可执行操作代码1;
        break;
    case 等值结果2:
        可执行操作代码2;
        break;
    ....
    default:
        可执行代码n;
}

等值表达式支持5种类型:byte、short、char、int、String

(3)面试题(简述if...else、if语句与switch语句的异同点和应用场景)
①相同点

都是能够进行多个条件判断的语法结构,都支持使用}作为结束标志

②不同点

Ⅰ:if...else,if语句:条件为任意的关系表达式或逻辑表达式,既可以进行等值判断,也可以进行范围判断;判断结果类型一定是布尔类型

Ⅱ:switch语句:条件为等值表达式,只支持等值判断;判断结果的类型支持5种,即byte、short、int、String;其中switch还支持使用break作为结束标志

③应用场景

当判断条件为等值表达式,且值的结果类型是byte、short、char、int、String五种之一,且值的结果可能个数较少时,推荐使用switch语句,效率更高。

2、循环语句(while,do while,for)

初始化;
while(循环判断条件){
      循环体;
      循环增量;
}
初始化值;
do{
    循环体;
    循环增量;
}while(循环判断条件);
面试题1:简述while循环和do...while循环的区别

while循环先判断,再执行;do...while先执行一次,再判断

for(初始化值;循环判断条件;循环增量){
    循环体;
}
面试题2:简述for循环和while循环的区别,以及应用场景
①区别

在相同条件下,for循环比while循环更节省内存空间

②场景

Ⅰ:已知循环次数(一般指循环初始值在给定的某个范围内)使用for

Ⅱ:未知循环次数使用while

3、结束语句(break,continue)

3.1 死循环
for(;;){
    循环体;
}

for(初始化值;循环判断条件;){
    循环体;
}

for(初始值;;循环增量){
    循环体;
}
3.2 结束语句
①流程控制语句:break和continue
②结束方法:return

七、Java中的随机数操作

1、Math.random()

返回[0.0,1.0)内的任意一个无线不循环小数

2、Random类

3、面试题:简述Math.random()方法和Random类的优缺点

优缺点

Math.random

Random

优点

节省内存空间

可以直接生成整数型随机数,不需要进行强转影响精度

缺点

需要进行强制类型转换,影响精度

浪费空间内存

八、数组

(1)特点:存储一组相同数据类型的数据,一定程度上提高数据存储安全性
数组一旦创建,长度固定
(2)书写格式
①静态定义格式
//方式一
数据类型[] 数组名={值1,值2,...};
//方式二
数据类型 数组名[]=new 数据类型[]{值1,值2,...};
②动态定义格式
数据类型[] 数组名=new 数组名[(长度)];
(3)地址存储

引用数据类型(类类型和数组类型)在栈内存存储对象地址,类类型数据只能通过new关键字实现地址指向的转换,即栈内存指向堆内存;而数组类型既可以通过new关键字实现地址转换,也可以通过=实现地址转换

(4)如何存储
①数组在堆内存中以一个连续的柱状空间存储数据
②当数组地址由栈内存指向堆内存时,是指向数组在堆内存中第一个元素的地址值
③为了方便获取,JVM会维数组中的每一个元素自动分配一个索引值,默认从0开始
(5)数组长度
数组名.length  //并不是调用的方法,而是属性,所以没有()

2、二维数组

(1)定义格式:
数据类型[][] 数组名={数组1,数组2,...};
(2)匿名操作(无需定义各数组,直接在{}中进行设置)

3、算法(最值、冒泡排序、二分查找)

(1)最值
//最值
        int max=array[0];
        for (int i = 1; i < array.length; i++) {
            if(array[i]>max){
                max=array[i];
            }
        }
        System.out.println(max);
(2)冒泡排序
//冒泡排序
        for (int i = 0; i < array.length-1; i++) {  //一共比较array.length-1轮
            for (int j = 0; j < array.length-i-1; j++) {   //array.length-i-1,每轮比较多少次
                if(array[j]>array[j+1]){
                    int temp=array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
(3)二分查找
//二分查找
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入你想要查找的数据:");
        int num=scanner.nextInt();
        int index=-1;
        int begin=0;
        int end=array.length-1;
        while (end>=begin){
            int middle=(begin+end)/2;
            if(array[middle]==num){
                index=middle;
                break;
            }else if(array[middle]>num){
                end=middle-1;
            }else if(array[middle]<num){
                begin=middle+1;
            }
        }
        System.out.println(index);
(4)备份

//备份--->copyOf(源数组,复制后的长度)
        int[] array1=Arrays.copyOf(array, 9);
        System.out.println("array1"+Arrays.toString(array1));
//默认从0开始复制,如果长度大于原来的,则其余位置维null,如果长度小于原来的,则只复制长度大小的数据
//备份2
        int[] array2=new int[9];
        System.arraycopy(array,1,array2,0,2);
        System.out.println(Arrays.toString(array2));
System.arraycopy(原数组,开始复制位置,目标数组,开始被复制的位置,复制长度)
(5)方法
//排序方法-----》默认升序
        Arrays.sort(array1);
        System.out.println("array1"+Arrays.toString(array1));

九、方法

1、方法概念

1-1 方法定义
public static 返回值类型 方法名([参数列表]){
    方法体(编写实现具体功能的代码);
    [return 返回值;]
}
1-2 方法调用
    1. 变量名(或对象名).方法名([参数列表]) ----最常规的调用方式
    2. 类名.方法名([参数列表]) -----该方法必须使用static定义
    3. new 方法名([参数列表]) -----只能调用方法名与类名一致的方法,这样的方法java中称之为构造器

2、方法分类

2-1 按照定义返回值类型---(有返回值方法和无返回值方法)
2-2 按照是否传递参数-----(有参方法和无参方法)
(1)有参方法
①定参方法:参数个数固定,必须传递定义好个数的参数,否则报错
②可变参数方法:参数个数不固定,根据用户的实际需要完成传递

a:格式定义:

public static 返回值类型 方法名(数据类型... 参数名){
    方法体;
}
(2)无参方法

采用数据类型void进行定义方法

3、基本数据类型和引用数据类型的参数传递区别

基本数据类型定义变量地址(数据地址)和值时是在栈内存,引用数据类型定义变量地址(数据地址)在栈内存,进行赋值时存储在堆内存

4、return关键字

需要返回结果的方法中进行调用

5、Java中方法重载

5-1 定义

当在指定类中需要根据参数的不同定义多个具有相同含义的方法时,此时构成方法重载

5-2 简述Java中如何构成方法重载
方法名一致  (也称签名一致)
与返回值类型和访问权限修饰符无关
参数列表不同(数据类型不同||参数个数不同||参数传递的顺序不同)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值