一、基础内容介绍
- JavaSE - 标准版 桌面程序、控制台开发。
- JavaME - 嵌入式开发(手机、小家电)
- JavaEE - E企业级开发 (web端、服务器开发...)
- JDK : Java Development Kit 包含 JRE 和 JVM
- JRE: Java 运行时环境。包含虚拟机
- JVM:虚拟机
1、搭建环境
地址 www.bilibili.com/video/BV1Ho… www.bilibili.com/video/BV1Fi…
搭建JDK
- 百度搜索JDK8.选择Orcal官方下载 window64 下载。
- 双击打开。选择路径、开始安装。
- 配置环境变量
系统变量添加
配置Path变量
java -version查看是否安装成功
2、Java基础知识
(1)、主函数
public class Hellow {
public static void main(String[] args) { // psvm
System.out.println("hellow word"); // sout
}
}
(2)、快捷键
Ctrl + Alt + L 快速格式化代码
Ctrl + Alt + V 快速生成返回值
(3)、数据类型
Java是强类型语言。所有变量都必须先定义后才能使用。 (安全、严谨)
- 基本类型
public static void main(String[] args) {
byte age2 = 1; // 127 一个字节
short age = (short) 1; // 32767 两个字节
int a = 2; // 4 个字节 21 4748 3647
int bigNumber = 10_0000_0000;
double b = 2.2;
float c = 1.2f;
char st = 'a'; // 2个字节
boolean haveShow = true;
String str = "111"; //
}
float num1 = 0.1f;
double num2 = 1.0/10;
System.out.println(num1 == num2); // false
// 有限 离散 接近但不等于
(4)、其他
2、语法
(1) 方法多参数
public static void main(String[] args) {
// 自调用
(new JavaTest()).testMany(1, 2, 3,4444);
}
void testScannerMain() {
Scanner s = new Scanner(System.in);
System.out.println("使用next 接收输入参数 ");
if (s.hasNext()) {
String str = s.next();
System.out.println(str);
}
// next() 会自动去除空白。有空格就结束了
// nextLine() 以回车为结束符。可以获得空白
s.close();
}
void testScannerOther() {
Scanner s = new Scanner(System.in);
System.out.println("使用next 接收输入整数 ");
if (s.hasNextInt()) {
int str = s.nextInt();
System.out.println(str);
}
// next() 会自动去除空白。有空格就结束了
// nextLine() 以回车为结束符。可以获得空白
s.close();
}
/** 循环的关键字
* break 终止循环
* continue 终止本次循环
* return 终止方法
*/
/**
* 方法的定义
* 修饰符 返回值类型 方法名 (参数) {}
*/
/**
* 方法的重载
* 一个类中、相同的方法名、不同的参数。 Java 是可以重载的如下方法
* 方法重载调用的时候会逐个去匹配。如果全都匹配不上就会报错,
*/
void max(double a, double b) {}
void max(int a, int b) {}
/**
* 可变参数
* @param arguments
*/
void testMany(int... arguments) {
for (int i = 0; i <arguments.length; i ++) {
System.out.println(arguments[i]);
}
}
- List
void testList() {
System.out.println("hellow word");
int[] intList = new int[10]; // 可以存放10个类型的int
intList[0] = 1;
int[] nums = {1, 2, 3}; // 直接初始化
// Java数组里面类型相同
int intList2[];
// for each
for (int content: nums) {
System.out.println(content);
}
// Arrays.toStrong(打印数组)
System.out.println(Arrays.toString(nums));
// Arrays.sort 排序升序
}
- 引用类型
package TestObject;
public class Person {
String name;
// 默认构造函数
public Person() {
}
// 一定定义有参构造, 机必须显示定义无参构造、不然创建对象会报错。
public Person(String name) {
this.name = name;
}
// alt + insert 自动生产 get set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
void say() {
System.out.println("aaaa");
}
}
多态
package TestObject;
// Java 只有单继承
// ctrl + H 可以看继承树 student = Person = Object
public class student extends Person implements UserService {
@Override
void say() {
System.out.println(this.name);
super.say();
}
@Override
public void run() {
}
@Override
public void eat() {
System.out.println("eat");
}
// instanceof 用于类型判断
public static void main(String[] args) {
Person per = new student();
System.out.println(per instanceof Person); // true
((student)per).eat(); // 类型转换
}
static int age = 1;
double height = 22;
void testStatic() {
student stu = new student();
System.out.println(student.age);
System.out.println(stu.age);
System.out.println(stu.height);
}
static { // 静态代码块、类加载的时候会执行、且只会执行一次。
}
{// 匿名代码块 可用于 初始值 初始化
}
// 加载顺序 1、 静态代码块 == 匿名代码块 === 构造方法。 但是静态代码块只会执行一次
}
/**
* 多态:
* 1、同一个方法可以根据发送对象的不同、而采用多种不同的行为方式。
* 2、一个对象的实际类型是确定的、但可以指向对象的引用类型有很多
* Person per = new Student();
* 动态编译:
*/
/**
* static 方法、属于类:
* 静态方法:
* 静态属性:
* final 常量 断子绝孙
* private 私有
*/
抽象类
package TestObject;
// 抽象类
public abstract class Action {
// 约束、有人帮我们实现就好了。
public abstract void doSomething(); // 只有方法名、没有实现
public void doSelf() {
System.out.println("action do self");
}
}
/**
* 抽象类不能 new 出来、只能靠自己去实现他, 他就是一个约束。 抽象类就是法律。
* 抽象类的所有方法、子类必须全部实现、 除非他的子类也是抽象类
* 正常类不能拥有抽象方法。 但是抽象类可以有正常的方法。
*
* 存在的意义:帮一些公有的东西抽象出来、提高开发效率。
*/
接口
package TestObject;
/**
* 接口:只有规范、没有方法实现。 专业的约束、约束和实现的分离。
* 正常类、通过 implements 来实现接口。 必须要实现接口中的所有方法。一个类可以实现多个接口 public class student extends Person implements UserService {}
*/
public interface UserService {
// 接口中的所以定义都是 抽象的 public abstract
void run();
// 接口的 常量也是默认加上 public static final
public static final int port = 99;
// public abstract 是灰色的状态。 说明可以不写,
public abstract void eat();
}
接口和抽象类的区别
(抽象类是对事物的抽象、接口是对行为的抽象、抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。 抽象类是一种模板式设计,而接口是一种行为规范,是一种辐射式设计。)
- 抽象类可以定义完成的方法。接口只有抽象方法
- 一个类可以实现多个接口。
- 接口中的实例变量默认是 final 类型的,而抽象类中则不一定
- 一个类实现接口的话要实现接口的所有方法,而抽象类不一定 (抽象方法一定要实现、非抽象可以不实现)
(3)、异常
package TestObject;
public class TestError {
/**
* try
* catch
* finally 无论执行不执行。都会邹. 例如关闭scanner 关闭 IO流等。
* throw 主动抛出异常
* throws
* @param args
*/
public static void main(String[] args) {
int a = 1;
int b = 0;
try {
double c = a / b;
} catch (ArithmeticException e ) {
System.out.println(e.toString()); // java.lang.ArithmeticException: / by zero
} finally {
System.out.println("哦哦哦");
}
System.out.println("send over");
// ctrl alt T 自动生成代码块 if try 等
try {
if (b == 0) {
throw new ArithmeticException();
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
}
}
void testThrow() {
throw new ArithmeticException();
}
// 如果这个方法处理不了异常 可以给他跑出来
void testThrow2() throws Exception{
throw new ArithmeticException();
}
}