-
安装idea2021.2版本
-
选择试用30天
-
help/jvm设置
-
-javaagent:D:/IDEA/FineAgent.jar
-
重启选择 help/about 输入激活码
插件搜索Chinese 安装中文插件
快捷键
- main生成主函数
- sout输出语句
- Ctrl+alt+空格 代码补全
- 单行注释 Ctrl+/
- 多行注释 Ctrl+shift+/
- 格式化代码 ctrl+alt+L
- 自动生成对象接收参数 ctr+alt+v
- 给私有变量添加get/set方法 alt+insert
- 自动导包 alt+enter
- 配置JAVA_HOME
- 配置path
编写源文件.java =>>>> 使用java编译器(javac)进行编译 =>>>> 生成字节码文件.class =>>>> 使用java命令运行程序(不带.class后缀)
习题总结- java的主要贡献者是 James Gosling
- 一个java源文件可以有多个clas类
- 一个源文件中最多只能有一个public类(可以没有)
- java程序可以没有主类
- java程序中主类可以不是public类
- 源文件java必须和public class xxx 名字相同
- java的名字来自印度尼西亚的一个盛产咖啡的岛的名字
// 单行注释关键字的特点
关键字的字母全部小写
常量 数据类型取值范围
变量注意:
-
定义的变量必须赋值,否则无法使用
-
定义float和double类型时必须后缀带上 F或者L
定义规则:
-
由数字、字母、下划线、和美元符组成
-
不能以数字开头
-
不能是关键字
-
区分大小写
- 自动类型转换
- 强制类型转换
int a = (int)88.888输出
- 导包
import java.util.Scanner
- 创建对象
Scanner sc = new Scanner(System.in)
- 接收数据
int i = sc.nextInt数组
- 数组是一种存储多个相同类型数据的模型
定义格式
int[] arr int arr[]
动态初始化
int[] arr = new int[3]
初始化时会自动赋值
静态初始化
int[] arr = new int[]{1,2,3}
int[] arr = {1,2,3}
第三单元
运算相关
程序运行时会把所有变量提高到最高变量的类型,计算结果
10+13.14 //结果是double类型逻辑运算符
逻辑运算符(&)和短路运算符(&&)的区别
逻辑运算符执行时会执行全部
短路运算符执行时 遇到条件约束就停止执行
分支语句 if语句if(){
}else if(){
}else{
}
switch语句
switch(表达式){
case 1:
语句体;
break;
case 2:
语句体;
break;
default:
语句体;
[break]
}
循环语句
for语句
for(int i=0;i<5;i++){
}
while语句
int i=0;
while(i<5){
i++
}
do…while语句
int i = 0;
do{
i++
}while(i<5)
跳转控制语句
- break
终止循环;结束整个循环
- continue
跳过本轮循环,继续下一次循环
随机数- 导包
import java.util.Random
- 创建对象
Random r = new Random()
- 获取随机数
int number = r.nextInt(10) //获取数据范围[0,10)第四单元 方法
**注意事项 **
-
方法必须有返回类型
-
方法不可嵌套定义
-
方法可以直接在同一个类中定义
//方法格式
static void test(int a,int b){
if(a>b){
System.out.println(a);
}else{
System.out.println(b);
}
}
方法重载
- 方法重载与方法名和参数有关(需要定义在同一个类)
方法的传递问题
- 基本类型 调用时传入的形参会自动创建空间,不影响原值
//比如 答案是1
int a = 1;
change(a);
syso(a);
change(int a){
a=100
}
- 引用类型 传入引用数据类型比如数组 传递的是数组地址而不是创建新数组,会修改到原值
类:class demo{} demo类
对象:demo a = new demo() a是new demo出来的对象
成员变量有默认值,局部变量没有
封装 private- 直接通过 object.class 修改属性很不安全
- 这是一个修饰符 可以修饰成员变量和成员方法 作用是保护成员不被别的类使用
- 被修饰的成员只有本类中可以访问
- 想要修改被修饰的成员变量需要提供方法
get变量名() 方法用public修饰 set变量名(参数) 方法用public修饰
private int age = 18; //修饰
public int getAge() { //提供get和set方法
return age;
}
public void setAge(int age) {
this.age = age;
}
a.setAge(19); //通过这种方式获取和修改
System.out.println(a.getAge());
this
- 当成员变量和局部变量名字重复时 想要指向成员变量 必须this.
- 创建对象时 new 类名 会自动调用对象的构造方法
- 构造方法 必须是和类同名的方法
- 构造方法默认都会有
- 构造方法没有 类型
- 构造方法 也是方法 可以重载
- 包其实就是文件夹
- 作用是对类进行分类管理
- 建包格式 package 包名
- 不导包的话需要从src根目录写方法 很麻烦
cn.itcast.cy t()
- 导包的话
import cn.itcast.cy cy a = new cy()修饰符 权限修饰符 状态修饰符 final
-
final 是最终态 是常量 不可修改 不可重写 不能继承
-
final修饰基本类型的时候 会变成常量 没问题
-
final修饰引用类型时 比如 final Cy a = cy() 他修饰的是一个地址a 地址不会改变的,修改引用地址里的内容是可以修改的
-
static修饰的变量可以共享空间 其他空间里修改了也不会还原
-
修饰后需要用全名赋值 Student.a=xxx (建议) 也可以用类直接访问
-
静态方法可以访问静态和非静态的内容
-
静态的成员方法只能访问静态的东西
子类与继承
继承 extends- 继承是面向对象的三大特征之一
- 可以使子类具有父类的属性和方法
- 还可以在子类中重新定义,追加属性和方法
- java中不能同时继承多个 但是可以多层继承
- public class 子类 extends 父类{}
- 子类可以有父类的内容
- 子类还可以有自己特有的内容
优点
- 提高了代码的复用性
- 提高的代码的维护性
缺点
- 当父类变化时 子类也会跟着变化 缺乏独立性
- zi 继承 fu有了age
class fu {
public int age = 28;
}
class zi extends fu{
public String name = "张三";
}
public class cy {
public static void main(String[] args) {
zi a = new zi();
//zi继承了fu 有了age
System.out.println(a.age+a.name);
//28张三
}
}
- 继承中子类有就用子类的方法
class fu {
public int age = 28;
}
class zi extends fu{
public int age = 18;
public String name = "张三";
}
public class cy {
public static void main(String[] args) {
zi a = new zi();
//zi继承了fu 但是本身有了age
System.out.println(a.age+a.name);
//18张三
}
}
super
-
代码运行机制中可以 知道优先访问顺序
-
先访问局部变量 后访问子类 最后访问父类
-
输出局部变量 打印变量名就行
-
输出子类中的变量 this.变量名字就好
-
输出父类中的变量 super.变量名就好
-
还可以访问构造函数
-
this()
-
super()
所有子类的构造方法都会默认访问父类的无参构造方法
- 因为子类继承父类后可能会用到父类的东西 所以第一时间要把父类初始化完成
- 故 默认第一条语句都会super()
- 可以修改默认的第一条语句 不调用默认无参构造方法
- 如果因为父类没有无参构造方法 建议自己给出无参构造方法
- 子类可以重写父类的方法
- 子类不能重写父类的私有方法
- 子类重写父类方法时必须访问权限大于等于才行
@Override
- 这是一个注解
- 可以帮助检查重写方法声明的正确性
同一个对象在不同时刻表现出来的不同形态
比如:猫 a = new 猫()
动物 b = new 猫()
多态的前提:
- 有继承/实现关系
- 有方法重写
- 有父类引用指向子类对象
注意事项
一句话总结就是 编译规则看左边 运行结果看右边
虽然new的是子类 但是实际上左边接受的是父类 所以书写的一直都是左边父类的东西
如果书写没问题 则会输出子类重写的内容
巧妙的使用方法
父类动物 子类猫和狗继承动物
demo (动物){
//传入的是猫或者狗 没问题
}
优点
提高程序的拓展性
缺点
不能调用具体的子类方法
多态的转型向上转型 父 a = new 子()
向下转型 接着上面写
子 b = (子)a
类似于强转 之后就能操作子类特有的东西了
抽象类 abstract-
一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须是抽象类
-
类和方法都要是抽象的才行
-
抽象类中也可以有不抽象的方法
-
抽象类不能直接创建对象 想要创建对象怎么办呢?
-
新建一个类继承抽象类 并重写抽象的方法 使用多态方式上转型创建对象
-
继承抽象类的子类 要么重写父类所有抽象方法 要么继承为一个抽象类
-
抽象类可以正常的有成员变量 +修饰
-
有构造方法但是不能实例化,作用是提供给子类访问父类初始化
-
可以有抽象方法限制子类必须完成某些动作 也可以有非抽象方法 提高代码复用性
- 接口就是一种公共的规范标准
- java中的接口更多体现在对行为的抽象
- 类和接口不能用继承 而是implements 实现 接口也是用多态的方法
public interface 接口名 {}
public class 类名 implements 接口名{}
- 接口中的变量默认全都final修饰了 都变成常量了
- 可以直接通过接口名.xx访问 说明默认static修饰的
- 接口没有构造方法
- 接口里必须都是抽象方法
- 默认根对象是object() 所以每一个类其实都继承了
- 接口里的方法默认有public abstract
实现关系,可以单实现,可以多实现,还可以继承同一个类的同时实现过个接口
接口和接口的关系继承关系,可以单继承,也可以多继承
抽象类和接口的区别 抽象类相关返回值-
方法的形参是抽象类名,其实需要的是该抽象类的子类对象
-
方法的返回值是抽象名,其实返回的是该抽象类的子类对象
内部类就是类的嵌套
特点:
-
内部类可以访问外部类的成员,包括私有
-
外部类要访问内部类的成员,必须创建对象
- 如果是私有修饰的内部类则无法这样调用
- 此时只能在类中再写一个类用来访问该内部类。new类后调用方法即可看到内部类
只能这样访问
匿名内部类 异常 有趣的代码- 反转数组
public static void main(String[] args) {
int[] a = {1, 5, 7, 8, 4, 6, 0, 2, 3};
int temp = 0;
for (int start = 0, end = a.length - 1; start <= end; start++, end--) {
temp = a[start];
a[start] = a[end];
a[end] = temp;
}
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
API
- 应用程序编程接口
Scanner a = new Scanner(System.in);
String b = a.nextLine(); //nextLine输入字符串
System.out.println(b);



