Java学习笔记——Java基础知识

java基础知识

打开CMD的方式

1.Win + R 输入cmd

2.Win + S 输入cmd

3.按住shift键 同时点击鼠标右键,打开powershell 窗口

常见的DOS命令

#盘符切换 D:
#查看目录下的所有文件 dir
#切换目录 cd   (charge directory)  同盘进入目录
	cd /d D:  实现跨盘跳转
    cd..      实现返回上一级目录
#清理屏幕  cls  (clear screen)
#退出终端  exit
#查看IP地址  ipconfig
#打开记事本  notepad
#打开计算机  calc
#打开画图    mspaint
#获取网站的iP地址  ping 
#鼠标右键可以直接将  剪切板的内容  复制到  cmd 窗口
#创建文件夹  md  test  //表示创建一个名为test的文件夹
#删除文件夹  rd  test  //表示删除一个名为test的文件夹
#创建文件  cd> a.txt   // 表示再当前目录下创建一个a.txt文件
#删除文件  del a.txt   //表示删除当前目录下的a.txt文件 

JDK,JRE,JVM

JDK : Java Development Kit

JRE : Java Runtime Environment

JVM : Java Virtual Machine

java架构
java架构

删除JDK

引用

  1. 删除java jdk 安装目录 ,可以到环境变量javahome中查看.
  2. 删除JJAVA _HOME 环境变量
  3. 删除PATH下有关于Java的环境变量
  4. 再DOS窗口中用 java -version 命令检查

java程序运行机制

java 兼具以下两种特性

  1. 编译型 如 C / C++ javac 将.java文件 -> 到.class文件 的过程是编译
  2. 解释型 如java javaScript

程序运行机制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9XZEk3Q-1648544074139)(C:\Users\86152\AppData\Roaming\Typora\typora-user-images\image-20220318202517483.png)]

标识符

javadoc

  1. 编写java 程序时可以使用/** */ 注释来书写Javadoc文档。
  2. 找到对应Java 源文件所在目录,打开cmd
  3. 在cmd中输入 javadoc -encoding UTF-8 -charset UTF-8 文件名.java 命令执行
  4. 之后会在目录中生成index.html网页文件,打开就是在个java文件所在的包的说明文档

java 数据类型

  1. 基本数据类型

    一共八大基本数据类型:int byte short long float bouble char bealen

  2. 引用数据类型

    一些类和一些构造器

Java选择结构

之前学过java 基础语法,我就记一些不牢的知识点

switch语句

从Java SE 7开始,java 支持 switch case 的字符串比较

string name = "微风"switch(name){//()中的表达式可以是字符串
	case "2001"case "微风"default}

java方法的可变传参

/*
当我们在写方法时,有时是不能确定要传什么参数,或是几个参数的
不知道要传的有几个同样类型的参数时,可以用以下方法:(类似于传一个数组
注意:一个方法最多只能有一个可变参数,并且要放在参数列表的最后面
*/
public static void main(String[] args){
    int[4] num = {1,3,4,56,6};
    test(num);
}
public static void test(int... i){//这里相当于传了一个int 类型的数组i
    println(i[0]);//输出传入方法的第一个参数
    println(i.length);//输出传入的参数的个数
}

基础数据结构

数组

//静态初始化 只声明  不赋值
//方法1
int[] nums = new int[10];//声明一个元素个数为10的数组
//方法2
int nums[10];
//方法3
int[] nums;//在栈中开辟空间存储,
nums = new int[10];//在堆中开一整块空间,用于存放10个int类型
int len = nums.length;//可以获取数组长度

//动态初始化  再声明的同时赋值
int[] nums = {1,2,3};

//默认初始化
//由于数组是一种引用类,其每一个元素都是类的实例变量,因此数组一经分配空间,就会按照示例变量的方式隐式初始化
//默认每个元素被初始化为零

面向对象思想:抽象

继承

IDEA中的两个快捷键:

ctrl + insert 可以自动构造,有参无参构造函数

ctrl + h 可以打开当前类的父子关系树状图

this(); 可以调用本类的构造函数

super() 可以调用父类的构造函数

调用构造子类的构造函数是回默认隐式地调用父类的无参构造函数,但是在实际运用中,一般是显式调用父类的有参构造函数

函数重写

函数重写对于静态和非静态函数有很大的区别

  1. 对于静态函数

    class A{
        public static void test(){
            System.out.println("A=>test()");
        }
    }
    
    class B extends A{
        public static void test(){
            System.out.println("B=>test()");
        }
    }
    
    class Application{
        public static void main(){
           	A a = new A();
            a.test();
            
            B b = new A();
            b.test();
            //输出为A=>test()   B=>test()
            //原因:static 方法在静态方法区中 a 和 b 调用的是类的方法
        }
    }
    
    
  2. 对于动态函数

    class B{
        public static void test(){
            System.out.println("A=>test()");
        }
    }
    
    class A extends B{
        public void test(){
            System.out.println("B=>test()");
        }
    }
    
    class Application{
        public  void main(){
           	A a = new A();
            a.test();
            
            B b = new A();//此时A类强制转换为B类,但是非静态方法test()已经被重写了.调用时仍然会调用子类A的方法
            b.test();
            //输出为A=>test()   A=>test()
            //原因: a 和 b 调用的是对象的方法
        }
    }
    
    
函数重写总结:
  1. 只用非静态方法才能重写成功,并且,子类重写父类的方法时,方法名 和 参数列表 要相同

  2. 修饰符范围可以扩大,但不能缩小,public > protected > default(缺省) > private

  3. 抛出的异常可以缩小,但是不能放大

多态

多态:同一方法可以根据发生对象的不同而产生不同的行为。

  1. preson s = new student(); 父类的引用指向子类,子类继承父类的全部方法
  2. 对象能执行哪些方法,看的是s 到底是哪个类型,父类虽然指向子类,但是不能调用子类的方法
  3. 转换 子类->父类 可以隐式地转,父类 -> 子类 需要显式的强制转换,而且要有父子关系的类之间才可以转换,要不然会抛出异常ClassCastException
  4. static 方法属于类,final 常量,在常量池中的 ,private
instanceof

System.out.println(Person instanceof Student) 可以判断Person 类与 Student 之间是否有父子关系

多态总结
  1. 父类指向子类的对象
  2. 把子类转换为父类,向上转型,会丢失一些方法和属性
  3. 把父类转为子类,向下转型,强制转换
  4. 方便方法的调用,减少代码的重复

static 关键字

static 修饰属性,修饰方法

class Student{
    private static int age;
    // 静态变量,在静态方法区中,又叫类变量,可以直接用类名调用Student.age
    //非静态方法和静态方法都可以直接访问静态方法
    // 因为静态方法在  类   加载的时候就会分配内存空间,被加载到静态方法区中
    //而静态方法不能直接调用非静态方法
    // 因为可能在调用非静态方法的时候,该方法还没有被加载,非静态方法是在对象被创建的时候分配内存空间的
    private double score;//静态变量
    public static void go(){
        System.out.println("go");
    }
    public void run(){
        System.out.println("run");
    }
}

静态代码块

public class Demo01 {
    public static void main(String[] args) {
        Student s = new Student();
    }

}

class Student{
    {
        System.out.println("匿名代码块");//第二执行,且每次创建对象时都会执行
    }

    static{
        System.out.println("静态代码块");//第一执行,且只执行一次
    }

    public Student() {
        System.out.println("构造方法");//第三执行,且每次创建对象时都会执行
    }
}

静态导入包

import static java.lang.Math.random;
import static java.lang.Math.PI;
public class Demo01 {
    public static void main(String[] args) {
        System.out.println(random());//原本是不能直接调用random()方法,要用Math.random()
        System.out.println(random());
        System.out.println(PI);
    }

}

abstract修饰字

public abstract class Action {
    //抽象类,可以有一些抽象方法,这些方法不用抽象类自己实现,一般由子类实现,除非子类也为抽象类
    public abstract void doSomething();//抽象方法没有方法体
}
  1. 抽象类不能 new 出来
  2. 抽象类中可以有正常的方法,但是抽象方法一定要存放在抽象类中
  3. 一般通过 extends 继承起作用

接口 interface

package Demo03;
//接口1
//接口中也可以定义属性
public static final int AGE;
public interface TimeService {
    void timer();
}

package Demo03;
//接口2
public interface UserService {
    public abstract void run();//接口中的方法默认是public abstract
    void add();
    void delete();
    void updata();
}

package Demo03;
//接口1,接口2的实现类
//注意:实现一个接口就要实现这个类的全部abstract 抽线方法
//而且一个文件中只能有一个public 类(包括正常类,抽象类)
//可以利用接口实现多继承
public class UserServiceImpl implements UserService,TimeService{
    @Override
    public void run() {

    }

    @Override
    public void timer() {

    }

    @Override
    public void add() {

    }

    @Override
    public void delete() {

    }

    @Override
    public void updata() {

    }
}

接口的作用

  1. 约束
  2. 定义一些方法,有不同的实现
  3. public abstract 定义抽象方法
  4. public static final 用于声明接口中的常量
  5. 接口不能被实例化,接口中没有构造方法
  6. implements 可以实现多个接口
  7. 要实现一个接口必须要实现接口中的所有方法

内部类

非静态内部类

package Demo04;

public class Outer {
    private int id = 10;
    private void out(){
        System.out.println("This is a external class method");
    }

    public class Inner{//定义一个内部类
        public void in(){
            System.out.println("This is a inner class method");
        }

        //通过内部类获取外部类中的私有属性
        public void GetID(){
            System.out.println(id);
        }
    }

}
package Demo04;

public class Application {
    public static void main(String[] args) {
        Outer outer = new Outer();
        //通过这个外部类来实例化内部类
        Outer.Inner inner = outer.new Inner();
        //确定对象类型   对象名  =  已实列化外部类.内部类构造方法
        inner.in();
        inner.GetID();
    }
}

静态内部类

package Demo04;

public class Outer {
    private int id = 10;
    private void out(){
        System.out.println("This is a external class method");
    }

    public static class Inner{//定义一个静态内部类,外部类被加载时就会被加载
        public void in(){
            System.out.println("This is a inner class method");
        }
		
        //不能通过内部类获取外部类中的私有属性
        //public void GetID(){
        //    System.out.println(id);
        //}
    }

}

局部内部类

package Demo04;

public class Outer {
    private int id = 10;
    private void out(){
        class Inner{
            //局部内部类
        }
        System.out.println("This is a external class method");
    }
    
}

匿名内部类

public class HelloWorldAnonymousClasses {

    /*
    包含两个方法的HelloWorld接口
    */
    interface HelloWorld {
        public void greet();
        public void greetSomeone(String someone);
    }
     public void sayHello() {
         // 2、匿名类实现HelloWorld接口
         HelloWorld frenchGreeting = new HelloWorld() {
             String name = "tout le monde";
             public void greet() {
                 greetSomeone("tout le monde");
             }
             public void greetSomeone(String someone) {
                 name = someone;
                 System.out.println("Salut " + name);
             }
         };
     }
    
    
}

异常(Exception)

java 会把error 和 exception 当成一种对象来处理

Exception 与 error 的区别:

error是灾难性的致命的的错误,是程序无法控制和处理的,当error 产生式是,java的虚拟机(JVM)会直接选择终止线程。

Exception 通常情况下是可以被程序处理的,并且在程序中要尽可能地处理这些异常。

异常捕获

try catch finally 语法来捕获异常

package Demo05;

public class test01 {
    public static void main(String[] args) {
        try {//用try 捕获异常后程序不会停止,会继续向下运行
            new test01().test(1,0);
        }catch (ArithmeticException e){
            e.printStackTrace();
        }
    }

    public void test (int a,int b) throws ArithmeticException{
        if(b == 0){
            throw new ArithmeticException();
        }
    }
}

Tips :IDEA 快捷键 ctrl + alt + t 可以快速生成一些代码,将选中地代码直接包裹住。

e.preintStackTrace() 可以打印异常

可以用 throw Exception 主动在方法里抛出一些异常

package Demo05;

public class test01 {
    public static void main(String[] args) {
        new test01().test(1,0);
    }
    
    public void test(int a,int b){
        if(b == 0){//可以用 `throw Exception`  主动在方法 里 抛出一些异常 
            throw new ArithmeticException();
        }
    }
}

可以用 throws Exception 主动在方法上抛出一些异常

package Demo05;

public class test01 {
    public static void main(String[] args) {
        new test01().test(1,0);
    }
    
    public void test (int a,int b) throws ArithmeticException{
        if(b == 0){//可以用 `throw Exception`  主动在方法 里 抛出一些异常 
            throw new ArithmeticException();
        }
    }
}

自定义异常

  1. 自己写一个自定义类,继承Exception

    package Demo06;
    
    public class MyExcetion extends Exception{
        private int detail;
    
        public  MyExcetion(int a){
            this.detail = a;
        }
    
        @Override
        public String toString() {//打印异常信息时,会自动调用该方法
            return "MyExcetion{" +
                    "detail=" + detail +
                    '}';
        }
    }
    
  2. 假设一个会抛出异常的方法

  3. try catch 语句包裹住可能抛出异常的方法

    public class test {
        public static void main(String[] args) {
            try{
                test(11);
            } catch (MyExcetion e) {
                System.out.println("MyException=>" + e);//会调用toString()方法
            }
        }
        static void test(int a) throws MyExcetion {
            if(a > 10){
                throw new MyExcetion(a);
            }
            else{
                System.out.println("Ok");
            }
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值