Java基础要点笔记1(尚硅谷)
Java基础要点笔记2面向对象(尚硅谷)
十大排序算法
关于设计模式
1. 比特(bit)和字节(byte)
比特是计算机中最小的存储单位;
字节是计算机中最基本的存储单元,1byte=8bit ;
2. 一个程序和它的数据在被CPU执行前必须移到计算机的内存中;
3. 内存和CPU一样,也是构建在表面嵌有数百万晶体管的硅半导体芯片上;
特点一:面向对象
两个基本概念:类、对象
三大特征:封装、继承、多态
特点二:健壮性
吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
特点三:跨平台性
跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , Run Anywhere”
原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM JavaVirtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。
Java虚拟机 (Java Virtal Machine)
JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。对于不同的平台,有不同的虚拟机。只有某平台提供了对应的java虚拟机,java程序才可在此平台运行,Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”
垃圾收集机制 (Garbage Collection)
垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
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去运行。
1. 下载并安装jdk
2. 配置环境变量path
path:windows系统执行命令时要搜寻的路径
(bin目录放到path目录下,各目录以分号隔开)
设置方法:将jdk目录放在变量JAVA_HOME中,之后path中存放%JAVA_HOME%\bin; tomcat会找这个JAVA_HOME变量。
3. 通过javac、java验证是否成功
允许配置多个jdk版本,但是最终使用的是配置在环境变量中的jdk版本;
1. 单行注释
2. 多行注释
对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
多行注释里面不允许有多行注释嵌套。
3. 文档注释(java特有)
/**
@author 指定java程序的作者
@version 指定源文件的版本
*/
注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
操作方式:javadoc -d mydoc -author -version HelloWorld.java
类前、方法前、属性前加文档注释;
逻辑步骤:单行、多行注释;
API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口。
注意:在起名字的时候尽量有意义;
java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用 ;
java为强类型,也就是每个变量必须指出是什么类型;
八种基本数据类型:
整型:byte、short、int、long
java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’ ;
byte不能等于128 ;
浮点型:
float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。
double:双精度,精度是float的两倍。通常采用此类型。
Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
字符型
布尔型:
基本数据类型之间的运算规则:
自动类型转化: 容量小的类型自动转换为容量大的数据类型。
byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
boolean类型不能与其它数据类型运算。
当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型。
short s = 5 ;
s = s + 2 ; // 编译不通过,因为2默认为int,和s相加会变成int,之后赋值给short类型会出错。
强制类型转换:
字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
String a = “43”; int i = Integer.parseInt(a);
boolean类型不可以转换为其它的数据类型。
boolean可以与字符串作连接运算
三类引用数据类型:
类、接口、数组
计算机以二进制补码的形式保存所有的整数。
a) 算数运算符
注:
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) 位运算符
f)三元(目)运算符
(条件表达式)?表达式1:表达式2
可以嵌套
具体实现步骤:
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没有提供相关的方法,只能获取一个字符串。
for(int i=2;i<100000;i++){
for(int j=2;j<=Math.sqrt(i);j++){
//…
}
}
可以装多个版本
无需安装,直接解压缩即可使用。
安装完成更改字符集编码,更改字体。
新建项目->new java project->new package->new class…
导入工程:file->import->general->existing project into workspace
1.数组是有序排序的;2.在内存中开辟一整块的连续空间,数组名是首地址;3.数组的长度一旦确定,就不能修改。
数组属于引用数据类型的变量,数组的元素,既可以是基本数据类型,也可以是引用数据类型。
每个数组都有一个属性length指明它的长度。
**注意:**Java在声明数组的时候不能指定其长度,例如int a[5] ; //非法 int[4] a = new int[4] ; //也是非法
注意:arr[0][0]不是地址,对于一维数组arr是地址,但是arr[0] 不是
int[][] arr2 = new int[4][] ; // arr2[1]为null
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 ;
}
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. 数组元素的排序
这一块比较重要,东西也比较多,单独列出来,链接奉上:十大排序算法