Java入门

导读:本篇文章讲解 Java入门,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

基本的DOS命令

#切换盘符
#查看当前目录下的所有文件夹
dir
#切换目录
cd
#清理屏幕
cls
#退出终端
exit
#查看电脑的ip
ipconfig
#打开应用
calc
mspaint
notepad
#ping 命令
ping www.baidu.com
# 文件操作
md 新建目录
rd 删除目录
del 删除文件
cd> 新建文件

Java的特点和优势

  • 简单性
  • 面向对象
  • 可移植性
  • 高性能
  • 分布式
  • 动态性
  • 多线程
  • 安全性
  • 健壮性

Java简介和环境安装

Java三大版本

  • JavaSE 标准版(桌面程序、控制台开发…)
  • JavaME 嵌入式开发(手机、小家电…)
  • javaEE E级企业开发(web端、服务器开发)

JDK 、JRE、JVM

在这里插入图片描述

环境安装

  1. 安装JDK

  2. 配置环境变量

    • 环境变量 JAVA_HOME
    • Path %JAVA_HOME%\bin %JAVA_HOME%\jre\bin
  3. 了解JDK的目录

Java的运行机制

在这里插入图片描述

java 基础

注释

  • 单行注释
  • 多行注释
  • javaDoc 文档注释

标识符和关键字

数据类型

在这里插入图片描述

C中char占一个字节

拓展

  • 整数拓展
 		// 进制  二进制0b   十进制     八进制0    十六进制0x
        int i0=0b11;//二进制
        int i1=10;//十进制
        int i2=010;//八进制
        int i3=0x10;//十六进制
        
  • 浮点数拓展
 		//float  有限 离散  舍入误差 大约 接近但是不等于
        //double
        // 银行中钱不用浮点数表示 而是用BigDecimal 数学工具类
        //避免使用浮点数进行比较
        float f=0.1f;
        double d=1.0/1;
        System.out.println(f==d);//false
        float f1=91999199100000000000000000000f;
        float f2=f1+1;
        System.out.println(f1==f2);//true
  • 字符型拓展
 		char c='A';
        System.out.println(c);
        System.out.println((int)c);
        //所有字符的本质还是数字
        //编码    Unicode     2个字节    65536
        char c1='\u0061';
        System.out.println(c1);
        //转义字符 \t
        //字符串的比较
        String sa=new String("hello world");
        String sb=new String("hello world");
        System.out.println(sa==sb);//false
		//对象 内存
        String sc="hello";
        String sd="hello";
        System.out.println(sc==sd);//true

String类两种实例化的区别

  • 直接赋值:只会开辟一块内存空间,并且会自动保存在对象池中,以供下次使用
  • 构造方法:会开辟两块内存空间,其中有一块空间将会称为垃圾,并且不会自动入池,但是用户可以使用intern()手动入池

字符串一旦定义则不可改变

String str="hello";
str+="!!!"

字符串的内容实际上没有发生改变,而对于字符串内容的改变,是利用引用关系的变化而实现的,但是每一次的改变都会产生垃圾空间,因此String的内容不要过多频繁地修改。

类型转换

低——–>高

byte,short,char->int->long->float->long

  • 强制转换(从高到低)
  • 自动转换(从低到高)

注意点

  • 不能对布尔值进行转换

  • 不能把类型转换为不相干的类型

  • 高容量转换为低容量时可能会出现内存溢出或者精度 问题

     int year =10;
           int money=20_0000_0000;
           int total=year*money;
           long total1=year*money;
           long total2=year*(long)money;
            System.out.println(total);
            System.out.println(total1);
            System.out.println(total2);//-1474836480 -1474836480  20000000000
    

变量 常量

变量

  • 类变量

    独立于方法之外的变量 用static修饰

  • 实例变量

    独立于方法之外的变量 不用static修饰

    如果不初始化会有默认值 0 (整数)0.0(浮点数) u0000(字符) false(boolean) null(对象)

  • 局部变量

    类方法中的变量

    局部变量必须声明和初始化

常量

final

基本运算符

运算符优先级

优先级(共14级)

注意点

运算结果的数据类型为参与运算的变量中最高优先级的变量的类型

long a=1111111111111111L;
int b=123;
short c=10;
byte d=8;
System.out.println(a+b+c+d);//Long
System.out.println(b+c);//int 
System.out.println(c+d);//int 
  • instanceof 二元运算符 判断左边的对象是否为右边类的实例 返回值为布尔型
  • 自增自减运算符
  • Math数学工具类
  • 逻辑运算符 短路运算
  • 无符号右移运算符
  • 字符串连接符 +
int a=12;
        int b=23;
        System.out.println(a+b+"");//35
        System.out.println(""+a+b);//1223

包机制

JavaDoc

javadoc 是用来生成自己的API文档

参数信息:

  • @author 作者名
  • @version 版本号
  • @since 指明需要最早使用的jdk版本
  • @param 参数名
  • @return返回值
  • @throws 异常抛出情况

生成方式

  • 使用命令行

    javadoc -encoding UTF-8 -charset UTF-8 Demo3.java

  • 使用idea生成

报错

Error decoding percent encoded characters

原因:原因是classpath中含有含有字符%

CLASSPATH

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; %CATALINA_HOME%\lib\servlet-api.jar;

解决:删除classpath classpath是给jdk1.4及以上jvm用的

在这里插入图片描述

java 流程控制

用户交互Scanner

  • 通过Scanner类的next()和nextLine()获取输入的字符串,在读取之前我们一般需要hasNext()和hasNextLine()判断是否还有输入的数据

    System.out.println("请输入若干单词,以空格作为分隔");
            Scanner sc = new Scanner(System.in);
            //若用sc.hasNext()判断 会一直对待输入的内容进行扫描,不能退出循环
            while (!sc.hasNext("#"))  //匹配#返回true,然后取非运算。即以#为结束符号
            {
                sc.next();
            }
            System.out.println("会执行的");
            //凡是属于IO类的如果不关闭会一直占用资源
            sc.close();
    
  • demo

    //输入多个数字并求总和和平均数,每输入一个数字通过回车确认,当输入非数字时结束输入并进行输出
        public static void main(String[] args) {
            double sum=0;
            int n=0;
            Scanner scanner=new Scanner(System.in);
            while(scanner.hasNextDouble()){
                double num=scanner.nextDouble();
                n++;
                sum+=num;
    
            }
            System.out.println("总数"+sum);
            System.out.println("平均数"+sum/n);
            scanner.close();
        }
    

顺序结构

选择结构

  • if

  • switch

    switch语句中的变量类型可以是byte short int char

    从javaSE7开始 switch支持字符串String类型了 通过hashcode实现

    同时case标签必须为字符串常量或者字面量

循环结构

  • while do

  • do while

  • for

    //用while或者for循环输出1-1000之间能被5整除的数,并且每行输出三个
    for(int i-1;i<=1000;i++){
        if(i%5==0){
            System.out.print(i+'\t');
        }
      	if(i%3==0){
            System.out.print('\n');
        }
    }
    

    增强for循环 Java5引入主要用于数组和集合的增强for循环

    for(声明语句:表达式){
        //代码句子
    }
    
    • break

    • continue

    • goto

      goto关键字尽管仍然是java的一个保留字,但是并未在语言中得到正式的使用,java没有goto.

      对于java来说唯一用到标签的地方是在循环语句之前。由于break和continue关键字通常只能中断当前循环,如果随标签一起使用,他们就能够中断到存在标签的地方

      outer: for(int i=101;i<=105;i++){
                  for(int j=2;j<=i/2;j++){
                      if(i%j==0){
                          continue outer;
                      }
      
                  }
                 System.out.println(i);
              }
      
      package scanner;
      
      public class Demo07 {
          //打印三角形
          public static void main(String[] args) {
              for (int i = 0; i < 5; i++) {
                  for (int j = 5; j >i ; j--) {
                      System.out.print(" ");
      
                  }
                  for (int j = 0; j <=i ; j++) {
                      System.out.print("*");
      
                  }
                  for (int j = 1; j <=i ; j++) {
                      System.out.print("*");
      
                  }
                  System.out.println();
              }
          }
      }
      
      

java方法

解决一类问题的步骤的有序集合 原子性

方法的定义和调用

java方法的值传递和引用传递

  • 值传递 将实际参数复制一份到函数中,函数中对参数的修改不会影响实际参数 例如基本数据类型和String 类型
  • 引用传递 将实际参数的地址直接传递到函数中 这样函数对参数的影响会影响到实际参数 对象

方法重载

方法重载的规则

  • 函数名必须相同
  • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等等)
  • 方法的返回值类型可以相同也可以不同
  • 仅仅返回值类型不同,不足以成为方法的重载

命令行传递参数

使用命令行时要找到包的路径,否则是执行不了的

可变参数

从jdk1.5开始 java开始支持同类型的可变参数的一个方法

在方法声明中,在指定的数据类型后面加(…)

一个方法中只能指定一个可变参数,而且必须是方法的最后一个参数

package method;

public class Demo03 {
    public static void main(String[] args) {
        printMax(1,2,3,4,5,6);

    }
    public static void printMax(double...numbers){
        if(numbers.length==0){
            System.out.println("there is no argument");
        }
        double result=numbers[0];
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i]>result){
                result=numbers[i];
            }


        }
        System.out.println("Max:"+result);

    }
}

递归

利用递归可以用简单的程序来解决一些复杂的问题。他通常把一个复杂的问题层层转化为一个与之相似的规模较小的问题进行求解。通过递归策略只需少量的代码就就可以描述出解题过程中所需要的多次重复计算,大大减少程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

递归包括两个部分:

  • 递归头
  • 递归体

数组

数组是引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量,数组本身就是对象,java中对象是在堆中,因此数组中无论保存原始类型还是其他类型,数组对象本身是在堆中的。

java内存

    • 存放new的对象和数组
    • 可以被所有的线程共享,不会存放别的对象引用
    • 存放数据的基本类型(包括这个类型的具体的值)
    • 引用对象的变量(会存放这个对象在堆里面的具体地址)
  1. 方法区
    • 可以被所有的线程共享
    • 包含了所有的class和static变量

三种初始化方法

  1. 静态初始化
  2. 动态初始化
  3. 起始默认初始值

数组的使用

  • 基本使用
  • foreach
  • 方法参数
  • 返回值

多维数组

Arrays类

由于数组对象本身并没有什么方法可以供我们使用,但API中提供了Arrays类,可以对数据对象进行一些基本的操作

常用的功能:

  • Arrays.toString()
  • fill
  • sort
  • equals
  • binarySearch

稀疏矩阵

package array;
/*
稀疏矩阵的三元表表示
 */
public class Demo01 {
    public static void main(String[] args) {
        //1.构建初始稀疏矩阵
        int[][] array1=new int[11][11];
        array1[4][5]=9;
        array1[8][7]=5;
        //打印初始矩阵
        System.out.println("打印系数矩阵:");
        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        //2.构建三元表
        int sum=0;//稀疏矩阵非零元素的个数
        for (int[] ints : array1) {
            for (int anInt : ints) {
                if(anInt!=0) {
                    sum++;
                }
            }
        }

        int[][] array2=new int[sum+1][3];
        array2[0][0]=11;
        array2[0][1]=11;
        array2[0][2]=sum;
        int count=0;//三元表的行数
        for (int i = 0; i <11 ; i++) {
            for (int j = 0; j <11 ; j++) {
                if(array1[i][j]!=0){
                    count++;
                    array2[count][0]=i;
                    array2[count][1]=j;
                    array2[count][2]=array1[i][j];
                }

            }

        }
        System.out.println("打印三元表:");
        for (int i = 0; i <array2.length ; i++) {
            System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]);

        }
        //3.将三元表转换为稀疏矩阵
        int[][] array3=new int[array2[0][0]][array2[0][1]];
        for (int i = 1; i <array2.length ; i++) {
            array3[array2[i][0]][array2[i][1]]=array2[i][2];
        }
        //打印稀疏矩阵
        for (int[] ints : array3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }

    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/107589.html

(0)

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!