JavaSE 学习
learn from kuangshen
入门
版本
JavaSE 标准版,用于桌面,控制台开发
JavaSE 企业版,用于服务器开发
环境
JDK: JAVA Development Kit
JRE: JAVA Runtime Enviroment
JVM: JAVA Virtual Enviroment
安装
主流:JDK 1.8
下载-安装-配置环境
1、新建系统变量:变量名JAVA_HOME 变量值是安装路径
2、配置path:双击已存在的path,编辑,新建两个
3、第一个%JAVA_HOME%\bin 第二个%JAVA_HOME%\jre\bin
测试:打开cmd 输入java -version
Hello World
新建文件 JavaHelloWorld.java 文件名与class名一致
#代码:
public class JavaHelloWorld{
public static void main(String[] args){
System.out.print("Hello World!");
}
}
当前目录运行cmd
#编译,生成JavaHelloWorld.class
javac .\JavaHelloWorld.java
#运行class名称JavaHelloWorld 无后缀,不是JavaHelloWorld.class文件
java JavaHelloWorld
注意
1、java需要区分大小写
2、public class 名称与文件名一致
3、运行时 java 文件名,不带后缀
安装IDEA
使用与pycharm类似
基础
数据类型
java是强类型语言,需要先定义再使用
byte
short
int
long
float
double
char
boolean
String 是类,S大写
转义字符
\t 制表符
\n 换行
类型转换
优先级 低--------------------------------------高
byte,short,char->int->long->float->double
为了可视化方便,数字之间可以加下划线
int a = 10_000_000;
变量
type name = value;
1、类变量
2、实例变量
3、局部变量
首字母小写+驼峰原则
public class Hello {
static int a=0; //类变量,修饰符static
String name; //实例变量,默认 null
int age;//实例变量,默认 0
public static void main(String[] args) {
int i=0;//局部变量
Hello hello = new Hello(); //创建类,自己
System.out.println(hello.name); //调用实例变量
System.out.println(a);//调用类变量
}
}
常量
不可变动的值,命名习惯用大写表示,结合_下划线区分单词
final 常量名=值
命名规范
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6bT09vI6-1624275354830)(https://i.loli.net/2021/06/17/4gBGA2iakdP5w8q.png)]
运算符
算数:+, -, *, /, %, ++, --,
赋值:=,
关系:==, !=, >,<,>=,<=,instanceof
逻辑运算:&&, ||, !
位运算:&, |, ^, ~, >>, <<, >>>,
条件:?:,
扩展赋值运算符:+=, -=, *= /=,
优先级
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2cQiYmPK-1624275354832)(https://i.loli.net/2021/06/17/DxE3du1RCsjLv6Y.png)]
包机制
package pkg1[. pkg2[. pkg3...]];
一般利用公司域名倒置作为包名称;com.baidu.www
使用包:import pkg1[. pkg2[. pkg3…]].(classname|*);
JavaDoc
百度:jdk 帮助文档,查看官方包使用说明
用于生成自己的API文档
/**再按回车会自动生成
/**
* @author Bruce
* @version 1.0
* @since 1.8
*/
public class Hello {
/**
*
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}
流程控制
交互
Scanner
Scanner scanner = new Scanner(System.in);
if(scanner.hasNextLine()){
# 整行
String str = scanner.nextLine();
# 第一个字符串,空格后的不接收
System.out.println("输出信息:"+str);
}
顺序
选择
if(){
}
switch(str){
case "A":
break;
case "B":
break;
default:
break;
}
循环
while()
do{
}while() #至少执行一遍
for(int i=0;i<100;i++){
} #IDEA快捷键 100.for
#死循环
for(;;)
while(1)
#增强for循环,遍历数组和集合
int[] numbers = {
10,20,30,40,50};
for (int x:numbers){
System.out.println(x);
}
#
break;跳出循环
#
continue:中止本次循环,进入下一次
方法
定义和调用
实现某个功能的语句块的集合
设计原则:一个方法实现一个功能
命名:首字母小写+驼峰
public static void main(String[] args) {
int sum = addFunction(1,2);
System.out.println(sum);
}
public static int addFunction(int a, int b){
return a+b;
}
方法重载
一个类中有多个名称相同的方法,但是返回值不同。
public static int addFunction(int a, int b){
return a+b;
}
public static double addFunction(double a, double b){
return a+b;
}
递归
常见:A方法调用B
递归:A方法调用A,自己调用自己
包括:
1、递归头,什么时候不调用自己,如果没有头,则将进入死循环
2、递归体,什么时候需要调用自己
// 阶乘
public class Hello {
public static void main(String[] args) {
int result = f(5); //值不能太大,调用递归次数不能太大
System.out.println(result);
}
public static int f(int n){
if (n==1){
// 递归头
return 1;
}
else{
return n*f(n-1);
}
}
}
数组
相同类型的有序结合
数组也是对象,数组元素相当于对象的成员变量
数组长度是确定的,不可变的,如果越界,则报错:ArrayIndexOutofBounds
int[] a = {
1, 2, 3}; //Java中的新建数组格式
int b[]= {
1,2,3}; //C++中的新建数组格式
//定义长度10的int数组
int[] a = new int[10];
//多维数组
int[][] a = new int[5][10];
堆和栈
堆:存放new的对象和数组,可以被所有的线程共享,不会存放别的对象引用
栈:存放基本对象类型(会包含这个基本类型的具体数值),引用对象的变量(会存放这个引用在堆里面的具体地址)
int[] array=null;//创建。栈内存出现array;堆中无变化;
array = new int[10];//赋值。堆内存出现array,有10个int类型的数
//静态初始化
int[] a = {
1,2,3};
//动态初始化,初始化为0,String类型为null
int[] b = new int[10];
b[0]=5;
Arrays 类
java.util.arrays
冒泡排序
public static int[] sort(int[] array){
int a =0;
for (int i = 0; i < array.length-1; i++) {
boolean flag = false;
for (int j = i; j < array.length-1; j