• 【JAVA】 01-Java基础知识


    链接:


    测试

    01-Java基础知识

    一、数据类型

    基本类型

    title...

    (just a test....)


    目录

    注:<按需!!!>目录部分就简单来,在内容部分可以在最开始加一个“本节关键字摘要”

    1-语言环境搭建及使用入门

    • 1.1-Java语言环境的搭建
    • 1.2-hello world
    • 1.3-classpath的配置

    2-Java基础语法

    • 2.1-
      (数据类型,自增自减,位运算(重点说一下应用场景,特别是两值互换的三种思路))
      (选择结构:switch中选择的类型只有四种(后期加了两种);若某个case缺了break时的执行流程)
      (循环结构:for与while的区别-初始化变量的作用域;最简单的无限循环两种形式)
      (流程控制语句 - break:下方若有语句,则执行不到,会报错,如果要放在前面,可加一个if判断之类的,把break放在if中(常用思路,后面的return同理);在for嵌套时默认跳出当前,在内循环时默认内,当在内循环而希望跳出外循环时-命名内外循环后break outer;)
      (典型题目:...)

    3-函数

    (函数的三要素:函数名,参数列表,结果类型)
    (return:两个功能-结束函数(注意这个),返回结果,因此如果return下方还有语句,则下方语句会被屏蔽执行不到,编译报错)
    (定义函数:明确1:这个功能的结果是什么?明确返回值类型;明确2:这个功能需求未知内容是什么?明确参数列表)
    (函数重载overlord:只要参数个数或者参数类型不同,与返回值类型无关;参数列表是有顺序的,顺序不同也算作重载)
    (函数的内存调用图解:栈-先入后出)

    4-数组

    (数组:是一个容器,用new新建容器)
    (数组定义的格式:一维数组:两种-格式加示例)
    (数组作为引用型变量,指向为空时赋值为null而不能是0,0作为地址在计算机中是不能随便拿来用的)
    (java内存机制:java对内存的划分-5部分;栈及其特点;堆及其特点,对比;图示略或截图)
    (图示:如下两个图)

    (数组操作的常见问题:数组脚标越界异常;空指针异常)
    (数组长度的获取:属性length-arr.length可获取到数组的长度值)

    (数组的应用:)
    (注:每个应用都附相应的代码链接)
    (应用1:多个数求和-最基本:定义变量,for遍历数组,return;容器:一旦数多了,先存,后操作)
    (应用2:求最值-注意点:max初始化为数组中的某个值(建议为第一个arr[0]),不要初始化为数组之外的(设为0而数组中都是负数时);遍历数组时从第二个开始(从第一个开始,则自己跟自己比较);若初始化max=0,也可以拯救一下,将max作为脚标,if(arr[x]>arr[max]) {max=x})
    (应用3:将数组转成字符串:需求;思路-字符串的累加或者相连接原理;优化:temp初始化带[,for循环中加入判断是否是最后一个元素来决定加逗号还是方括号)
    (应用4:查表法:查表法定义(笔记页最下方);数组容器的特点;使用场景;分析需求。。。笔记那一整页都搬运过来;例子一组数(有规律的数可以造出来不用存,无规律数列给予有序编号作为索引;星期的查表法-鲁棒性-return与抛出异常的对比))
    (应用5:转十六进制数组版:问题-顺序反了,解决:每运算出一位,不要打印,先存;反着存;关键点:定义为char数组,每计算出一位进行判断并转为char类型,反着存需要定义索引index并做减减运算,额外定义一个toString函数将字符数组转为字符串而不是在toHex函数中打印,“0x”加在toHex函数的return位置而不是toString函数中)
    (应用6:转十六进制去零版:去零的位置-不是在得到字符数组之后再遍历判断,而是更早,在右移运算阶段就进行判断,当剩余为0时即停止;索引的设置:初始化为数组长度,并在while循环中,当条件满足时才自减arr[--index],保证索引index最终指向的是数组中非空位的最后一位,并在toString的参数列表中加入索引,则得到的字符串没有空位,是非常舒适的结果)
    (应用7:转十六进制查表版:首先建立表;在循环的计算阶段把转换改为直接查表,省去了判断,非常厉害arr;关键步骤:arr[--index]=chs[temp];)
    (应用8:进制转换通用版:定义总的进制转换函数trans,然后将其中不同进制的不同参数加入参数列表;引入API帮助文档,可以直接用java定义好的工具,示例)
    (排序:排序有七种算法,最快的是希尔排序)
    (应用9:选择排序:思想:大圈套小圈-拿第一个脚标跟剩余元素比较,获取最值并存放到第一个脚标位置,作为一轮,之后拿第二个脚标遍历比较;图解;外循环-多条线的起点,x<arr.length-1因为如图取0-4即是五次,内循环-从起点发出的箭头;返回值为void是因为数组作为引用型变量,调用时把主函数中的地址传给函数,操作后原地址指向的数组已经变了,与基本数据类型的处理相区别)

    (应用10:冒泡排序:思想:大圈套小圈-第一轮从0脚标开始,脚标相邻的两个数比较,小的放前,大的放后,得到最大值放在最后一个脚标位置(之后不必再比),第二轮继续从0脚标开始,相邻两数比较,遍历到最后一个脚标的前一个为止,得到第二大的数放在倒数第二个脚标位置,以此类推;图解;外循环-控制行数x<arr.length-1,需要减1,因为如图第一行比较5次,0-4就是5次,内循环-控制每一行的内容,y<arr.length-1-x,-1防止脚标越界,-x控制每行递减的最大值;实际开发中用java写好的功能即可,优化好的,并且自己写容易错:import java.util.Arrays; Arrays.sort(arr);)

    (应用11:位置置换代码的抽取:两个排序中都包含了位置置换代码,为提高复用性,抽取出来;返回值为void;参数列表注意不要遗漏了数组arr,否则换完也没有效果)
    (应用12:普通查找方式:遍历,效率低;返回值类型-int,索引;参数列表-数组arr和查找目标key;脚标不存在时取一个负数(脚标从0开始,非负,取-1是规范写法) return -1)
    (应用13:二分/折半查找方式:思路:1234;前提-必须有序,无序用普通查找,不建议先对无序数组排序后使用二分,因为这样脚标值其实变了;按脚标折中,中间值求法1-mid=(min+max)/2,求法2-位运算更快mid=(min+max)>>1,注意是整除,结果是小数时舍弃小数位;注意点-1-100的数,盲猜50,小,则下一步从51-100里取,而不是50-100,端点值比较过了,去掉;所查找的数不存在时-通过判断是否min<=max,错位时不再折半返回-1;代码体现:最外侧while判断条件的两种形式-一种判断是否与中间值相等(while(arr[mid]!=key)),一种判断头尾脚标有无距离(while(min<=max)))

    (二维数组:定义-三种格式(不同格式对应不同的图解和打印含义,分别说一下);内存图解;打印显示含义-三种情况分析;二维数组的长度-arr.length表示二维数组的长度(即有几个一维数组)arr[i].length表示其中某一个一维数组i的长度)
    (定义格式1-图解)

    (定义格式2-图解1)

    (定义格式2-图解2-对一维数组赋值后)

    (数组练习:)
    (练习1:数组反转;思路:头尾互换,不断移动脚标,直到两个脚标交叉)
    (练习2:在有序数组中插入元素时获取插入点;思路:有序数组查找元素用二分查找,元素不在数组中是return min,分析三种不同情况证明确实是min;实际开发中可直接用java自定义的二分查找Arrays.binarySearch(arr, key),其中return -(min+1),查找不到时返回插入点并表示为负数,+1为了区分当脚标为0时仍表示为负数)

    (基础部分小结:编程思想)
    (在注释中写明分析思路:需求-思路-步骤-相应代码-测试)
    (函数复用性:函数复用性-函数抽取封装,主函数中只放需要执行的代码)
    (对象复用性:多个类中需要相同功能时,将所需功能封装到指定类中,使用时只要找到功能所属的类就可以了-同为引用型变量,类与数组一样,使用前需要先new一个实体出来才能继续用,示例关键语句(那两句);功能类中可以定义多个相似或集中的功能;使用时不需要考虑功能类中的具体代码,只要用生成的.class文件即可--引出“对象”:ArrayTool tool=new ArrayTool();//这个就是对象,类就是对象;实际开发中用java写好的功能,调用即可Arrays.sort(arr);)

    ps:

    • 不确定性在java里是不允许存在的(例如函数重载时参数列表相同会报错)
    • 废话在java里是不允许存在的(例如break或者return下方永远都执行不到的语句会报错)

    1-语言环境搭建及使用入门

    • 1.1-Java语言环境的搭建

    • 1.2-hello world

    • 1.3-classpath的配置

    END

  • 相关阅读:
    微信小程序与用户交互
    洛谷P2066 机器分配
    巴蜀3540 -- 【Violet 6 最终话】蒲公英
    POJ1984 Navigation Nightmare
    洛谷P1387 最大正方形
    洛谷P2679 子串
    洛谷P2057 善意的投票
    Bzoj 2726 SDOI 任务安排
    POJ2761 Feed the dogs
    P1272 重建道路
  • 原文地址:https://www.cnblogs.com/anliux/p/11023040.html
Copyright © 2020-2023  润新知