黑马程序员技术交流社区

标题: 大数据基础班学习经历 [打印本页]

作者: anla邹小侠    时间: 2019-7-22 21:30
标题: 大数据基础班学习经历
本帖最后由 anla邹小侠 于 2019-7-22 21:51 编辑

       大学的时候学过一学期的JAVA,但是后来一直在用C语言,对 JAVA 有点陌生了,特意从基础课开始大数据学习之旅。目前已上基础班一星期, 王振老师讲课详细、细心、耐心,通过老师的课程,重新温习JAVA 语法, 查漏补缺,下面是日常笔记的部分内容,如有错误,欢迎指出~
JAVA 5.0后发展速度很快
JAVA 8.0很多公司在用
JAVA 11.0用来学习语法
tiobe---权威的编程语言排行榜网站
JAVA跨平台原理: JVM相当于翻译, 有windows\mac\linux 版的JVM.
JAVA ME 移动版   JAVA EE 企业版 JAVA SE桌面版
命令行提示符: cls 清屏  exit 退出
空常量 null 是不能输出的, 但是String变量==null可以输出
E+38 指乘以10的38次方
char内存占用2B ,范围是 0~65535.其它基本数据类型范围是从负值开始的
0b开头-----2进制
0开头-------8进制
boolean 类型变量名一般定义为 flag
jdk11 : 文件含中文编译会有乱码.要设置为JAVA语言, ANSI编码
自动类型转换:
        byte--->short ---> int---> long---> float---> double
                                  char--->int---> long---> float---> double
int范围大概在正负21亿之间.
不推荐强制类型转换, 数据可能会丢失甚至改变符号位.
如果有byte short char 进行运算,结果一定是 int类型.
8421BCD码: 十进制与二进制之间相互转换方法
二进制转八进制: 把二进制数从右边开始,三个三个为一组,最左边不足的补0,合并在一起就得到八进制表示形式.
二进制转十六进制: 同上, 只是是四个四个为一组.
所有数据的运算都是采用补码进行的, 存储也是补码存储的.
正数: 原码=反码=补码
负数:反码为原码的符号位不变, 其余7位取反. 补码为反码+1
已知补码求原码: 先-1, 再取反.
byte 原码最大是127( 0b01111111) 最小是-128( 印度人规定的, -128为 0b10000000(即 -0) )

byte b = (byte)130;-----结果b为-126,过程如下:
130默认为 int类型, 130 = 0b00000000 00000000 00000000 10000010,强制转换为 byte类型 即保留最低字节 10000010 是负数,且数据是以补码存储的, 已知补码求原码, 先-1(得 10000001) ,再取反得
原码11111110= -(64+32+16+8+4+2) = -126.

进制转换方法----
位权展开法: 系数  * 基数 *权;余数倒序法;8421码;拆分组合法;

字符输出还是字符,只是在做运算的时候,是ASCII值做运算.
当连续进行+操作时,从左到右逐个进行. +两边都是基本数据则加法运算,一边是基本数据一边是字符串则做拼接.()可提高优先. 字符串是胶水类型, 任何类型的数据和他相加结果一定是字符串. (int a = 10; a+= "halo";//报错,不能将字符串赋值给基本数据类型变量)

int i =10;int j = 20;
System.out.println( i = j );// 将==写成=的结果是输出 20. i = j为赋值运算.

==如果比较基本类型, 比较的是数值是否相等
==如果比较引用类型, 比较的是地址值是否相等(引用类型数据即指 变量名不是一个数值而是变量在内存中的地址)


数组.length 获取数组长度
关系运算符(运算结果一定是一个布尔值)
        >  >=  <  <=  ==  !=
逻辑运算符
        与 或 异或 取反 -----  & | ^ !  
        短路与 短路或 -----  && ||
        具有短路效果, 如果b表达式1 能确定结果值,就不执行后面其它的表达式了.(如 a(值为5)++<b(值为6) && a++(5)>b(6)  ,表达式1为false, 表达式2就不执行了, a的值最终为6.
        短路与 短路或 操作数类型是boolean(true/false) , 单与 单或 可以位运算 可以boolean运算.
三元运算符
        数据类型 变量名 = (关系表达式? 表达式1:表达式2);
        如果关系表达式结果为true 就把表达式作为结果 否则表达式2就是结果

if( 关系表达式 ){
        JAVA语句;
}

Scanner 使用步骤:导包,创建对象,输入数据
import java.util.Scanner
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
相对于if , 在一些情况中使用三元运算符可以减少执行步骤.
数据测试: 正确数据\ 边界数据\错误数据

定义方法的格式详解:
修饰符 返回值类型 方法名(参数列表){        //代码省略...        return 结果;}
数组定义时就要规定长度了:
方式一: int[] arr = new int[3];
方式二: int[] arr = new int[]{1,2,3,4,5};  元素是变量也可以.
方式三: int[] arr = {1,2,3,4,5};

JVM内存划分: 下划线区域是与我们相关的.
     寄存器: CPU使用
     本地方法栈: JVM在使用操作系统功能的时候使用
     方法区: 存储可以运行的class文件.
     堆内存: 存储对象或者数组, new来创建的,都放在堆内存.
     方法栈:  方法运行时使用的内存.

类的定义格式
public class ClassName {  //成员变量  //成员方法 }
成员变量:位置发生了改变, 在类中,方法外
成员方法:几乎是一样的, 只不过把static去掉。
类是一类事物的模板,对象是一类事物的具体体现.
类名 对象名 = new 类名();

面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。面向对象的语言中,包含了三大基本特征,即封装、继承和多态。
封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。
封装优化1——this关键字
为了封装方法参数见名知意,要使用this关键字,来解决这个重名问题。
封装优化2——构造方法
修饰符 构造方法名(参数列表){        // 方法体}
当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。所有的类都有构造方法,因为Java自动提供了一个无参数构造方法,一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。构造方法是可以重载的,既可以定义参数,也可以不定义参数

标准代码——JavaBean
JavaBean是 Java语言编写类的一种标准规范。符合JavaBean的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的set和get方法。
public class ClassName{
  //成员变量---在类中方法外, 在堆内存(成员变量属于对象,对象进堆内存), 随着对象的创建而存在,随着对象的消失而消失, 有默认初始化值
  //构造方法
  //无参构造方法【必须】
  //有参构造方法【建议】
  //成员方法
  //getXxx()
  //setXxx()
}
获取到数组的长度, 语句为:数组名.length
注意: 变量名2 = 变量名1++;//  不止给变量名2 赋值了, 变量名1的值也加1 了.
jshell> int index =5; int index2 = index++; int index3 = index;index ==> 5index2 ==> 5index3 ==> 6

如何取到任意位数, 先将特定位数移到个位,再取余.(前面还有数就需要模10)
ge = i%10;
shi = i/10%10;
bai = i/10/10%10;// bai = i/100;---前面没有数了可以不模10
如435的4---435/10/10%10, 435的3---43/10%10, 435的5---435%10.

水仙花数:是个三位数, 数的 个位的立方+ 十位的立方 +百位的立方 = 数.

switch( byte/ short/ char/ int/ String/ enum)

程序先编写 再编译 后运行,编译器只检查语法是否符合java语法规范. 变量使用前要赋值.
for 循环体 和 while 的变量在循环体前没有初始化的话,循环体内的赋值编译器是检测不到的,会报错--未赋值.编译器用来检测语法有无错误.局部变量使用前必须赋值(方法内定义的即局部变量).
对象数组的长度是固定的,无法适应数据变化的需求。为了解决这个问题,Java提供了另一个容器java.util.ArrayList  集合类,让我们可以更便捷的存储和操作对象数据。
ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似<int>不能写,但是存储基本数据类型对应的包装类型是可以的。所以,想要存储基本类型数据,<>中的数据类型,必须转换后才能编写
\t 是制表符,相当于键盘上的tab键, 有对齐功能.
while循环通常用于未知循环次数的情况.
死循环 : for(;;;)  while(true)
循环控制语句
        break ----用在switch 结束整个选择语句/ 用在循环中就是一旦满足条件就是结束整个循环
        continue---只能和循环结合使用,一旦满足条件,就跳到下一次循环.
给循环起名:
f:for(){
    while(){
        //在while循环中结束整个for循环,可以给for循环起名
        break f;
    }
}
for( int i = 0; i<5; i++ )// 0 开始的, 判断符号是< 的, 进一的, 循环次数为判断数.

中国有闰年的说法。闰年的规则是:四年一闰,百年不闰,四百年再闰。(年份能够被4整除但不能被100整除算是闰年,年份能被400整除也是闰年)。请打印出1988年到2019年的所有闰年年份。解释如下:
能被400整除即能被4和100整除---400是润年;能被4整除但不能被100整除---100不是润年;即排除掉了非四百倍的百数。
等差数组 An = A1 + (n-1)d, d 为差.

IDEA---open module setting---选中,减号,取消module资格, module就会字体变细,再右键就有delete 键了, 作用是防止误删除操作.
IDEA项目结构:项目--- 模块(负责单独的功能或小型项目)---- src下的包----java文件,创建顺序也是这样.
file---project structure 导入模块\移除模块\新建模块
new作用:  申请内存空间
引用类型的默认值都是null.
System.out.print(char数组变量名);//特殊的引用类型输出,输出的不是地址,而是会把char数组拼接起来,输出字符串. 其它的引用类型(如其他类型数组\非基本数据类型)输出的是地址.
数组操作的两个常见小问题:
int[] arr = new int[3];
System.out.println(arr[3]);//索引为3的元素是不存在的,会造成索引越界问题.
空指针异常//null 引用数据类型的默认值, 表示不指向任何有效对象. 方位的数据已经不再指向堆内存的数据.
int[] arr ;
System.out.println(arr[0]);---java.lang.NullPointerException

ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似<int>不能写,但是存储基本数据类型对应的包装类型是可以的。所以,想要存储基本类型数据,<>中的数据类型,必须转换后才能编写.,即数据类型包装类, 大写首字母即可.(特殊的:int---Integer, char--Character)
当 static 修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。
当static 修饰成员方法时,该方法称为类方法 。静态方法在声明中有static ,建议使用类名来调用,而不需要创建类的对象。调用方式非常简单。//静态方法只能访问静态成员。
静态方法调用的注意事项:
被static修饰的成员可以并且建议通过类名直接访问
静态代码块:定义在成员位置,使用static修饰的代码块{ }。
static 关键字,可以修饰变量、方法和代码块。在使用的过程中,其主要目的还是想在不创建对象的情况下,去调用。如两个工具类,体现了static 方法的便利:Arrays类、Math类。如Arrays的方法,不用创建对象就可以使用了:
public static String toString(int[] a) ` :返回指定数组内容的字符串表示形式。
public static void sort(int[] a)` :对指定的 int 型数组按数字升序进行排序。

字符型默认值  \u0000----即空格
奇数在左边 偶数要在右边 的逻辑思维:
        如数组元素从0-5分别为 奇数偶数奇数偶数奇数奇数---奇数奇数奇数偶数奇数偶数---奇数奇数奇数奇数偶数偶数
return 如果单独使用表示结束当前正在执行的方法。
==和+=一样,都有强制转换功能。
方法重载:同一个类中多个方法方法名相同方法的参数不相同(类型或数量),与返回值无关。
prinltn方法是个很典型的重载方法,可以输出不同类型的数据。
可变长参数 public static int sum(int... args)//可变长参数本质上是个数组,.length取长度。

递归 本质上就是方法自己调用自己。栈内存溢出错误,方法只进不出就会抛出错误。递归调用一定要有出口。以后可以用于:
        遍历文件夹下的所有文件和文件夹
        XML 的树形结构进行解析

作者: 夜听雨    时间: 2019-7-23 12:35
选择了,便走下去。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2