栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java学习笔记 一

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java学习笔记 一

IDEA使用 安装
  • 安装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
第一单元 jdk与jre、jvm的关系

jdk文件目录说明

常用的dos命令

配置环境变量
  • 配置JAVA_HOME

  • 配置path

java程序的运行流程

编写源文件.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
  • 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
  • 一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须是抽象类

  • 类和方法都要是抽象的才行

  • 抽象类中也可以有不抽象的方法

  • 抽象类不能直接创建对象 想要创建对象怎么办呢?

  • 新建一个类继承抽象类 并重写抽象的方法 使用多态方式上转型创建对象

  • 继承抽象类的子类 要么重写父类所有抽象方法 要么继承为一个抽象类

  • 抽象类可以正常的有成员变量 +修饰

  • 有构造方法但是不能实例化,作用是提供给子类访问父类初始化

  • 可以有抽象方法限制子类必须完成某些动作 也可以有非抽象方法 提高代码复用性

第六单元 接口 interface
  • 接口就是一种公共的规范标准
  • 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);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/924263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号