Java基础
JVM:java虚拟机
java可移植性
卸载JDK
1.删除Java的安装目录
2.删除Java_HOME
3.删除path下关于Java的目录
4.java-version
安装JDK
下载,安装
记住安装的路径
配置环境变量
->配置环境变量
->配置path变量
检查是否安装成功
->打开cmd
->java -version
->打印出信息就成功了
下载一个notepad++
HelloWorld
新建一个文件夹来存放代码
新建一个Java文件
1.后缀为.java
2.Hello.java
代码
public class Hello{ \\class 类
public static void main(String[] args){ \\main 方法
System.out.print("Hello,World!");
}
}
用Dos命令,在该文件夹下编译运行java文件,会生成一个class文件
命令为javac 文件名.java (中间有个空格)
运行class文件 java 文件名
注意:
1.注意大小写
2.注意中英文
3.文件名和类名要一致,并且首字母大写
4.符号用英文
Java程序运行机制
编译型:一次全部翻译,发生改动,需要全部重新翻译(操作系统,如C/C++,速度要求不高的网页Java,把Java文件变成class文件过程)
解释性:一句一句翻译,发生改动,只需改变一部分
Java既有编译型的特征,也有解释型的特征
psvm : main方法的快捷键
sout :输出函数的快捷键
在IDE中要修改编程结构
注释、标识符、关键字
注释:
单行注释: //
多行注释: /* */
文档注释: /** */
/**
*@Description Hellowrold
*@Author sxc
*/
可以建一个空项目,在其中写代码,要新建一个module(模块),选择Java,建造一个Java文件,再new一个class文件
project structure中修改当前Java的版本,
标识符
类名,变量名,方法名
关键字
Java中标识符可以用$开头,特殊符号不能出现在变量名中
数据类型
强类型语言对变量要求严格,所有变量必须要先定义再使用
基本数据类型
int long byte(一字节) short(2字节)
boolean float double char
long类型要在数字后加L
float类型要在数字后加F
这些都定义在类integer中
整数扩展:进制 二进制 0b 十进制 八进制 0 十六进制 0x
int i=10;
int i1=010;
int i2=0x10;
浮点数扩展: 银行业务
//float 有限 离散 含入误差 大约 接近但不等于
//double
//最好完全不使用浮点数比较
//银行业务用 BigDecimal 数学工具类
float f=0.1f;
double d=1.0/10;
System.out.println(f==d);//false f: 0.1 d:0.1
float d=2313131231341423344f;
float d2=d+1;
System.out.println(d==d2);//true
字符扩展
char c1='a';
char c2='中';
System.out.println(c1); //a
System.out.println((int)c1); //97
System.out.println(c2); //中
System.out.println((int)c2); //20013
//所有的字符本质都是数字
//编码 Unicode
char c3='\u0061'; //转义字符
System.out.println(c3); //a
字符串
String sa=new String(original "hello world");
String sb=new String(original "hello world");
System.out.println(sa=sb); //flase
String sc= "hello world";
String sd= "hello world";
System.out.println(sc=sd); //true
//对象 从内存分析
- 单引号引的数据 是char类型的 单引号只能引一个字符(表示单个字符)
- 双引号引的数据 是String类型的 而双引号可以引0个及其以上(引用字符串)
布尔扩展
boolean flag=true;
引用数据类型:
类:String是类
接口
数组
# 类型转换
int i=128;
byte b=(byte)i;//强制转换,但是溢出了
System.out.println(b);//-128
//内存溢出
//由低到高 自动转换
注意点:
1.不能把布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换到低容量的时候,强制转换
4.转换时可能存在内存溢出,或精度问题//大致于C语言接近
jdk7后的新特性,数字之间可以用下划线分割
int money =10_0000_0000;
int year=20;
int total=money*year;//溢出
long total2=money*year;//计算时为int型,数值溢出,然后再转换为long型
long total3=money*((long)year);//提前转换,避免溢出
变量
每个变量都要声明其类型
作用域
在类里面可以写主方法和其它方法
1.局部变量在方法里面
2.实例变量在类里面,方法外面,所以实例变量作用域大
public class Demo{
String name;//
int age; //实例变量,不初始化,会变成默认值
//布尔值默认为false
//除了基本类型,其余的都是null
public static void main(String[] args)
{
Demo demo=new Demo();
System.out.println(demo.age);//0
//类变量
}
}
3.类变量//static
static double salary=double
常量
final 常量名=常量值;
static final double PI=3.14;//类常量,任何地方都可以直接调用
变量命名规则
运算符
instanceof后面学
包机制就是在在文件夹下new一个package
可以把class文件拷贝到包里,类似一个文件夹
//Ctrl+D :复制当前行到下一行
自增自减运算符
int b=a++;//先b=a; 再a=a+1;
int b=++a;//a=a+1; b=a;
<< // *2
>> // /2
逻辑运算符
&& || !
位运算符
& | ~ ^
面试:
左移2x8 -> 2x2x2x2-> 2<<3
位运算效率极高
字符串连接符
包机制
new package
(类似于命名空间,不同的包存储相同的名字)
一般用公司域名倒置作为包名;www.baidu.com com.baidu.www
新建文件夹com.baidu.www
会生成3个嵌套文件夹com baidu www
ide自动加的
包类似于头文件
用包来导入
import
JavaDoc
文档注释
加在类上就是类的注释
这里比较不同的文档
前加上cmd空格
跳转到命令行
javadoc是一个新的命令,doc.java是文件名, 中间的部分是避免中文字符无法识别产生乱码
- -encoding UTF-8:表示设置编码。
- -charset UTF-8:也表示设置编码。
从文件夹和文件名上可以看出,我命名上不太考究,文件应名为Doc
这就是生成的文档
从IDEA生成文档
Java流程控制
用户交互Scanner
package com.sxc.scanner;
import java.util.Scanner;
public class demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner=new Scanner(System.in);
System.out.println("使用next方式接收");
//判断用户有没有输入字符串
if(scanner.hasNext()){
String str=scanner.next();
System.out.println("输出的内容为"+str);
}
if(scanner.hasNextLine()){
String str=scanner.nextLine();
System.out.println("输出的内容为"+str);
}
//凡是属于I/O流的类,不关掉会一直占用资源
scanner.close();//关掉scanner
}
}
顺序结构
选择结构
case里的语句可以是字符串,字符的本质还是数字
反编译------java-class(字节码文件)-------反编译(IDEA)
项目编译后输出的路径,打开后,把输出的文件通过文件夹复制到源代码的文件夹下
在编译器中查看编译后的源码
循环结构
break&continue
练习
报错
Error running ...: No jdk for module
-
找到File>Project Structure…>Modules。
-
可以看到右边“Source“目录下面为空。点击”+“号,选择自己的项目或者模块
把自己的项目或者模块添加进来
-
在Dependencies中添加JDK
点击Apply,OK即可
报错为:module jdk is not define
java方法(函数)
何谓方法
system是类,out是对象,println()是方法
方法命名规则:首字母小写,然后驼峰规则
static方法一般称作静态方法,静态方法不依赖于任何对象就可以进行访问。
方法的定义及调用
调用方法
值传递和引用传递
值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。. 引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
方法重载(必须实参表不同)
命令行传参
传给主函数(方法)
运行一个class文件需要知道它的包路径,编译时直接编译就好了
可变参数
递归
适合少量层次的计算
一点理解
调用方法,需要先声明一个对象
数组
数组概述
下标从0开始
数组声明创建
未初始化的元素默认值为0
int []num=new int[10];//声明创建一起做
数组的四个特点
内存分析
三种初始化
对象(数组)都存放在堆中
下标
数组的使用
for-each循环
这是特殊的写法
数组名.for
多维数组
数组做方法参数
数组做返回值
多维数组
Arrays类
util工具包
用这个类来操作数组
学习一个新类
点进这个包就可以了
或者查看帮助文档
Java 8 中文版 - 在线API中文手册 - 码工具 (matools.com)
冒泡排序
共有八大排序
用一个布尔值简单的优化
稀疏数组(压缩)
简介
创建
输出
还原
可以在第一步和第二步之间先用fill填充
面向对象编程OOP
初识面向对象
方法回顾和加深
静态:用static修饰,可以直接调用
非静态:调用时要new一个对象
值传递
不会改变实参
引用传递(Java没有指针)
类似于全局变量,person是一个对象,指向一个类,是一个具体的人,可以改变。
一个类里面只能有一个 public class
对象的创建分析
构造器
out文件下有所有文件的输出
显式定义构造器
this,很重要
当你定义了有参构造,无参构造必须显式定义
alt+insert自动生成构造器
简单小结
动态的行为
面向对象三大特性
封装
get和set用来修改和展示私有属性
继承
多继承是指继承多个
私有属性不能继承过去
default是默认的
ctrl+H 打开继承‘树’
object类
super
与this形成对比,
调用父类的属性
super无法调用私有类
this()调用当前类的默认构造器
父类只有有参构造器时,子类不能无参继承
方法重写
静态
正确的写法,没有static
alt+insert 可以在子类内自动生成重写
子类重新写了父类的方法,静态static就是方法固定住了,会导致无法重写
多态
强转
不能重写的情况
static方法不能重写
final常量 不能重写
private 方法不能重写
instanceof和类型转换
A instanceof B ,A与B没有继承的关系会报错,
A没有引用B,则false
返回true的情况
object->父类->子类 这样的继承关系
这三种任意类型 A 引用 子类时,A与这三种类型都返回true
类型之间的转换
低类型转到高类型:子类转换为父类,可能会丢失一些方法
高转低需要强转
把父类类型强转为子类类型,然后父类就可以使用子类的方法了
static关键字详解
静态变量可以使用类名来调用
静态方法不能调用非静态方法
非静态方法可以调用静态方法
static{}静态代码块
创建一个新对象时,先执行静态代码块,再执行匿名代码块,再构造器
第二次创建对象时,不用执行静态代码快(只执行一次)
将一个方法导入
抽象类和接口
抽象类
子类必须重写抽象父类的所有的方法
接口(可以实现多继承)
把class改成 interface
利用接口实现多继承
实现类命名规则 接口名+Impl implements关键字
接口中的变量默认为public static final
内部类和oop实战
局部内部类
定义在方法里
匿名对象类
接口的匿名内部类
异常机制
什么是异常
异常体系结构
Java异常处理机制
处理异常
try尝试寻找异常
catch抓住异常 catch后括号内规定要抓取的异常类型
catch可以写多个
finally结束工作
finally可以用于关闭io流、资源等
CTRL+alt+T 选中代码包围住,放到一个代码块(if,for, try)里
主动抛出异常
在方法里抛出异常,虽然没有让0做分母,但是依旧会报告异常
自定义异常
通过继承Exception来自定义异常
总结
有了try catch 就可以让出现异常的程序不停止,继续执行下去
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步