JAVA基础语法和实战

基础语法

1.博客

大家都知道,博客很作用,生活的博主会在博客上记录自己的生活。旅游博主会记录自己的旅途等。而CSDN博客可以为我们提供完善的属于程序员的交流平台。咱们可以把我们所学的内容通过自己的理解写出来。这样既加深了印象,有可以锻炼写作表达能力。我就是从秦疆那学习Java开始写博客的。亦然,很多知识都可以从博客上去知道。大多数的程序员都在CSDN博客上发表自己的文章。所以和我一样学编程的小伙伴可以开始入坑CSDN博客了哦。

2.makerdowm语法

makerdowm语法在CSDN中也有官方的帮助文档。当然,我也自己总结了一下常用的编辑功能。在我的博客上的makerdown如何使用。

3. 冯▪诺依曼体系结构

计算机教父之称的冯▪诺依曼提出的计算机体系结构。其结构是存储程序原理的理论。

4.注释

同样的,注释作为编程开发的一个工具方法,亦是很重要的。程序要精简易懂,没有注释的长程序,别人很难看懂,难以高效开发。

5.数据基本类型及引用类型(primitive type、reference type)

整数类型:byte short int char long
小数类型:float double
字符:char
字符串:String
布尔值:boolean (只有两个有效值true、false)
引用类型:类、接口、数组

6.类型转换

强制转换:高容量转到低容量

package com.f.www.base;

public class leixingzhuanhuan {
    public static void main(String[] args) {
        int i=128;
        byte i2= (byte) 128;
        System.out.println(i);
        System.out.println(i2);
        //强制转换(类型)变量名  高-低
        //自动转换 ,低-高
        /**1.不能对布尔值进行转换
         * 2.不能把对象转换成不相干的类型
         * 3。转换时可能存在内存溢出,或精度问题
         * 4.把高容量转换成低容量时,强制转换
         */
        System.out.println("-----------------------");
        System.out.println((int)23.5);
        System.out.println((int)-23.98f);//小数点后面舍去了 精度问题。
        System.out.println("------------------------");
        //溢出问题
        int money=10_0000_0000;
        int years =20;
        int total=money*years;
        long total2=money*years;
        int total3= (int) (money*((long)years));//转换之前默认时int类型,
        System.out.println(total);
        System.out.println(total2);
        System.out.println(total3);
        System.out.println("---------------------------");
        long total4=(int)money*(long)years;//计算之前先转换一个变量类型
        System.out.println(total4);

    }
}

7.变量

局部变量:必须声明和初始化值
实例变量:从属于对象,如不初始化则引用其类型默认值
(基本类型默认值为0,布尔值为false,其余类型皆为null)
常量(constant):初始化后不能改变其值

package com.f.www.base;

public class bl {
    //类变量,从属于类
    static double salaey=3000;
    //实例变量从属于对象,如不初始化,输出这个类型的默认值0,0.0;
    //布尔值的默认值是false
    //其他类型都是null
    String name;
    int age;
    final int A=1;//定义了一个常量名为A,值为1的常量(常量名一般用大写字母)
    public static void main(String[] args) {
        //局部变量,必须声明和初始化
        int i=10;
        System.out.println(i);
        bl bl=new bl();
        System.out.println(new bl().age);//new 类 类名().变量名
        System.out.println(new bl().name);
        System.out.println(bl.age);
        System.out.println(bl.name);

    }
}

8. 运算符

自增运算符++
自减运算符–
自增自减运算符在前:先运算再赋值。
自增自减运算符在后:先赋值再运算
幂运算:math工具
三元运算:x?y:z

package com.f.www.base.Operator;

public class Demo01 {
    public static void main(String[] args) {
        //二元运算
        int a=10;
        int b=20;
        int c=30;
        int d=40;
        System.out.println(a+b);
        System.out.println(a-c);
        System.out.println(a*b);
        System.out.println(a/(double)c);
        System.out.println("-------------------------");
        long a1=123333;
        int a2=122;
        short a3=10;
        byte a4=1;
        System.out.println((double)a3+a4);
        System.out.println(a>b);
        System.out.println(d%a);//模运算
        System.out.println("-------------------------");
        int x1=3;
        System.out.println(x1);
        int x2=x1++;//先赋值再自增
        int x3=++x1;//先自增在赋值
       // System.out.println(x1);
        System.out.println(x2);
        System.out.println(x3);
        //幂运算
        double pow = Math.pow(2, 3);
        System.out.println(pow);
        //逻辑运算符
        boolean c1=true;
        boolean c2=false;
        System.out.println("c1&&c2:"+(c1&&c2));//逻辑与预算:全为真,结果为真
        System.out.println("c1||c2:"+(c1||c2));//逻辑或预算:一个为真,结果为真
        System.out.println("!(c1||c2:)"+!(c1||c2));//如果是真,则为假,反之。
        System.out.println("--------------------------");
        //位运算
        /*
        A=0011 1100
        B=0000 1111
        -----------
        A&B=0000 1100
        A|B=0011 1111
        A^B=0011 0011
        ~A=1100 0011
         */
        System.out.println("---------------");
        System.out.println(2<<3);
        System.out.println("---------------");
        int d1=0x08;
        int d2=0x16;
        System.out.println(d1|d2);
        //短路运算
        System.out.println("---------------");
        int c3=5;
        int c5=c3++;
        boolean c4=(c3<17)&&(c3++<7);
        System.out.println("c4:"+c4);
        System.out.println("c5:"+c5);
        System.out.println("----------------");
        System.out.println(c3);
        /*
        int a=10;
        int b=20;
        int c=30;
        int d=40;
         */
        a+=b;//a=a+b
        System.out.println(a);
        a-=b;//a=a-b
        System.out.println(a);
        //三元运算符
        //x?y:z 如果x==true 则结果为y,否则为z
        int score =50;
        String type=score<60?"不及格":"及格";
        System.out.println(type);
    }
}

9.包机制

公司官网倒置建包。

10.顺序结构、if选择结构、swich结构、while、do while结构、for、for增强结构

package Struct;

import java.util.Scanner;

public class StructDemo01 {
    public static void main(String[] args) {
        System.out.println("Hello 1");
        System.out.println("Hello 2");
        System.out.println("Hello 3");
        System.out.println("Hello 4");
        System.out.println("Hello 5");
        //顺序结构
        System.out.println("----------------");
        Scanner scanner=new Scanner(System.in);
        String s=scanner.nextLine();
        if (s.equals("Hello")){
            //equals  比较字符串是否一致
            System.out.println(s);
        }
        System.out.println("End");
        //if单选泽结构
        System.out.println("--------------");
        int score=scanner.nextInt();
        //score  成绩
        if (score>60) {

            System.out.println("成绩合格" + score);
        }
        else {
            System.out.println("成绩不合格" + score);
        }
        // if双选结构
        System.out.println("------------------");
        int score1=scanner.nextInt();
        if(score1>=90) {
            System.out.println("优");
        }else if (score1>=60&&score1<90){
            System.out.println("良");
        }else if (score1>=30&&score1<60){
            System.out.println("中");
        }else if (score1>=0&&score1<30){
            System.out.println("差");
        }else System.out.println("成绩不合法");
        //单行if else 可不带大括号
        //if 多选择结构
        System.out.println("------------------");
        scanner.close();
    }
}
package Struct;

public class switchDemo01 {
    public static void main(String[] args) {
        String grade="a";
        switch (grade){
            case "a":
                System.out.println("还有诗和远方的田野");
                break;
            case"b":
                System.out.println("良好");
                break;
            case "c":
                System.out.println("及格");
                break;
            case "d":
                System.out.println("再接再厉");
                break;
            case "e":
                System.out.println("挂科");
                break;
            default:
                System.out.println("未知等级");
                //case具有穿透性,所以用break截止,swich 匹配一个具体值
        }
    }
}
package Struct;

public class DoWhileDome01 {
    public static void main(String[] args) {
        int a=0;
        int sum=0;
       //while
        while(a<0){
            System.out.println(a);
        }
        //先执行判断是否为真再执行顺序操作
        //do while
        System.out.println("-----------");

        do {
            a++;
            sum=sum+a;
        }
        while (a<100);
        System.out.println(sum);
        //do while先执行一次do 再执行顺序判断。
    }
}
package Struct;

public class ForDemo01 {
    public static void main(String[] args) {
        int oddsum=0;
        int evensum=0;
        //计算100以内的奇数和与偶数和
        for (int i = 0; i < 100; i++) {//初始化条件  条件判断  迭代
            if (i%2!=0) {
                oddsum += i;//循环体
            }else
            {
                evensum+=i;//循环体
            }
        }
        System.out.println("奇数和:"+oddsum);
        System.out.println("偶数和:"+evensum);
        System.out.println("-----------------");
        //计算1000以内的可以被5整除的数,并每行输出3个。
        for (int i = 0; i <=1000; i++) {
            if (i%5==0) {
                System.out.print(i+"\t");
            }
            if(i%(5*3)==0) {
                System.out.print("\n");
            }
            //System.out.println();
            //println 自动换行
        }
    }
}
package Struct;
public class ForLianxi2 {
    public static void main(String[] args) {
        for (int j = 1; j < 10; j++) {
            for (int i = 1; i <= j; i++) {
                System.out.print(i + "*" + j + "=" + (j * i) + "\t");
            }
            System.out.print("\n");
        }
        System.out.println("--------------");
        //增强for
        int[] number = {1, 2, 3, 4, 5};
        for (int x : number) {
            System.out.print(x+"\t");
        }
        System.out.println();
        System.out.println("---------------");
        for (int i = 1; i <=100; i++) {
            if (i % 5 == 0) {
                System.out.println("中止位置");
                continue;
            }
            System.out.print(i+"\t");
            //continue 终止本次循环不会退出循环。
        }
        System.out.println("------------");
       outer://外层循环添加标签
        for (int i = 101; i < 150; i++) {
            //设置outer标签判断条件
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    continue outer;
                }
            }
            System.out.print(i + " ");
        }
        System.out.println();
        System.out.println("-------------");
        //打印三角形实战
        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >= i; j--)
                System.out.print(" *");
            for (int j = 1; j <= i; j++)
                System.out.print(" &");
            for (int j = 1; j < i; j++)
                System.out.print(" &");
            for (int j = 5; j >= i; j--)
                System.out.print(" *");
            System.out.println("");
        }
    }
}

11.Scanner类

Scanner类是从键盘获取数据

package Scannerxi;
import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        // 创建一个扫描器对象,用于接收键盘数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入:");
        //判断用户有没有输入字符串
        if (scanner.hasNext()){
            String str= scanner.next();
            System.out.println("内容输出为:"+str);
        }
        scanner.close();
    }
}
package Scannerxi;

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入:");
        scanner.hasNextLine();
        if (scanner.hasNextLine()){
        String cc =scanner.nextLine();
        System.out.println( "内容输出为:"+cc);

    }
        scanner.close();
     }

}
package Scannerxi;

import java.util.Scanner;

public class Demo03 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        //从键盘接收数据
        int a=0;
        float b=0.0f;
        System.out.println("请输入数据");
        if (scanner.hasNextInt())
        {
            a = scanner.nextInt();
            System.out.println("整数数据:" + a);
        }
         else{
            System.out.println("输入的不是整数数据:" );
        }
        System.out.println("请输入小数:");
        if(scanner.hasNextFloat()){
            b=scanner.nextFloat();
            System.out.println( "小数数据:"+b);
        }
        else{
            System.out.println("输入的不是小数数据:");
        scanner.close();
            }
    }
}
package Scannerxi;

import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        //输入多个数字,并求其总和与平均数;每一个数字输入完成后用回车确认,通过非数字结束输入并输出结果
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入数据:");
        double sum=0;
        //和
        int a=0;
        //计算输入了多少个数字
        while(scanner.hasNextDouble()) {
            double x = scanner.nextDouble();
            a = a + 1;
            sum = sum + x;
            System.out.println(a+"和为"+sum);
            System.out.println(a+"平均值为"+(sum/a));
        }
        scanner.close();
    }
}

12.break\continue\retrun的区别

break:常用于终止退出循环
continue:用于中止循坏,不退出循环
retrun:终止方法

13.方法定义和调用及重载

   修饰词 返回值类型 方法名(...{
   
    方法体....
    
    return 返回值
    }
package Array;
//类
public class fangfa {
    //main 方法(主程序)
    public static void main(String[] args) {
        System.out.println(new fangfa().max(1,2));//方法调用
    }
    /*修饰词 返回值类型 方法名(...){
    方法体
    return 返回值
    }
     */
    public String sayHello(){
        return "hello world";
    }
    public void  /*空*/  hello(){
        return;
    }
    public int max(int a,int b){
        return a>b?a:b;//三元运算符
    }
    //静态方法
    public static void say(){
    }
    //非静态方法
    public void sayi(){
    }
}

重载就是在一个类中,有相同的函数名称,但形参不同的函数。
方法重载规则
1.方法名必须相同
2.参数列表必须不同(个数不同,或类型不同、或参数排列顺序不同)
3.方法的返回值可以相同也可以不同
4.仅仅返回类型不同不足以成为方法的重载

11.可变参数

package method;

public class keBiancanshu {
    public static void main(String[] args) {
        keBiancanshu keBiancanshu = new keBiancanshu();
        keBiancanshu.test(1);
        System.out.println("-----------");
        printMax(22,535,55,66);
        printMax(new double[]{1,5,6,7,33,66});

    }
    public void test(int...i){
        System.out.println(i[0]);

    }
    public static void printMax(double... number){//可变参数符号 ... 可以定义无限个参数
        if (number.length==0){
            System.out.println("N0 argument passed");
            return;
        }
        double result=number[0];
        for (int i = 1; i < number.length; i++) {
            if (number[i]>result){
                result =number[i];
            }
        }
        System.out.println("The max value is "+result);
    }

}

12.递归

递归头:什么时候不调用自身方法,如果没有递归头将陷入死循环
递归提:什么时候调用自己

package method;

public class DIgui {
    public static void main(String[] args) {
        System.out.println(f(6)
        );
    }

    public  static  int f(int n){
        if (n==1){
            return 1;
        }
        else{
            //3*f(n-)=3*f(2)
            return n*f(n-1);//阶乘
        }
    }
}

13.数组的声明和创建

package Array;

public class ArraySm {
    public static void main(String[] args) {
        int[]a;//声明一个数组
        a=new int[5];//创建一个数组
        a[0]=1;//给数组元素赋值
        a[1]=2;//给数组元素赋值
        a[2]=3;//给数组元素赋值
        a[3]=4;//给数组元素赋值
        a[4]=5;//给数组元素赋值
    }
}

14.内存分析

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

16.数组使用

package Array;

public class ArrayDemo01 {
    public static void main(String[] args) {
        int[] a = {1, 2, 3, 4, 5};
        //遍历数组 for each
        for (int i : a) {//for(int 数组元素:数组名)
            System.out.println(i);
        }
        System.out.println("----------------");
        //打印所有元素
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
        System.out.println("--------------");
        //计算所有元素的和
        double ax = 0;
        for (int i = 0; i < a.length; i++) {

            ax += a[i];

        }
        System.out.println("ax和为:" + ax);
        System.out.println("---------------");
        //查找最大元素
          int max = 0;
        for (int i = 0; i < a.length; i++) {

            if (a[i] > max) {
                max = a[i];
            }
            System.out.println("max:" + max);
        }

        int[] b = new int[10]; //动态初始化
        b[0] = 1;
        b[9] = 11;
        //静态初始化
        int[] c = {1,2,3,4};
        // System.out.println();
        System.out.println("---------");
        //printa(a);
        System.out.println("\n---------");
        
        int[] reverse = reverse(a);
        printa(reverse(a));
    }

    //定义一个方法
    //打印一个数组 数组作为方法入参
    public static void printa(int[] a) {
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }
    //反转数组 数组作为返回值
    public static int[]reverse(int[] a){
        int[]result =new int[a.length];
        for (int i = 0,j= result.length-1; i < a.length; i++,j--) {
            result[j]=a[i];

        }
        return (result);
    }
}

17.多维数组

即二维数组可以看成是特殊的一维数组(数组的嵌套)

18.arrays类

1.数组的工具类:java.util.Arrays
2.Arrays类中的方法都是static修饰的静态方法,在使用时可以直接使用类名进行调用而没必要再使用对象来调用
3.常用方法
给数组赋值:通过fill方法
对数组排序:通过sort方法升序
比较数组:通过equals方法比较元素值是否相等
查找数组元素:通过binarySearch方法对排序好的数组进行二分查找法操作

19.冒泡排序

package Array;

import java.util.Arrays;

//冒泡排序
public class maopaopaixun {
    public static void main(String[] args) {
        //比较数组中,两个相邻元素,如果第一个数比第二个数大,就交换他们的位置
        //每比较一次,就会产生一个最大和最小的数
        //下一轮可减少一次排序
        //依次循环,直到结束
        int temp = 0;
        int[] a = {1, 33, 4, 42, 3, 23, 424, 55, 2, 55, 23, 452,};
        //外层循环 判断要走多少次
        for (int i = 0; i < a.length; i++) {
            //判断是否大小一致,不用比较
            boolean flag;
            flag = false;
            //内层循环 比较两个数,第一个数比第二个数大 就交换位置
            for (int j = 0; j < a.length - 1 - i; j++) {
                if (a[j + 1] > a[j]) {
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                    flag = true;
                }
            }
            if (flag == false) {
                break;
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

20.稀疏数组

package Array;

public class xishushuzu {
    public static void main(String[] args) {
        //创建一个数组11*11 0-没有棋子 1-黑棋 2-白棋
        int [][]arrays1 =new int[11][11];
        arrays1[1][2]=1;
        arrays1[2][3]=2;
        //输出原始的数组
        System.out.println("输出原始的数组");
        for (int[] ints : arrays1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        //转换为稀疏数组
        int sum=0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (arrays1[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效值的个数:"+sum);
        //创建一个稀疏数组
        int[][]arrays2= new int[sum+1][3];
        arrays2[0][0]=11;
        arrays2[0][1]=11;
        arrays2[0][2]=sum;
        //遍历二维数组 将非零的值,存放稀疏数组中
        int count=0;
        for (int i = 0; i < arrays1.length; i++) {
            for (int j = 0; j < arrays1[i].length; j++) {
                if (arrays1[i][j] != 0) {
                    count++;
                    arrays2[count][0]=i;
                    arrays2[count][1]=i;
                    arrays2[count][2]=arrays1[i][j];
                }
            }
        }
        System.out.println("稀疏数组");
        for (int i = 0; i < arrays2.length; i++) {
            System.out.println(arrays2[i][0]+"\t"
                    +arrays2[i][1]+"\t"
                    +arrays2[i][2]);
        }
        System.out.println("----------");
        System.out.println("还原");
        //都取稀疏数组
        int[][]arrays3=new int[arrays2[0][0]][arrays2[0][1]];
        //给其中的元素还原值
        for (int i = 1; i < arrays2.length; i++) {
            arrays3[arrays2[i][0]][arrays2[i][1]]=arrays2[i][2];
        }
        //打印
        System.out.println("输出还原的数组");
        for (int[] ints : arrays3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luci Aristide 哎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值