java基础

数据类型转义字符及其说明:”" 字符集:unicode;字符编码集;.基本数据类型之间的运算(不包含boolean类型)1.自动类型提升:2.强制类型转换:自动类型提升运算的逆运算。java中的运算符:1.算术运算符: 2.赋值运算符:7.三元运算符:程序流程控制顺序结构分支结构循环结构扩展关键字:break、continue的使用Java中的数组;二维数组;数组的赋值、反转、查找(线性查找(equals()),二分法查找{折半查找)数组中涉及到的常见算法:排序算法选择排序:交换排序插入排序归并排序桶式排序基数排序集合基础:集合和数组的特点对比:ArrayList集合:ArrayList的构造方法:ArrayList中常用的成员方法:ArrayList中添加元素的方法:ArrayList中删除元素的方法:ArrayList中修改元素的方法:ArrayList中查询元素:ArrayList中的元素个数:Arrays工具类的使用数组操作内存进制二进制:Ascanner中方法的使用扩展:

数据类型

  1. 基本数据类型:

    1. 数值类型:

      1. 整数类型:

        • byte

        • short

        • int

        • long (特殊提示:声明long型变量,必须以“L"或 "l"结尾)

      2. 浮点类型:

        • float (特殊提示:声明float型变量,必须以“f"或"F"结尾)

        • double:

    2. 字符型:char

      • char(1字符=2字节) ​ char c="a";//用于数据类型的运算时代表的时97 char c="A"//65 ​ b//96 B//64 a~z:从97往下减一, A~Z:从65往下减一;

    3. 布尔值:Boolean

      类型 占用储存空间 表示数的范围 ​ byte 1字节=8bit位 -128~127 ​ short 2字节 -2的15次方到正的2的15次方 ​ int 4个字节 ​ long 8个字节

      单精度float 4字节 -3.4.03E38~3.403E38 双精度double 8字节 -1.798E308~1.798E308

  2. 引用数据类型:类(class)、接口(interface)、 数组([])\

转义字符及其说明:”" 字符集:unicode;字符编码集;

\b 退格符 ​ \n 换行符 ​ \r 回车符 ​ \t 制表符 ​ " 双引号 ​ \’ 单引号 ​ \ 反斜杠

.基本数据类型之间的运算(不包含boolean类型)

· 不同整数类型之间的运算:用于接收的声明变量类型等于或大于用运算中的最大字节。 浮点型的字节比整型的long大;

1.自动类型提升:

当容量小的数据类型的变量域容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。 ​ byte、short、char-->int-->long-->float-->double ​ 特殊:byte、short、char这三种类型做运算时结果为int类型;

2.强制类型转换:自动类型提升运算的逆运算。

1.需要使用强制转换符:() ​ 2.注意点:强制转换可能会导致精度损失。 ​ eg: double d1=12.9; ​ int i1=(int)d1;//截断操作-->12 --(精度损失) ​ (精度损失2): ​ int i2=128; ​ byte b=(byte)i2;//-128 ​ 默认类型:整型常量:默认类型为int型 ​ 浮点型常量:默认类型为double型 ​ 字符串:string属于引用数据类型;

 字符串-->int : Integer.parseInt(字符串)

关于进制: 二进制:最高位代表符号位:0:正数;1:负数; 正数的源码、反码、补码都是一样的 负数的反码:除符号位外,各个位取反 补码:反码加一 计算机底层都是以 二进制转成十进制:乘以二的幂数 十进制转成二进制:除以2去余数。

java中的运算符:

1.算术运算符:

正号、负号、加、减、乘、除、%:取模(取余)、++:自增(前):先运算后取值、 ​ ++:自增(后):先取值后运算、

--: · +:字符串连接

2.赋值运算符:

符号:= 扩展:+=,-=,*=,/=,%=;

  1. ++ 、--、+=不会改变变量本身的数据类型

    eg:short s=10; s=s+1;//编译失败

    //练习1

     int i=1;
     i*=0.1;
     System.out.print(i);//0
     i++;
     System.out.print(i);//1
     ​

    //练习2

     int m=2;
     int n=3;
     n*=m++;
     System.out.println("m="+m);//3
     System.out.println("n="+n);//6

    //练习3

     int n1=10;
     n1+=(n1++)+(++n1);//n1=n1+(n1++)+(++n1)-->n1=10+10+12=32
     System.out.print(n1);//32

    4.比较运算符

    ==、!=、<、>、<=、>= 返回结果(true或false)

    5.逻辑运算符:

    &—逻辑与 |—逻辑或 !—逻辑非 &&—短路与 ||—短路或 ^—逻辑异或

    (1)&与&&的区别:

    &”与“&&”都表示逻辑与,两者判断顺序都是从左往右,输出的结果都是Boolean类型,他们的区别在于:

    “&”会判断两个表达式,即使左边的等式是false,也仍然会继续判断右边的等式,在判断完两边的等式之后再输出结果。

    “&&”相比较则更节省时间,当左边的等式结果是false时,就不对右边等式进行判断而直接输出结果。

    (2)区分:|与||

    相同点1:|与||的运算结果相同

    相同点2:当符号左边是false时,二者都会执行符号右边的运算

    不同点3:当符号左边时true时,|继续执行符号右边的运算,而||不再执行符号右边的运算。

    6.位运算符:

    <<:左移 ——3<<2=12-->3 * 2 * 2=12;

    >>:右移——3>>1=1-->3/2=1;

    >>>:无符号右移 ——3>>>1=1-->3/2=1

    &:与运算——6&3=2

    |:或运算——6|3=7、

    ^:异或运算——6^3=5

    ~:反运算:——~6=-7

//面试题:

 class Test{
      public static viod main(String[] args){
           boolean x=true;
           boolean y=false;
           short z=42;
           if((z++=42)&&(y=true))z++;
           if((x=false)||(++z==45)){
                z++;
           }
           System.out.println("z="+z);
      }
 }
 //结果为:

z=46;

位运算符:直接对整数的二进制进行的运算

运算:<<:21<<2——21 *2 *2=84;

结论:在一定范围内,每向左移一位相当于乘于2(存在限度:只能移到该数据类型的二进制的追高位数)

运算:>>向右移:每向左移一位相当于除以2

>>:被移位的二进制最高位是0,右移后 ,空缺位都用0补。

>>>:被移位二进制最高位无论是0或者是1,空缺位都用0补。

&:二进制位进行&运算,只有1&1是结果是1,否则是0;

|:二进制位进行|运算,只有0|0时结果是0.否则时1;

7.三元运算符:

 (1)结构:(条件表达式)?表达式1:表达式2;(表达式1和表达式2要求式一致的。)

(2)三目运算符可以嵌套使用的;

 String maxStr=(m>n)?"m大":((m==n))?"m和n相等":"n大");

程序流程控制

顺序结构

分支结构

if分支语句:(三种格式)

 if(条件表达式){
      执行代码块
 }
 if(条件表达式1){
      执行代码块1
 }else{
      执行代码块2
 }
 if(条件表达式1){
      执行代码块1
 }else if(条件表达式2){
      执行代码块2
 }else{
      执行代码块3
 }

switch(表达式){

case 常量1:

语句1;

//break;

}

循环结构

  1. for循环;

  2. while循环的使用:

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

    • 两者的区别:for循环和while循环的初始化条件部分的作用范围不同。在for里面赋值在for外面不能引用。

  3. do-while循环结构:

    初始化条件

    do{循环体;

    迭代条件

    }while(循环条件){ }

扩展

如何从键盘获取不同类型的变量:需要使用Scanner类

具体实现步骤:

  1. 导包:import java.util.Scanner;

  2. Scanner的实例化:Scanner scan=new Scanner(System.in);

  3. 调用Scanner类的相关方法,来获取指定类型的变量。

//练习: //小明参加java考试,他和他父亲达成承诺: //如果: //成绩位100分时,奖励一辆BMW; //成绩位(80-90)时,奖励一台iphone xs max; //当成绩位[60,80]时。奖励一个ipad; //其他时,什么奖励也没有。 //请从键盘输入小明的期末成绩,并加以判断

 ​
 import java.util.Scanner;
 class SannerTest{
 public static void main(String[] args){
      Scanner scan=new Scanner(System.in);
      
      System.out.println("输入小明的期末成绩");
      int one=scan.nextInt();
      if(one==100){
      System.out.println("奖励一辆BMW;");
 }else if(one>80&&one<90){
      System.out.println("奖励一台iphone xs max;");
 }else if(one>60&&one<80){
      System.out.println("奖励一个ipad;");
 }else{
      System.out.println("什么也没有");
 }
 }
 }

//如何获取随机数:

int value=(int)Math.random();

关键字:break、continue的使用

  1. break:在switch-case或者循环结构中

  2. continue:在循环结构中

    区别:break:结束当前循环;

    continue:结束当次循环

Java中的数组;

数组的常见概念(数组属于引用数据类型的变量)

  1. 数组名

  2. 下标(或索引)

  3. 元素

  4. 数组的长度

  5. 存储相同类型的一组数据。

数组的特点:

  1. 数组是有序排列的;

  2. 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型。

  3. 创建数组对象会在内存中开辟一整块的连续空间

  4. 数组的长度一旦确定,就不能修改。

数组的初始化值;

 public class HelloWorld {
 ​
      public static void main(String[] args) {
           //1.一维数组的声明和初始化
           //1.1静态初始化:数组的初始化和数组的赋值操作同时进行
           int[] ids =new int[] {1001,1002,1003,1004};
           System.out.println("里哈吉");
           //动态初始化:数组的初始化和数组元素的赋值操作分开运行
           String[] manes=new String[5];
           System.out.println(ids.length);
           System.out.println(manes.length);
           //总结:数组一旦初始化完成,其长度就确定了。
           
           //错误写法:
      //     int[] arr1= new int[];
           // int[5] arr2= nwe int[5];
           //int[] arr3 = new int[3]{1,2,3},
      }
 ​
 }
 ​

数组元素的默认初始化值:(数组必须动态初始化才能使用)

  1. 数组元素是整型:0

  2. 数组元素是浮点型:0.0

  3. 数组元素是char类型:0或('\u0000')

  4. 数组元素是Boolean型:false

  5. 数组是引用数据类型时:null (注意:不是"null";

 int [] arr=new int[4];
           for(int i=0;i<arr.length;i++) {
                System.out.println(arr[i]);//输出:0 0 0 0
           }

数组的内存解析:(难点:

栈(stack):主要存放局部变量,

堆(heap):存放的数据是new 出来的结构:对象、数组

方法区:常量池、静态域、等等

二维数组;

           //二维数组的使用:
           //二维数组的初始化
           //静态初始化
           int[][] arr1= new int[][] {{1,2,3},{2,2,3}};
           //动态初始化1:
           int[][] arr2=new int[3][2];
           //动态初始化2:
           int[][] arr3=new int[3][];
           //特殊写法:
           int[] arr4[]=new int[][] {{1,2,3},{2,2,3}};
           

//二维数组的默认值:

 int[][] arr3=new int[3][2];
 System.out.println(arr3[0]);//地址值
 Systen.out.println(arr3[0][0]);//0
  1. 针对于初始化方式一:比如:int [] [] arr=new int[4] [3]

    • 外层元素的初始值为:地址值;

    • 内层元素的初始值为:与一维数组初始情况一样。

  2. 针对初始化方式二:比如; int [] [] arr=new int [4] [];

    • 外层元素的初始值为:null

    • 内层元素的初始值为:不能调用,否则报错。

//数组内存分析:

//关于数组:

  1. .写出一维数组初始化的两种方式:

  2. 写出二维数组初始化的两种方式:

  3. .如何遍历如下的二维数组;

  4. 不同类型的一维数组元素的默认初始化值各是多少。

  5. 一维数组的内存解析;

//注意:两个变量之间的赋值

  1. 两个变量的数组类型要相同

  2. 两个变量之间存在自动类型提升

数组的赋值、反转、查找(线性查找(equals()),二分法查找{折半查找)

  1. 线性查找:

  2. 二分法查找:前提:所要查找的数组必须是有序。

数组中涉及到的常见算法:排序算法

选择排序:

直接选择排序、堆排序

交换排序

冒泡排序、快速排序

  1. 冒泡排序算法原理:重复地走访要排序的数列,一次比较两个数据元素,如果顺序不对则进行交换,并一直重复这样的走访操作,直到没有要交换的数据元素为止。

    • 首先我们肯定有一个数组,里面存放着待排序的元素列表,我们如果需要把比较大的元素排在前面,把小的元素排在后面,那么需要从尾到头开始下面的比较操作:

      1. 从尾部开始比较相邻的两个元素,如果尾部的元素比前面的大,就交换两个元素的位置。

      2. 往前对每个相邻的元素都做这样的比较、交换操作,这样到数组头部时,第 1 个元素会成为最大的元素。

      3. 重新从尾部开始第 1、2 步的操作,除了在这之前头部已经排好的元素。

      4. 继续对越来越少的数据进行比较、交换操作,直到没有可比较的数据为止,排序完成。

  2. 快速排序:

    1. 初始化:pivot low high

插入排序

直接插入排序、折半插入排序、Shell排序

归并排序

桶式排序

基数排序

集合基础:

注意:打印String、StringBuilder、集合都不会出现对象名;

集合和数组的特点对比:

  • 集合类的特点:提供一种存储空间可变的存储类型,存储的数据容量可以发生改变;

  • 集合和数组的区别:、

    • 共同点:都是存储数据的容器;

    • 不同点:数组的容量是固定的,集合的容量是固定的;

ArrayList集合:

Class ArrayList<E>

  • 可调整大小的数组实现:

  • <E>:是一种特殊的数据类型、泛型;

    • 泛型类的数据类型不能是基本数据 类型;

    • 泛型只能传入引用数据类型;

ArrayList的构造方法:

  • public ArrayList():创建一个空的集合对象

ArrayList中常用的成员方法:

ArrayList中添加元素的方法:

  • public boolean add(E e):将指定的元素追加到此集合的尾部

  • public void add(int index,E element):在此集合中的自定位置插入指定的元素

     ArrayList<String> msg=new ArrayList<>();
             boolean one =msg.add("123");
             System.out.println(one);//true
             msg.add(0,"134");
             System.out.println(msg);//[134,123]

ArrayList中删除元素的方法:

  • public boolean remove(Object o):删除指定的元素,返回删除是否成功

  • public E remove(int index):删除指定索引处的元素,放回被删除的元素

     ----接着上面------------
     boolean ab=msg.remove("123");
     System.out.println(ab);//true
     System.out.println(msg);//[134]
     msg.add("abc");
     System.out.println(msg);//[134, abc]
     String two =msg.remove(0);
     System.out.println(two);//134
     System.out.println(msg);//[abc]

ArrayList中修改元素的方法:

public E set(int index,E element):修改指定索引的元素,返回被修改的元素

 -----接上------
 msg.add("bbc");
 System.out.println(msg);//[abc, bbc]
 String bb=msg.set(1,"bb");
 System.out.println(bb);//bbc
 System.out.println(msg);//[abc, bb]

ArrayList中查询元素:

public E get(int index):返回指定索引处的元素

  String cc=msg.get(1);
         System.out.println(cc);//bb

ArrayList中的元素个数:

public int size() 返回集合中的元素个数:

 int dd=msg.size();
         System.out.println(dd);//2

Arrays工具类的使用

      //1.boolean equals(int[] a,int[] b):判断两个数组是否相等。
      int[] arr1=new int[] {1,2,3,4};
      int[] arr2=new int[] {1,3,2,4};
      boolean isEquals=Arrays.equals(arr1,arr2);
      System.out.println(isEquals);//false
      //2.String toString(int[] a);输出数组信息。
      System.out.println(Arrays.toString(arr1));//[1, 2, 3, 4]
      //3.void fill(int[] a,int val):将指定的值填充到数组当中;
      Arrays.fill(arr1,10);
      System.out.println(Arrays.toString(arr1));//[10, 10, 10, 10]
      //4.int binarySearch(int[] a,int key):对数组进行排序。
      Arrays.sort(arr2);
      System.out.println(Arrays.toString(arr2));
      //5.int binarySearch(int[] a,int key)对排序后的数组进行二分法查找指定的值
      int[] arr3=new int[] {99,20,40,80,100};
      int index=Arrays.binarySearch(arr3, 99);
      System.out.println(index);

数组操作

  1. 插入元素:

    • 末尾插入;

    • 首尾间插入用链表省时

  2. 删除元素:

    • 删除掉数组中的某个元素后,数组中会留下空缺的位置,而数组中的元素在内存中是连续的,这就使得后面的元素需对该位置进行填补操作。

内存

栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中

堆内存:new 出来的内容都会进入堆内存,并且会存在地址值(堆内存的空间地址绝对不会出现两个相同的)

方法区:字节码文件(class文件)加载时进入的内存

进制

二进制:

  • 进制规则:逢二进一

  • 错位规则:借一还二

Ascanner中方法的使用

整数:int -->nextInt()

字符串:String -->next();遇到了空格,就不再路入数据了(结束标记:空格 tab键)

String-->nextLine();可以将数据完整的接收过来;

注意:nextInt和nextLine方法配合使用的时候,nextLine方法就没有键盘录入的机会了=

建议:今后键盘录入数据的时候,如果是字符串和整数一起接收,建议使用next方法接受字符串。

扩展:

  1. 计算机中你的时间原点为:1970年1月1日00:00:00;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值