Java基础要点笔记1(尚硅谷)

写在前面:Java基础系列文章

Java基础要点笔记1(尚硅谷)
Java基础要点笔记2面向对象(尚硅谷)
十大排序算法
关于设计模式

Java基础

  • 写在前面:Java基础系列文章
  • 一、内存
  • 二、Java基础知识图谱
  • 三、Java语言概述
    • 3.1 Java语言的特点?
    • 3.2 Java语两种核心机制?
    • 3.3 什么是JDK、JRE?
    • 3.4 环境搭建
    • 3.5 HelloWorld
    • 3.6 注释
    • 3.6 Java API文档
  • 四、Java基本语法
    • 4.1 关键字和保留字
    • 4.2 标识符
    • 4.3 变量
    • 4.4 数据类型
    • 4.5 关于进制
    • 4.6 运算符
    • 4.7 从键盘中获取不同类型的变量:需要使用Scanner类
    • 4.8 求质数的优化
    • 4.9 带标签的break和continue
    • 4.10 Eclipse
    • 4.11 数组
      • 4.11.1 数组的特点
      • 4.11.2 数组的初始化
      • 4.11.3 数组的内存解析
      • 4.11.4 代码练习
      • 4.11.5 多维数组
      • 4.11.6 简单算法
      • 4.11.7 Arrays工具类的使用
      • 4.11.8 数组使用中常见异常

一、内存

1. 比特(bit)和字节(byte)
比特是计算机中最小的存储单位;
字节是计算机中最基本的存储单元,1byte=8bit ;
2. 一个程序和它的数据在被CPU执行前必须移到计算机的内存中;
3. 内存和CPU一样,也是构建在表面嵌有数百万晶体管的硅半导体芯片上;

二、Java基础知识图谱

Java基础要点笔记1(尚硅谷)_第1张图片

三、Java语言概述

3.1 Java语言的特点?

  • 特点一:面向对象

    两个基本概念:类、对象
    三大特征:封装、继承、多态

  • 特点二:健壮性

    吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制

  • 特点三:跨平台性

    跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , Run Anywhere”
    原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM JavaVirtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。

3.2 Java语两种核心机制?

  • Java虚拟机 (Java Virtal Machine)

    JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。对于不同的平台,有不同的虚拟机。只有某平台提供了对应的java虚拟机,java程序才可在此平台运行,Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”

  • 垃圾收集机制 (Garbage Collection)

垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。

3.3 什么是JDK、JRE?

  • JDK(Java Development Kit Java开发工具包)

    JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等

  • JRE(Java Runtime Environment Java运行环境)

    包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。

简单而言,使用JDK的开发工具完成的java程序,交给JRE去运行。
Java基础要点笔记1(尚硅谷)_第2张图片

3.4 环境搭建

1. 下载并安装jdk

  • jdk目录简单介绍:
    bin:开发工具,比如javac.exe、java.exe、javadoc.exe等
    lib:jar包
    src.zip:常见类库

2. 配置环境变量path
path:windows系统执行命令时要搜寻的路径
(bin目录放到path目录下,各目录以分号隔开)
设置方法:将jdk目录放在变量JAVA_HOME中,之后path中存放%JAVA_HOME%\bin; tomcat会找这个JAVA_HOME变量。

3. 通过javac、java验证是否成功

允许配置多个jdk版本,但是最终使用的是配置在环境变量中的jdk版本;

3.5 HelloWorld

Java基础要点笔记1(尚硅谷)_第3张图片

3.6 注释

1. 单行注释
2. 多行注释
对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
多行注释里面不允许有多行注释嵌套。
3. 文档注释(java特有)
/**
@author 指定java程序的作者
@version 指定源文件的版本
*/
注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
操作方式:javadoc -d mydoc -author -version HelloWorld.java

类前、方法前、属性前加文档注释;
逻辑步骤:单行、多行注释;

3.6 Java API文档

API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口。

Java基础要点笔记1(尚硅谷)_第4张图片

四、Java基本语法

4.1 关键字和保留字

  1. 关键字是被Java语言赋予了特殊含义,所有字母都为小写 ;
  2. 保留字:以后的版本中可能会作为关键字,比如goto,const

4.2 标识符

  1. 数字不可以开头 ;
  2. 不能包含空格 ;
  3. 包名:小写 ;
  4. 类名、接口名:每个单词首字母大写 ;
  5. 变量名、方法名:第一个单词首字母小写,之后每个单词首字母大写 ;
  6. 常量名:所有字母大写,多个单词下划线连接 ;

注意:在起名字的时候尽量有意义;
java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用 ;

4.3 变量

java为强类型,也就是每个变量必须指出是什么类型;

4.4 数据类型

八种基本数据类型:

  • 整型:byte、short、int、long
    Java基础要点笔记1(尚硅谷)_第5张图片
    java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’ ;
    byte不能等于128 ;

  • 浮点型:
    Java基础要点笔记1(尚硅谷)_第6张图片
    float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。
    double:双精度,精度是float的两倍。通常采用此类型。
    Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。

  • 字符型

    • 2字节
    • 一个字符可以存储一个字母、一个汉字等 ;
    • 使用单引号‘ ’ ;
    • 可以 使用转移字符 ;
    • char = ‘’ ; // 编译不通过,不能不写
  • 布尔型:

    • 1bit
    • 只能取两值之一:true和false
    • 不可以使用0或非 0 的整数替代false和true,这点和C语言不同。
    • Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false用0表示。———《java虚拟机规范 8版》

基本数据类型之间的运算规则:
自动类型转化: 容量小的类型自动转换为容量大的数据类型。
Java基础要点笔记1(尚硅谷)_第7张图片
byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
boolean类型不能与其它数据类型运算。
当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型。

short s = 5 ;
s = s + 2 ; // 编译不通过,因为2默认为int,和s相加会变成int,之后赋值给short类型会出错。

强制类型转换:
Java基础要点笔记1(尚硅谷)_第8张图片
字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
String a = “43”; int i = Integer.parseInt(a);

boolean类型不可以转换为其它的数据类型。
boolean可以与字符串作连接运算
Java基础要点笔记1(尚硅谷)_第9张图片
三类引用数据类型:
类、接口、数组

4.5 关于进制

计算机以二进制补码的形式保存所有的整数。

  • 正数的原码、反码、补码都相同
  • 负数的补码是其反码+1
    Java基础要点笔记1(尚硅谷)_第10张图片
    二进制和八进制、十六进制之间的转化:
    Java基础要点笔记1(尚硅谷)_第11张图片
    开发中有现成的API,不用手动操作。

4.6 运算符

a) 算数运算符
Java基础要点笔记1(尚硅谷)_第12张图片
注:
    1. 取模的结果和被模数的符号相同。比如-12%5=-2 ; 12%-5=2; -12%-5=-2;
    2. int a = 10 ; int b = --a ; // a = 9, b=9
        int a = 10 ; int b = a-- ; // a = 9, b=10
    3. short s1 = 10 ;
        s1 = s1 + 2 ; // 编译失败
        s1 += 2 ; // 编译成功,不会改变变量本身的数据类型
b) 赋值运算符
=是赋值 ==是比较
c) 比较运算符
instanceof 检查是否是类的对象
d) 逻辑运算符
在这里插入图片描述
e) 位运算符
Java基础要点笔记1(尚硅谷)_第13张图片
f)三元(目)运算符
(条件表达式)?表达式1:表达式2
可以嵌套

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

具体实现步骤:
1.导包:import java.util.Scanner ;
2. Scanner的实例化:Scanner scan = new Scanner(System.in) ;
3. 调用Scanner类的相关方法,来获取指定类型的变量:
int类型:scan.nextInt() ;
String类型:scan.next() ;
double类型:scan.nextDouble() ;
boolean类型:scan.nextBoolean() ;
对于char类型的获取,Scanner没有提供相关的方法,只能获取一个字符串。

4.8 求质数的优化

for(int i=2;i<100000;i++){
for(int j=2;j<=Math.sqrt(i);j++){
//…
}
}

4.9 带标签的break和continue

Java基础要点笔记1(尚硅谷)_第14张图片

4.10 Eclipse

可以装多个版本
无需安装,直接解压缩即可使用。
安装完成更改字符集编码,更改字体。

新建项目->new java project->new package->new class…
导入工程:file->import->general->existing project into workspace

4.11 数组

4.11.1 数组的特点

1.数组是有序排序的;2.在内存中开辟一整块的连续空间,数组名是首地址;3.数组的长度一旦确定,就不能修改。

数组属于引用数据类型的变量,数组的元素,既可以是基本数据类型,也可以是引用数据类型。
每个数组都有一个属性length指明它的长度。

**注意:**Java在声明数组的时候不能指定其长度,例如int a[5] ; //非法 int[4] a = new int[4] ; //也是非法

4.11.2 数组的初始化

  1. 动态初始化:数组声明且为数组元素分配空间与赋值的操作分开进行。
  2. 静态初始化:在定义数组的同时就为数组元素分配空间并赋值:
    int arr[] = new int[]{3,9,8} ; int[] arr = {3,9,8} ;

Java基础要点笔记1(尚硅谷)_第15张图片

4.11.3 数组的内存解析

Java基础要点笔记1(尚硅谷)_第16张图片

4.11.4 代码练习

Java基础要点笔记1(尚硅谷)_第17张图片
Java基础要点笔记1(尚硅谷)_第18张图片

4.11.5 多维数组

Java基础要点笔记1(尚硅谷)_第19张图片
注意:arr[0][0]不是地址,对于一维数组arr是地址,但是arr[0] 不是
int[][] arr2 = new int[4][] ; // arr2[1]为null

4.11.6 简单算法

1. 数组元素的赋值
杨辉三角–> f[i][j] = f[i-1][j-1] + f[i-1][j] ;
旋转矩阵–>去leecode练习
【拓展之笔试题】
创建一个长度为6的Int数组,要求数组元素的值都在1-30之间,切实随机赋值。同时,要求元素的值各不相同。
解法:定义一个长度为30的数组
(自己写的,不确定对不对,可以参考思路)

int[] arr = new int[6] ;
int[] flag = new int[31] ;
for(int i=0;i<arr.length;i++){
     
	arr[i] = (int)(Math.random()*30) + 1 ;    // [0,1) [0,30) [1,31)
	if(flag[arr[i]]==1){
     
		i-- ;
	}
	flag[i] = 1 ;
}

Java基础要点笔记1(尚硅谷)_第20张图片

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

3. 数组的赋值、反转、查找(线性查找、二分法查找)
int[] arr1,arr2 ;
arr1 = new int[]{1,2,3,4,5} ;
arr2 = arr1 ; // 这个不算是真正的复制,两个指向的是同一个地址,一个改变都会改变,真正的复制要重新new

关于二分:一般有序数组的操作要想到二分法
如果想要改进,比如1到100,每两个数之间间隔为1,想找10,可以用(10-1)/(100-1)知道一个大概的位置,这种方式叫插值法(不懂)

4. 数组元素的排序
这一块比较重要,东西也比较多,单独列出来,链接奉上:十大排序算法

4.11.7 Arrays工具类的使用

Java基础要点笔记1(尚硅谷)_第21张图片

4.11.8 数组使用中常见异常

Java基础要点笔记1(尚硅谷)_第22张图片

你可能感兴趣的:(java,java,面试,java面试,java基础,java入门教程)