知识点1:数组中的常见算法

1. 数组元素的赋值

比如:杨辉三角、回形数、随机生成彩票

2. 求数值型数组中元素的最大值、最小值、平均数、总和等

package com.java.code;/*** 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,和值,* 平均值,并输出出来。* 要求:所有随机数都是两位数。* <p>* 提示:如何获取指定范围的随机数[10,99]* (int)(Math.random() * 90 + 10)** @author tzm* @create 2020-06-30 9:00*/
public class Exer02 {public static void main(String[] args) {//1. 创建数组,并按照要求给数组元素赋值int[] arr = new int[10];for (int i = 0; i < arr.length; i++) {arr[i] = (int) (Math.random() * 90) + 10;}System.out.print("获得的随机数为:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();//2. 计算数组中的特征值int sum = 0;int max = 0;int mix = 100;double ave;for (int i = 0; i < arr.length; i++) {sum += arr[i];//计算总和}for (int i = 0; i < arr.length; i++) {if (arr[i] > max)  //判断最大值max = arr[i];}for (int i = 0; i < arr.length; i++) {if (arr[i] < mix)  //判断最小值mix = arr[i];}ave = (double)sum / arr.length;System.out.println("最大值" + max);System.out.println("最小值" + mix);System.out.println("所有数的和" + sum);System.out.println("平均值" + ave);}
}

3.数组的复制、反转、查找(线性查找、二分法查找)

public class ArrayTest {public static void main(String[] args) {int[] array1 = new int[]{2, 3, 5, 7, 11, 13, 17, 19};//数组的复制int[] array2 = new int[array1.length];for (int i = 0; i < array1.length; i++) {array2[i] = array1[i];}//数组的反转//方式一:
//        for(int i = 0;i < array1.length / 2;i++){ // i   array1.length - 1 - i
//            int temp = array1[i];
//            array1[i] = array1[array1.length - 1 - i];
//            array1[array1.length - 1 - i] = temp;
//        }//方式二:for(int x = 0,y = array1.length - 1;x < y;x++,y--){int temp = array1[x];array1[x] = array1[y];array1[y] = temp;}//数组的遍历for (int i = 0; i < array1.length; i++) {System.out.print(array1[i] + " ");}//线性查找int[] array3 = new int[]{2, 3, 5, 7, -11, 13, 0, 17, 19,0};int value = 0;//查找的目标数据boolean flag = true;//定义一个是否找到了指定数据的标识for(int i = 10;i < array3.length;i++){if(value == array3[i]){System.out.println("在索引为" + i + "的位置上找到了指定的元素");flag = false;break;}}if(flag){System.out.println("未找到指定的元素");}//二分法查找:要求此数组必须是有序的。int[] arr3 = new int[]{-99,-54,-2,0,2,33,43,256,999};boolean isFlag = true;int number = 256;number = 25;int head = 0;//首索引位置int end = arr3.length - 1;//尾索引位置while(head <= end){int middle = (head + end) / 2;if(arr3[middle] == number){System.out.println("找到指定的元素,索引为:" + middle);isFlag = false;break;}else if(arr3[middle] > number){end = middle - 1;}else{//arr3[middle] < numberhead = middle + 1;}}if(isFlag){System.out.println("未找打指定的元素");}}
}

4.数组元素的排序算法

  • 十大排序算法
选择排序直接选择排序、堆排序
交换排序冒泡排序、快速排序
插入排序直接插入排序、折半插入排序、Shell排序
归并排序
桶式排序
基数排序

  • 会手写冒泡排序
public class BubbleSortTest {public static void main(String[] args) {int[] arr = new int[]{34,76,-8,0,56,-45,6,21};for(int i = 0;i < arr.length - 1;i++){for(int j = 0;j < arr.length - 1 - i;j++){if(arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "  ");}}
}
  • 掌握快排的实现原理

知识点2:Arrays工具类的使用

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种方法。

package com.java.code;import java.util.Arrays;/**** Arrays工具类的使用测试* @author tzm* @create 2020-06-30 11:14*/
public class ArraysTest {public static void main(String[] args) {int[] arr1 = new int[]{1,2,3,4,5};int[] arr2 = new int[]{1,2,3,4,5};// == : 比较两个数组的地址值是否相同。即:比较两个引用是否指向堆空间中的同一个数组System.out.println(arr1 == arr2);//false//equals():比较两个数组的内容是否相等。System.out.println(Arrays.equals(arr1,arr2));//true//toString():输出数组的元素信息System.out.println(Arrays.toString(arr1));//fill():将指定的值填充到数组中的所有位置上Arrays.fill(arr1,10);System.out.println(Arrays.toString(arr1));int[] arr3 = new int[]{34,76,-8,0,56,-45,6,21};System.out.println(Arrays.toString(arr3));//sort():排序
//        Arrays.sort(arr3);System.out.println(Arrays.toString(arr3));//binarySearch():对排序后的数组进行二分法检索指定的值。//如果找到了,返回找到的元素所对应索引位置。//如果没找到,返回负数。int index = Arrays.binarySearch(arr3, 76);if(index >= 0){System.out.println("找到了指定元素。位置为:" + index);}else{System.out.println("没找到指定元素");}}
}

知识点3:数组中的常见异常

package com.java.code;/***  数组中的常见异常:*  1. ArrayIndexOutOfBoundsException:数组角标越界异常*  2. NullPointerException:空指针异常*** @author tzm* @create 2020-06-30 11:26*/
public class ArrayExceptionTest {public static void main(String[] args) {//1. ArrayIndexOutOfBoundsException:数组角标越界异常int[] arr = new int[10];//角标范围:0,1,2,。。。,9
//        System.out.println(arr[10]);//报错//        System.out.println(arr[-1]);//报错//2. NullPointerException:空指针异常//情况一:String[][] arr2 = new String[5][];
//        System.out.println(arr2[0][0]);//情况二:int[] arr3 = new int[10];
//        arr3 = null;System.out.println(arr3[0]);//情况三:通过对象调用内部的方法时,如果此对象是null,则空指针异常String[] arr4 = new String[10];System.out.println(arr4[0].toString());}
}

知识点4:面向对象的理解

1. 面向过程 vs 面向对象

二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

2. 类与对象的理解

面向对象中的两大核心概念
* 1. 类(class):对一类事物的描述,是抽象的、概念上的定义。
* 2. 对象(object\instance):由类派生(new)出的一个个的实体。

3. 学习的三条主线

面向对象编程的学习三条主线:
* 1. 类及类中的成员:属性、方法、构造器;内部类、代码块
* 2. 面向对象的三个特征:封装、继承、多态、(抽象)
* 3. 其它关键字的使用:this\super\import\package\static\final\abstract\interface\....

说明:

类的内部成员:
*   属性 = 成员变量 = field
*   方法 = 成员方法 = (成员)函数 = method

知识点5:类及对象的创建过程

* 1. 设计类,就是设计类的内部成员。。
*
* 2. 设计类、创建对象、调用功能的步骤:
* 第1步:创建类(实际上,就是创建类的成员:属性、方法)
* 第2步:创建类的对象 (或 创建类的实例、类的实例化)
* 第3步:通过"对象.属性"或"对象.方法"的方式,调用对象的内部结构
  • 代码说明
public class PhoneTest {  //测试类public static void main(String[] args) {//数据类型  变量名 = 变量值Scanner scan = new Scanner(System.in);
//        int number = scan.nextInt();//创建Phone类的对象Phone iphone = new Phone();//通过"对象.属性"或"对象.方法"的方式,调用对象的内部结构iphone.name = "苹果手机";iphone.price = 8999;System.out.println("name:" + iphone.name + ", price:" + iphone.price);iphone.call();iphone.sendMessage("有内鬼,停止交易!");String info = iphone.takePhoto();System.out.println(info);//##################Phone iphone1 = new Phone();iphone1.name = "华为P40 pro";iphone1.price = 4999;System.out.println("name:" + iphone1.name + ", price:" + iphone1.price);System.out.println("name:" + iphone.name + ", price:" + iphone.price);//##################Phone iphone2 = iphone;iphone2.price = 6999;System.out.println("name:" + iphone.name + ", price:" + iphone.price);//##############iphone.sendMessage("你好!很高兴认识你");}
}class Phone{//1. 设计属性String name;//手机名称int price;//价格//2. 设计方法public void call(){System.out.println("手机可以拨打电话");}public void sendMessage(String message){System.out.println("发送信息:" + message);}public String takePhoto(){//System.out.println("拍照");return "拍照成功";}
}

内存解析:

如果创建了类的多个对象,则每个对象拥有一套类的属性。当我们修改其中一个对象的属性时,不影响其它对象
* 此属性的值。
*
*  如果将对象引用p1赋给新的变量p2,则p1和p2就共同指向了堆空间中唯一的一个对象实体。当我们通过其中一个引用
*  修改对象的属性的话,则会导致另外引用对同一个属性的值的调用。

知识点6:成员变量vs局部变量

测试类中属性的定义
*
* 1. 回顾:变量的分类
* ① 按照数据类型来分: 基本数据类型(8种)  vs  引用数据类型(类、数组、接口)
*
* ② 按照类中声明的位置: 成员变量(或属性)   vs  局部变量
*   说明:成员变量:在类中直接定义的变量
*        局部变量:在方法内、构造器内、代码块内等定义的变量
*
* 2.  成员变量(或属性)   vs  局部变量
* 相同点:
*       1. 变量声明的格式相同:数据类型 变量名 = 变量值
*       2. 凡是变量,都需要先声明,后使用
*       3. 都有其作用域。超出作用域,不可调用
*
* 不同点:
*      1. 声明位置的不同。
*          > 成员变量:在类中直接定义的变量
*          > 局部变量:在方法内、构造器内、代码块内等定义的变量
*      2. 是否可以使用权限修饰符进行修饰。
*          > 权限修饰符有:private \ 缺省 \ protected \ public
*          > 成员变量可以使用权限修饰符进行修饰 ;
*            局部变量不可以使用权限修饰符进行修饰
*          > 暂时,我们在定义成员变量时,大家都使用缺省即可。(讲封装性时再说)
*      3. 是否有默认初始化值的情况
*          > 成员变量都有默认初始化值
*                  ① 如果成员变量是整型(byte\short\int\long),则默认值为:0
*                  ② 如果成员变量是浮点型(float \ double),则默认值为:0.0
*                  ③ 如果成员变量是boolean型,则默认值为:false
*                  ④ 如果成员变量是char型,则默认值为:0 或 '\u0000'
*                  ⑤ 如果成员变量是引用数据类型,则默认值为:null
*
*          > 局部变量都没有默认初始化值。则意味着在调用局部变量之前,一定要显式的赋值。
*
*      4. 在内存中存储的位置不同
*          >成员变量存储在堆空间中
*          >局部变量存储在栈空间中
*/
  • 代码演示
public class PersonTest {public static void main(String[] args) {Person p1 = new Person();System.out.println(p1.name +"," + p1.age + "," + p1.gender);p1.sleep();p1.eat("湖南臭豆腐");Person p2 = new Person();System.out.println(p2.age);}
}class Person{//声明成员变量(属性)String name;int age = 1;boolean gender;//性别public void sleep(){int hour = 6; //局部变量System.out.println("人每天应该至少保证" + hour + "小时的睡眠");}public void eat(String food){//food:局部变量System.out.println("我喜欢吃:" + food);}}

数组的应用和面向对象的开始6相关推荐

  1. 开发环境 测试环境 定义_「PHP7数组详解」:第1章 环境搭建安装(一)

    本书所有内容,会在知乎.今日头条.微信公众号.简书同步推出. 通过第一章的,将学习到以下内容: 创建一个简单的PHP程序 条件判断语句的使用方法 循环语句for,while,loop的用户 函数的使用 ...

  2. c不是面向对象编程语言 所以不具有面对,go 学习笔记之go是不是面向对象语言是否支持面对对象编程?...

    面向对象编程风格深受广大开发者喜欢,尤其是以 C++, Java 为典型代表的编程语言大行其道,十分流行! 有意思的是这两中语言几乎毫无意外都来源于 C 语言,却不同于 C 的面向过程编程,这种面向对 ...

  3. java面向对象基础

    java数组 文章目录 java面向对象初步认识 软件开发 面向对象和面向过程 对象 对象和类 类的定义 类和对象的练习 类的方法 类的方法的练习 java面向对象初步认识 软件开发 软件开发分为了结 ...

  4. php 面向对象知识体系

    (一)声明一个类 new一个对象 <?php header('Content-type:text/html;charset=utf-8'); //声明一个类 class Meizi{ //属性 ...

  5. java怎样定义一个对象数组,java定义一个对象数组

    java怎么定义一个动态数组,Java初学者入门应该掌握的30个概念,java定义一个对象数组,java一维数组定义 摘要: java 是面向对象程序设计语言, 对象数组作为 javase 中的基础. ...

  6. C++ vector动态数组

    C++ vector动态数组 Vector投入是面向对象方式的动态数组 使用vector容器,可以轻松实现数组插入元素,vector可以轻松实现动态管理扩容 创建动态数组vector vector&l ...

  7. 【JavaSE学习】03面向对象Java语法

    JavaSE(B站黑马)学习笔记 01Java入门 02数组.方法 03面向对象&Java语法 04-1Java高级(Stream流.异常处理.日志技术) 04-2Java高级(文件处理-IO ...

  8. 二维数组(java)

    一.什么是二维数组? (1)从定义的角度:学过一维数组的同学知道,对于一维数组的声明为 int [] arr;同理,如果我们这样声名 int [][] arr,那么此数组即为一个二维数组. (2)从形 ...

  9. Java听课笔记7(面向对象 上)

    课程目录 面向对象的基本概念 类和对象 类和对象的定义格式 对象与内存分析 封装性 构造方法 this关键字 值传递与引用传递 对象的一对一关系 static关键字 main方法分析 代码块 单例设计 ...

最新文章

  1. web项目没有run on server时..
  2. python做成绩表_自学Python笔记:用Python做成绩分析(2)
  3. 2018-2019-1 20165201 实验五 通讯协议设计
  4. K8s创建pod yaml文件详解
  5. 【蓝桥杯单片机】数码管
  6. 引用dll文件要提交解决方案
  7. SpringCloud Alibaba - Nacos 作为配置中心 读取Yaml配置信息
  8. 腾讯文件和微云服务器,网盘Web客户端对比:腾讯微云支持32GB单文件上传
  9. 985学生:为什么现在学校还在教C语言?| 文末送书
  10. 职场必杀技之职场英语
  11. 理解本真的REST架构风格
  12. 史上最简单的 MySQL 教程(十四)「列属性 之 主键」
  13. Android Studio新手–下载安装配置–零基础入门–基本使用–调试技能–构建项目基础–使用AS应对常规应用开发
  14. STM32控制ESP8266透传到私有HTTP服务器(Json数据格式)
  15. Eclipse+Java+SSM+Easyui实现网上考试系统
  16. Group Lasso-Based Band Selection for Hyperspectral Image Classification
  17. 《先进PID控制 MATLAB仿真 第2版 刘金琨等编》【shallow】
  18. 基于matlab数字交换网络的仿真,基于MATLAB数字交换网络的仿真
  19. 中专学计算机室内设计,室内设计专业在中职教育学校中的发展潜力
  20. java websocket 聊天室实现 与 tomcat监控实现java类

热门文章

  1. jsp text 水印_java实现图片上加文字水印(SpringMVC + Jsp)
  2. lol服务器维护2021,lol维护公告最新时间2021.5.27 lol维护到几点
  3. 非主流闪图头像教程:扩散粒子效果
  4. 江南爱窗帘十大品牌 | 推荐3种简单的窗帘上色方法
  5. Keil_uvision_4基本使用教程
  6. 【软件测试面试】面试技巧,让面试官记住的自我介绍,疯狂收割offer.....
  7. 股东转让股权的条件是什么
  8. 车联网也需要“走对路”,用户需求“导航”小度车载OS持续领先
  9. 基于ubuntu系统的HEVC视频编码与解码
  10. 大拇指全程报导苹果发布会2014.9.9