Java学习

参照视频[狂神说java]([狂神说Java]Java零基础学习视频通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili)

标识符注意点

  1. 不能使用关键字作为变量名
  2. 标识符对大小写敏感
public class Demo02 {
    public static void main(String[] args) {
        String a = "hello";
        int num = 10;
        long num4 = 30L;//Long类型要在数字后面加个L

        //小数:浮点数
        float num5 = 50.1F;
        double num6 = 3.1415926;

        //字符
        char name = 'Q';
        //字符串,String不是关键字,类
        String namea ="秦将";

        //布尔值
        boolean num7 = false;
        System.out.println(a);

    }
}

数据类型

  1. Java是强类型语言

    Java的数据类型

    • 基本类型(primitive type) 整数类型、浮点类型、字符类型char(占2个字节)、boolen类型。short 2字节
    • 引用类型(reference type):类、接口、数组
    public class Demo3 {
        public static void main(String[] args) {
            //整数拓展:     进制         二进制0b    八进制0        十六进制0x
            int i = 10;
            int i2 = 010;//八进制
            int i3 = 0x10;//十六进制0x  0~9 A~F
    
            System.out.println(i);
            System.out.println(i2);
            System.out.println(i3);
            System.out.println("==========");
    
            //=================================================
            //浮点数拓展?  银行业务怎么表示? 钱
            //BigDecimal    数学工具类
            //float 有限 离散  舍入误差     大约      接近但不等于
            //double
            //最好完全不用浮点数进行比较
    
            float f =0.1f;
            double d = 1.0/10;
            System.out.println(f==d);
    
            float d1 = 231231231231231231232131f;
            float d2 = d1 + 1;
            System.out.println(d1==d2);
            char c1 = 'a';
            char c2 = '中';
    
            System.out.println(c1);
            System.out.println((int)c1);
            System.out.println(c2);
            System.out.println((int)c2);
    
            //所有的字符本质还是数字
            //编码 Unicode 表:(97 = a 65 =A) 2字节    0 - 65535  Excel 2 16 = 65536
            //U0000 UFFFF
            char c3 = '\u0061';
            System.out.println(c3); //a
    
            //转义字符
            //\t    制表符
            //\n    换行
            System.out.println("Hello\tWorld");
            System.out.println("Hello\nWorld");
    
            System.out.println("======================================");
            String sa = new String("hello world");
            String sb = new String( "hello world");
            System.out.println(sa==sb);
    
            String sc = "hello world";
            String sd = "hello world";
            System.out.println(sc==sd);
    
            //对象    从内存分析
            //布尔值扩展
            boolean flag = true;
            if(flag==true) { }
        }
    }
    
    

    类型转换

    • 低--------------------------------------->高
    • byte,short,char-> int -> long-> float -> double
public class Demo5 {
    public static void main(String[] args) {
        int i = 128;
        byte b = (byte)i; //溢出
        //强制转换   (类型)变量名   高--低
        //自动转换      低--高

        System.out.println(i);
        System.out.println(b);
        /*
        注意点:
        1.不能对布尔值进行转换
        2.不能把对象类型转换为不相干类型
        3.精度问题
        4.高--低
         */
        System.out.println("=================");
        System.out.println((int)23.7);
        System.out.println((int)-45.89f);

        System.out.println("=========");
        //JDK7新特性,数字之间可以用下划线分割
        int money = 10_0000_0000;
        int years = 20;
        int total = money*years;
        long  total2 = money*years;
        long total3 = money*((long)years);
        System.out.println(total3);
    }
}

变量

  • 类变量
  • 实例变量
  • 局部变量
public class Demo08 {
    //类变量   static
    static double salary = 2500;
    //属性:变量
    //实例变量:从属于对象;如果不进行初始化,这个类型的默认值 0 0.0
    //布尔值:默认是false
    //除了基本类型,其余的默认值都是null;
    String name;
    int age;
    //main 方法
    public static void main(String[] args) {
        //局部变量;必须声明和初始化
        int i = 10;
        System.out.println(i);
        //变量类型      变量名字 = new Demo08();
        Demo08 demo08 = new Demo08();
        System.out.println(demo08.age);
        System.out.println(demo08.name);

        //类变量 static
        System.out.println(salary);


    }
}

常量

  1. final 变量

变量的命名规范

  1. 所有变量、方法、类名:见名知意;
  2. 类成员变量:首字母小写和驼峰原则:monthSalary;
  3. 局部变量:首字母小写和驼峰原则;
  4. 常量:大写字母和下划线:MAX_VALUE;
  5. 类名:首字母大写和驼峰原则:Man,GoodMan;
  6. 方法名:首字母小写和驼峰原则:run(),runRun();

运算符

package operator;

public class Demo03 {
    public static void main(String[] args) {
        //幂运算 2^3    2*2*2 = 8
        double pow = Math.pow(2,3);
        System.out.println(pow);
    }
}
package operator;

public class Demo03 {
    public static void main(String[] args) {
        //幂运算 2^3    2*2*2 = 8
        double pow = Math.pow(2,3);
        System.out.println(pow);

        //与         或       非
        boolean a =true;
        boolean b =false;

        System.out.println("a && b: "+(a&&b));
        System.out.println("a || b:"+(a||b));
        System.out.println("!(a&&b):"+!(a&&b));

        //短路运算
        int c =5;
        boolean d = (c<4)&&(c++<4);
        System.out.println(d);
        System.out.println(c);

        //三元运算符
        int a1 = 10;
        int b1 = 20;

        a1+=b1; //a = a+b
        a1-=b1; //a = a-b
        System.out.println(a1);
        //字符串连接符   +  ,String
        System.out.println(""+a1+b1);
        System.out.println(a1+b1+"");
        System.out.println(""+(a1+b1));
        //三目运算
        //x ? y : z
        int score = 80;
        String type = score <60 ?"不及格":"及格";
        System.out.println(type);
    }
}

包机制

  1. 包的本质是文件夹,一般利用公司域名倒置作为包名com.kuangstudy.blog

  2. 为了能够使用某一包的成员,需要在Java程序中明确导入该包。使用"import"语句可完成此功能。

    package com.kuang.operator;
    import java.util.Date;
    import com.kuang.base.*;
    

    package放在import前面

JavaDoc

  • javadoc命令是用来生成自己API文档

    参数信息

Java流程控制

用户交互scanner

Scanner s = new Scanner(System.in);
package com.kuang.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())
        {
            //使用next方式接收
            String str = scanner.next();
            System.out.println("输出的内容为: "+str);
        }
        //凡属IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉
        scanner.close();
    }
}

package com.kuang.scanner;

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine方式接收: ");
        //判断用户有没有输入字符串
        if(scanner.hasNextLine())
        {
            //使用next方式接收
            String str = scanner.nextLine();
            System.out.println("输出的内容为: "+str);
        }
        //凡属IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉
        scanner.close();
    }
}

package com.kuang.scanner;

import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        //输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
        Scanner scanner = new Scanner(System.in);
        //和
        double sum = 0;
        int m =0;
        while(scanner.hasNextDouble())
        {
            double x = scanner.nextDouble();
            m++;
            sum = sum +x;
        }
        System.out.println(m+ "个数的和为"+sum);
        scanner.close();
    }
}
  1. switch语句中的变量类型可以是:byte、short、int、char。
  2. 从Java SE 7开始 switch支持String类型

for(初始化; 布尔表达式;更新)

九九乘法表

package com.kuang.scanner;

public class Demo06 {
    public static void main(String[] args) {
        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {
                System.out.print(i+"*"+j+"="+(j*i)+"\t");
            }
            System.out.println();
        }

    }
}

增强型for循环

  1. java5引入

  2. for(声明语句:表达式)
    {
    
    }
    
package com.kuang.scanner;

public class Demo06 {
    public static void main(String[] args) {
            int[] numbers = {10,20,30,40,50};

             //遍历数组的元素
        for(int x:numbers)
        {
            System.out.println(x);
        }
    }
}

方法

  1. 一个方法只完成1个功能,有利于后期的扩展。

  2. 方法的定义

    修饰符  返回值  方法名(参数类型 参数)
    {
       ...
       方法体
       ...
       return 返回值;
    }
    
  3. 方法的重载

    • 方法名称相同

    • 方法的参数必须有不同

    • 返回类型不足以作为重载的区分

  4. 命令行传参

    • 程序运行时传递参数,
package method;

public class Demo02 {
    public static void main(String[] args) {
        //args.length 数组长度
        for(int i =0;i<args.length;i++)
        {
            System.out.println("args["+i+"]:"+args[i]);
        }
    }
}
  1. 可变参数

    JDK 1.5开始

    • 在方法声明中,在指定参数类型后加一个省略号
    • 一个方法只能指定一个可变参数,它必须是方法的最后一个参数。
    package method;
    
    public class Demo03 {
        public static void main(String[] args) {
            Demo03 demo03 = new Demo03();
            demo03.test(1,2,3,4,5,6,7,8,1,1,1,1,1,1,1,1,1,1,1,1);
            printMax(34,3,3,5,56.6);
            printMax(new double[]{1,2,3});
        }
        public void test(int x,int... i)
        {
            System.out.println(i[10]);
        }
    
        public static void printMax(double... numbers){
            if(numbers.length==0){
                System.out.println("No argument passed");
                return;
            }
    
            double result = numbers[0];
    
            //
            for(int i = 1;i< numbers.length;i++){
                if(numbers[i] > result){
                    result = numbers[i];
                }
            }
            System.out.println("The max value is "+ result);
        }
    }
    
  2. 递归

数组

  1. 数组定义

    package method;
    
    public class ArrayDemo01 {
        public static void main(String[] args) {
            int[] nums;//声明一个数组
            nums = new int[10];// 创建一个数组
            for(int i = 0;i<nums.length;i++)
            {
                nums[i] = i+1;
            }
        }
    }
    
  2. 内存分析

    • 声明数组 int[] array = null; 在栈中有一个名字 int array[] = null;
    • 创建数组 array = new int[10];在堆中开辟区间
  3. 数组的特点

    • 数组一旦被创建,其大小不可改变
    • Java中对象是在堆中的,数组可以看成是对象
    • ArrayIndexOutOfBoundsException, 数组下标越界
  4. 数组的使用

    • package method;
      
      public class ArrayDemo02 {
          public static void main(String[] args) {
              int[] arrays = {1,2,3,4,5};
              int sum = 0;
              for(int i = 0;i < arrays.length;i++)
              {
                  sum = sum + arrays[i];
              }
              System.out.println("sum:"+sum);
              for(int array:arrays)
              {
                  System.out.println(array);
              }
      
              int[] reverse = reverse(arrays);
              printArray(reverse);
          }
      
          //反转数组
          public static int[] reverse(int[] arrays){
              int result[] = new int[arrays.length];
              for(int i = 0;i<arrays.length;i++){
                  result[i] = arrays[arrays.length-1-i];
              }
              return result;
          }
      
          //打印数组
          public static void printArray(int[] arrays){
              for(int i = 0; i < arrays.length; i++)
              {
                  System.out.print("arrys["+i+"]:"+arrays[i]+"\t");
              }
              System.out.println();
          }
      }
      
      int[][] array = {{1,2},{2,3},{3,4},{4,5}};
      
      for(int i = 0; i<array.length;i++){
          for(int j = 0; j<array[i].length;j++)
          {
              System.out.println(array[i][j]);
          }
      }
      
  5. Arrays具有常用功能:给数组赋值通过fill,对数组排序通过sort,比较数组通过equals方法比较数组中元素是否相等,查找数组元素通过binarySearch方法对排序好的数组进行二分查找法操作。

    • int[] a = {1,2,3,4,6,454,234};
      System.out.println(Arrays.toString(a));
      //输出 [1, 2, 3, 4, 6, 454, 234]
      Arrays.sort(a);
      System.out.println(Arrays.toString(a));
      
  6. 稀疏数组

面向对象编程

  1. 以类的方式组织代码,以对象的组织(封装)数据

  2. 三大特性:封装、继承、多态

  3. String在Java中属于类,不是关键字

  4. 构造方法必须与类名相同,必须没有返回值

    package oop;
    
    //学生类
    public class Student {
        //属性:字段
        String name;
        int age;
        //1.使用new关键字,本质是在调用构造器
        public Student() {
            this.name = "xingk";
        }
        //一旦定义有参构造,无参构造器必须显示定义
        public Student(String name) {
            this.name = name;
        }
        //方法
        public void study(){
            System.out.println("在学习");
        }
    }
    
  5. 封装:高内聚,低耦合。属性私有get,set。

    package oop;
    
    //学生类
    public class Student {
        //属性:字段
        private String name;
        private int age;
        //1.使用new关键字,本质是在调用构造器
        public Student() {
            this.name = "xingk";
        }
        //一旦定义有参构造,无参构造器必须显示定义
        public Student(String name) {
            this.name = name;
        }
        //方法
        public void study(){
            System.out.println("在学习");
        }
        public String getName(){
            return this.name;
        }
    
        public void setName(String name){
            this.name = name;
        }
    }
    
  6. 继承:Java中类只有单继承,没有多继承。

    • Java中类都继承了object类
  7. super注意点:

    1. super调用父类的构造方法,必须在构造方法的第一个

    2. super必须只能出现在子类的方法或者构造方法中

    3. super和this不能同时调用构造方法

    4. this();本类的构造

    5. super();父类的构造

      package method;
      
      //基类
      public class Person{
          protected String name = "kuangshen";
      }
      ======================================================
      package oop;
      import method.Person;
      
      //学生类,派生类
      public class Student extends Person {
          private String name = "qinjiang";
          public void print(){
              System.out.println(this.name);
              System.out.println(super.name);
          }
      }
      =============================================================
      package oop;
      
      public class Application {
          public static void main(String[] args) {
      
              /*
              3.对应的引用
                  引用类型:   基本类型(8)
                  对象是通过引用来调用的栈---->堆
              4.属性:字段Filed 成员变量
                  默认初始化:
                  数字:     0   0.0
                  char:       u0000
                  boolean:     false
                  引用:     null
               */
              Student xiaoming = new Student();
              xiaoming.print();
          }
      }
      ====================
      输出
      qinjiang
      kuangshen
      
  8. 方法重写需要有继承关系,子类重写父类的方法

    1. 方法名必须相同

    2. 参数列表列表必须相同

    3. 修饰符:范围可以扩大但不能缩小:public>protected>default>private

    4. 抛出的异常:范围可以被缩小,但不能扩大;ClassNotFoundException–>Exception(大)

    5. Alt+Insert: override

      package method;
      
      //基类
      public class Person{
          protected String name = "kuangshen";
          public void test()
          {
              System.out.println("Person=>test()");
          }
          public static void test1()
          {
              System.out.println("Person=>test1()");
          }
      }
      =======================================================
      package oop;
      import method.Person;
      
      //学生类,派生类
      public class Student extends Person {
          private String name = "qinjiang";
          public void print(){
              System.out.println(this.name);
              System.out.println(super.name);
          }
          public void test()
          {
              System.out.println("Student=>test()");
          }
          public static void test1()
          {
              System.out.println("Student=>test1()");
          }
      }
      ============================================================
      package oop;
      
      import method.Person;
      
      public class Application {
          public static void main(String[] args) {
      
              /*
              3.对应的引用
                  引用类型:   基本类型(8)
                  对象是通过引用来调用的栈---->堆
              4.属性:字段Filed 成员变量
                  默认初始化:
                  数字:     0   0.0
                  char:       u0000
                  boolean:     false
                  引用:     null
               */
              //静态方法是类的方法,非静态方法是对象的方法 ,new创建对象
              Student A = new Student();
              Person B = new Student();
              A.test();
              B.test();
              A.test1();
              B.test1();
          }
      }
      ========================================================
      输出
      Student=>test()
      Student=>test()
      Student=>test1()
      Person=>test1()
      
  9. 多态

  10. instanceof 判断对象是否是类的实例

    package oop;
    
    import method.Person;
    
    public class Application {
        public static void main(String[] args) {
            Person  s1 = new Student();
            System.out.println(s1 instanceof Student);
            ((Student)s1).print();
        }
    }
    
  11. static关键字,final修饰的类不能被继承了。

    package method;
    //静态导入包
    import static java.lang.Math.random;
    public class Student1 {
        private static int age;//静态的变量      多线程!
        private double score; //非静态的变量
        {
            System.out.println("匿名代码块");
        }
        static{ //只运行一次
            System.out.println("静态代码块");
        }
    
        public Student1(){
            System.out.println("构造方法");
        }
    
        public static void main(String[] args) {
            Student1 person = new Student1();
            Student1 person1 = new Student1();
            System.out.println(random());
        }
    }
    ========================================================
    输出
    静态代码块
    匿名代码块
    构造方法
    匿名代码块
    构造方法
    0.8565026626018188
    
  12. 抽象类,abstract修饰符

    package oop;
    //abstract 抽象类
    public abstract class Demo02 {
        //约束,继承子类实现
        //abstract ,抽象方法,只有方法名字,没有方法的实现!
        public abstract void doSomething();
        //1.不能new这个抽象类,只能靠子类去实现它;约束!
        //抽象类可以写普通的方法
        //抽象方法必须在抽象类中
    }
    
  13. 接口

    • 普通类具体实现

    • 具体实现和规范(抽象方法)都有!

    • 接口:只有规范!自己无法写方法~专业的约束!约束和实现分离:面向接口编程

    • 关键字 interface

      • 作用:1.约束,2,定义一些方法,让不同的人实现,3.public abstract 4.public static final, 5. 接口不可以被实例化,接口中没有构造方法

      • implements 可以实现多个接口

      • 必须重写接口中的方法

        package oop;
        //interface 定义的关键字,接口都需要实现
        public interface UserService{
            //接口中的所有定义其实都是抽象的public abstract
            //常量 public static final
            int AGE = 99;
        
            void add(String name);
            void delete(String name);
            void update(String name);
            void  query(String name);
        }
        
        =================================================
        package oop;
        
        public class UserServiceImp1 implements UserService,TimeService {
            @Override
            public void add(String name) {
        
            }
        
            @Override
            public void delete(String name) {
        
            }
        
            @Override
            public void update(String name) {
        
            }
        
            @Override
            public void query(String name) {
        
            }
        }
        ===============================================
        package oop;
        
        public interface TimeService {
        }
        
        
  14. 内部类

    package oop;
    
    public class Outer {
        private int id = 10;
        public void out(){
            System.out.println("这是外部类方法");
        }
    
        public class Inner{
            public void in(){
                System.out.println("这是内部类的方法");
            }
    
            //获得外部类的私有属性
            public void getID(){
                System.out.println(id);
            }
        }
        
    }
    ===============================================================
    package oop;
    
    import method.Person;
    
    public class Application {
        public static void main(String[] args) {
           Outer outer = new Outer();
           //通过这个外部类来实例化内部类
            Outer.Inner inner = outer.new Inner();
            inner.in();
            inner.getID();
        }
    }
    ====================================================
    package oop;
    
    public class Test {
        public static void main(String[] args) {
            //没有名字初始化类,不用将实例保持到变量中
            new Apple().eat();
            UserService1 userService = new UserService1() {
                @Override
                public void hello() {
    
                }
            }
        }
    }
    
    class Apple{
        public void eat(){
            System.out.println("1");
        }
    }
    
    interface UserService1{
        void hello();
    }
    

异常机制

  • 检查性异常

  • 运行时异常

  • 错误ERROR

  • Java把异常当作对象处理,并定义一个基类java.lang.Throwable作为所有异常的超类

  • 处理异常的机制,抛出异常,捕获异常。异常处理的五个关键字

    • try、catch、finally、throw、throws
  • 选中代码 按Ctrl+Alt+t进行代码段包裹选择如异常,if 等

    package com.kuang.exception;
    
    public class Test {
        public static void main(String[] args) {
            int a = 1;
            int b = 0;
            try {
                new Test().test1(1,0);
                new Test().test1(1,2);
            } catch (ArithmeticException e) {
                System.out.println("hahaha");
            }
    
            try{ //try监控区域
                System.out.println(a/b);
            }catch(ArithmeticException e){ //catch(想要捕获异常的类型)捕获异常
                System.out.println("程序出现异常,变量b不能为0");
            }catch(Throwable e){
                System.out.println("Throwable");
            }finally{//处理善后工作
                System.out.println("finally");
            }
        }
    
        //假设在方法中,处理不了这个异常,方法上抛出异常
        public  void test1(int a,int b) throws ArithmeticException{
            if(b == 2){
                throw new ArithmeticException();//主动抛出异常,一般在方法中使用
            }
            System.out.println(a/b);
        }
    }
    
  • 自定义异常

    package com.kuang.exception;
    
    public class MyException extends Exception {
        //传递数字>10
        private int detail;
    
        public MyException(int a) {
            this.detail = a;
        }
        //toString:异常的打印信息
    
        @Override
        public String toString() {
            return "MyException{" +
                    "detail=@@@@@" + detail +
                    '}';
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值