大数据学习2019.03.19
Java基础语法
1.Random(随机数)
作用:产生一个随机数;
使用步骤:
导包:import java.util.Random;
创建对象:Random r = new Random();
获取随机数:int num = r.nextInt(10);
- 产生的数据在0到10之间,包括0,不包括10。
- 产生的数据取决于传入的参数。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package test01; import java.util.Random; public class RandomDemo { public static void main(String[] args) { Random r = new Random(); for (int i = 0; i < 10; i++) { int num = r.nextInt(10); // 产生[0,10)之间的随机数; System.out.println(num); } int i = r.nextInt(100) + 1; // 产生[1,100]之间的随机数; System.out.println(i); } }
猜数字小游戏
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package test01; import java.util.Random; import java.util.Scanner; public class GuessNumber { /* * 1.产生一个1到100之间的随机数; 2.键盘录入我们猜的数字; 3.比较这两个数字,if语句实现; */ public static void main(String[] args) { Random r = new Random(); int res = r.nextInt(100) + 1; Scanner in = new Scanner(System.in); while (true) { System.out.print("请在1到100之间猜一个数字:"); int num = in.nextInt(); if (num > res) { System.out.println("大了!"); } else if (num < res) { System.out.println("小了"); } else { System.out.println("恭喜你,猜中了!"); break; } } in.close(); } }
数组概述和定义格式
- 数组是存储多个变量(元素)的容器;
- 数组中的变量的数据类型要一致;
Java中的内存分配:
-栈 存储局部变量,局部变量就是定义在方法中的变量,使用完毕,立即回收。
-堆 存储new出来的东西,实体,对象,每一个对象都有默认地址值;使用完毕后,会在垃圾回收器空闲的时候被回收。
-方法区(面向对象)
-本地方法区(和系统相关)
-寄存器(给CPU使用)
数组操作的两个常见小问题
1.数组索引越界(ArrayIndexOutOfBoundsException):访问到了数组中的不存在的索引时发生。
2.空指针异常(NullPointerException):数组引用没有指向对象,却在操作对象中的元素。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package myArray; public class ArrayDemo { /* * 数组:存储同一种数据类型的多个元素的容器; 数组的定义格式 1. 数据类型[] 数组名; int[] arr; * 定义了一个名为arr的整型数组;(推荐方式) 2. 数据类型 数组名[]; int arr[]; 定义了一个int类型的变量,变量名是arr数组; * 数组初始化:所谓的初始化就是为数组开辟内存空间,并为数据中的每个元素赋予初始值; * 1.动态初始化 只给出长度,由系统给出初始值(给出该数据类型的默认值); * byte,short,int,long 0 * float,double 0.0 * char '\u0000' * boolean false * 引用类型 null * 数据类型[] 数组名 = new 数据类型[数组长度]; * 2.静态初始化 给出初始化值,由系统决定长度; * 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...}; * 数据类型[] 数组名 = {元素1,元素2,...}; */ public static void main(String[] args) { // 数组初始化--动态初始化 int[] arr = new int[5]; System.out.println(arr); // 地址值 [I@15db9742 // 数组中元素的访问:通过索引访问数组中的元素 int[] arr2 = arr; for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); for (int i = 0; i < arr.length; i++) { arr[i] = i + 100; } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); System.out.println(arr2); //[I@15db9742 for (int i = 0; i < arr2.length; i++) { System.out.print(arr2[i] + "\t"); } System.out.println(); // 数组初始化--静态初始化 int[] arr1 = { 12, 44, 69, 58, 25 }; System.out.println(arr1); for (int i = 0; i < arr1.length; i++) { System.out.print(arr1[i] + "\t"); } } }
获取数组长度:数组名.length;
获取数组中的最大和最小值;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package myArray; public class ArrayTest01 { public static void main(String[] args) { int[] arr = { 12, 6, 54, 32, 34, 65, 87, 54, 9, 23 }; int max = arr[0]; int min = arr[0]; for (int i = 1; i < arr.length; i++) { max = max > arr[i] ? max : arr[i]; min = min < arr[i] ? min : arr[i]; } System.out.println("最大值为:" + max + ",最小值为:" + min); } }
二维数组
二维数组就是一个元素为一维数组的数组
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package myArray; public class ArrayDemo02 { /* * 二维数组的定义格式 * 数据类型[][] 数组名; * 数据类型 数组名[][]; * 数据类型[] 数组名[]; * 二维数组的初始化: * 动态初始化: * 数据类型[][] 数组名 = new 数据类型[m][n]; * m:表示二维数组中一维数组的个数; * n:表示一维数组中的元素个数; * 静态初始化: * 数据类型[][] 数组名 = new 数据类型[][]{{},{},{},...}; * 数据类型[][] 数组名 = {{},{},{},...}; */ public static void main(String[] args) { int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}; System.out.println(arr); //[[I@15db9742 System.out.println(arr[0]); //[I@6d06d69c System.out.println(arr[0][0]); //1 System.out.println(arr[1][1]); //5 System.out.println(arr[2][2]); //9 //二维数组遍历 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j]+"\t"); } System.out.println(); } } }
面向对象基础
面向对象思想:
- 面向对象是基于面向过程的编程思想。
- 面向对象:强调的是对象,然后由对象去调用功能。
- 面向过程:强调的是每一个功能的步骤。
面向对象的思想特点:
- 1.是一种更符合我们思考习惯的思想;
- 2.可以将复杂的事情简单化;
- 3.将我们从执行者变成了指挥者。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
成员变量和局部变量的区别:
在类中的位置不同:
-成员变量:类中方法外
-局部变量:方法内或者方法声明上
在内存中的位置不同:
-成员变量:堆内存
-局部变量:栈内存
生命周期不同:
-成员变量:随着对象的存在而存在,随着对象的消失而消失
-局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同
-成员变量:有默认的初始化值
-局部变量:没有默认的初始化值,必须先定义,赋值,才能使用
private关键字
- 是一个关键字;
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只在本类中才能访问
把成员变量用private修饰,提供对应的getXxx()/setXxx()方法用于获取和设置成员变量的值,方法用public修饰。
通过对象直接访问成员变量,会存在数据安全问题。
封装
是面向对象三大特征之一
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。
封装原则
-将不需要对外提供的内容都隐藏起来;
-把属性隐藏,提供公共方法对其访问。
好处:
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法进行封装,提高了代码的复用性。
this关键字
如果有局部变量名和成员变量名相同,在方法中采用的是就近原则。
this代表所在类的对象引用。
构造方法
作用:给对象的数据进行初始化;
构造方法格式:
- 方法名与类名相同;
- 没有返回值类型,连void都没有;
- 没有具体返回值。
注意事项:
- 如果你不提供构造方法,系统会给出默认的无参构造方法;
- 如果你提供了构造方法,系统将不再提供默认的无参构造方法;
- 构造方法也是可以重载的。
- 推荐:自己给出无参构造方法。