Java-master(github)教材整理

简介: helloworldclass HelloWorld { public static void main(String[] args) { System.out.println("helloworld"); }}注释//注释:用于解释说明程序的文字/*...

helloworld

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("helloworld");
    }
}

注释

//注释:用于解释说明程序的文字
/*
    注释的分类:
        单行注释 一般用于解释说明单行程序 
            格式是://注释文字
        多行注释 一般用于解释说明多行程序
            格式是:
        文档注释 一般是对类或者方法进行说明,被javadoc工具解析生产一个文档说明书。
            格式是:
*/

//注意:多行注释不能嵌套写,而单行注释可以。

//这是我的学生案例
//class是java中用来定义类的
//定义类的格式是:class 类名

/*
    这是我的学生案例
    class是java中用来定义类的
    定义类的格式是:class 类名
*/

/**  */
class Student {
    public static void main(String[] args) {
        System.out.println("我是学生");
    }
}

带注释的helloworld

/*
    需求:我要完成HelloWorld案例

    分析:
        A:java语言最基本的单位是类,所以我们首先要定义一个类
        B:java程序要想能够独立运行,必须有主方法
        C:如果想要程序有输出,必须有输出语句

    步骤:
        A:定义类的格式
            class 类名 {
                //类体
            }
        B:主方法的格式
            public static void main(String[] args) {
                //方法体
            }
        C:输出语句的格式
            System.out.println("这里的内容是可以改");

    最后把我们的思想用代码给体现出来
*/
//这是我的带注释的HelloWorld案例
//class用来定义类
class HelloWorld {
    /*
        这是main方法
        main方法是程序的入口
        jvm会自动调用main方法
    */
    public static void main(String[] args) {
        //这是输出语句
        System.out.println("HelloWorld");
    }
}
/*
    注释的作用:
        A:解释说明程序,提高程序的阅读性
        B:可以帮助我们调试程序
*/
class Demo {
    public static void main(String[] args) {
        System.out.println("HelloWorld");
        System.out.print("我爱林青霞");   //println与print区别在于换行与非换行
        System.out.print("我爱Java");
        System.out.print("我爱张瑜");
    }
}

关键字

/*
    关键字:被Java语言赋予特定含义的单词

    关键字的特点:关键字都是小写的

    关键字注意事项
        A:goto和const作为保留字存在,目前并不使用
        B:类似Editplus这样的高级记事本,针对关键字有特殊的颜色标记,非常直观
*/
class KeyWord {
    public static void main(String[] args) {
        System.out.println("HelloWorld");
    }
}

标识符

/*
    标识符:就是给类,接口,方法,变量等起名字时使用的字符序列(字符串)

    组成规则:
        A:英文字母大小写
        B:数字
        C:_和$

    注意事项:
        A:不能以数字开头
        B:不能是Java中的关键字
        C:区分大小写
            Student,student 这是两个名称

    常见的命名规则:见名知意
        A:包 其实就是文件夹,用于解决相同类名问题
            全部小写
            单级:com
            多级:cn.itcast

        B:类或者接口
            一个单词:首字母大写
                Student,Person,Teacher
            多个单词:每个单词的首字母大写
                HelloWorld,MyName,NameDemo

        C:方法或者变量
            一个单词:全部小写
                name,age,show()
            多个单词:从第二个单词开始,每个单词首字母大写
                myName,showAllStudentNames()

        D:常量
            一个单词:全部大写
                AGE
            多个单词:每个单词都大写,用_连接
                STUDENT_MAX_AGE
*/


class NameDemo {
    public static void main(String[] args) {
        
        System.out.println("Hello World!");
    }
}

常量

/*
    常量:在程序执行的过程中其值不可以发生改变
            举例:π

    分类:
        A:字面值常量
            1,12.5
        B:自定义常量(面向对象部分讲解)

    字面值常量分类:
        A:字符串常量 用""括起来的内容        String
        B:整数常量 所有的整数数据           int
        C:小数常量 所有的带小数的数据        float/double
        D:字符常量 用单引号括起来的内容      char
        E:布尔常量 只有两个值:true和false  blolean
        F:空常量 null(数组部分去讲解)       null
*/
class ConstantDemo {
    public static void main(String[] args) {
        //字符串常量
        System.out.println("HelloWorld");

        //整数常量
        System.out.println(100);

        //小数常量
        System.out.println(12.345);

        //字符常量
        System.out.println('A');
        //下面的是错误的
        //System.out.println('BC');//此条错误
        System.out.println('1');
        
        //布尔常量
        System.out.println(true);
        System.out.println(false);
    }
}

进制转换

/*
    二进制    
        由0,1组成。以0b开头
    八进制    
        由0,1,…7组成。以0开头
    十进制    
        由0,1,…9组成。整数默认是十进制的
    十六进制    
        由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头

*/
class JinZhiDemo {
    public static void main(String[] args) {
        System.out.println(0b100);//4
        System.out.println(0100);//64
        System.out.println(100);//100
        System.out.println(0x100);//256
    }
}

变量

/*
    成员变量和局部变量的区别:
        A:在类中的位置不同
            成员变量 类中方法外
            局部变量 方法内或者方法声明上
        B:在内存中的位置不同
            成员变量 堆内存
            局部变量 栈内存
        C:生命周期不同
            成员变量 随着对象的存在而存在,随着对象的消失而消失
            局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
        D:初始化值不同
            成员变量 有默认的初始化值
            局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。

        注意:
            如果有同名的变量,一般会采用就近原则。
*/
class VariableDemo {
    //成员变量 堆内存
    int x;

    public static void main(String[] args) {
        //局部变量 栈内存
        int y;
        y = 0;  //如果不赋值,将报错,成员变量有默认初始值.
        System.out.println(y);

        VariableDemo vd = new VariableDemo();
        System.out.println(vd.x);
    }
}

数据类型

/*
    为了更好的表达现实世界的事物,Java针对不同的事物提供了不同的数据类型。

    数据类型:
        基本类型:4类8种
        引用类型:类,接口,数组。(后面讲)

    基本类型:
        整数:                占用的内存空间
            byte            1字节
                                01111111
                                10000000(1既表示符号位,又表示数值 -128)
            short            2字节
            int                4字节
            long            8字节
        浮点数:
            float            4字节
            double            8字节
        字符:
            char            2字节
        布尔:
            boolean            未知。1字节

    面试题:
        Java中字符可以存储一个汉字吗?
        可以。因为Java语言采用的是unicode编码,
        而unicode编码的每个字符是两个字节,
        所以,java中的字符可以存储一个汉字。


    注意:
        整数默认是int类型
        浮点数默认是double类型

        long类型的变量,要加l或者L。
        float类型的变量,要加f或者F。

        在同一对{}里面,是不能有同名的变量。
*/
class DataType {
    public static void main(String[] args) {
        //定义变量的格式:
        //数据类型 变量名 = 初始化值;

        //定义byte类型的变量
        byte b = 1;
        System.out.println(1);
        System.out.println(b);

        //定义short类型的变量
        short s = 100;
        System.out.println(s);

        //定义int类型的变量
        int i = 100000;
        System.out.println(i);

        //报错
        //int j = 2147483648;
        //System.out.println(j);

        //定义long类型的变量
        long l = 2147483648L;
        System.out.println(l);

        //定义float类型的变量
        float f = 12.34F;
        System.out.println(f);

        //定义double类型的变量
        double d = 23.56;
        System.out.println(d);

        //定义char类型的变量
        char ch = 'a';
        System.out.println(ch);

        //定义boolean类型的变量
        boolean flag = true;
        System.out.println(flag);
    }
}

类型转换

/*
    +是一个运算符, 我们应该能够看懂,做数据的加法。

    参与运算的数据,要求类型一致。

    boolean类型不能转换为其他的数据类型。

    隐式转换:
        A:byte,short,char-->int-->long-->float-->double
        B:byte,short,char相互之间不转换,他们参与运算首先转换为int类型
*/
class DataTypeDemo {
    public static void main(String[] args) {
        //类型一样的数据
        int a = 10;
        int b = 20;
        System.out.println(a + b);
        int c = a + b;
        System.out.println(c);
        System.out.println("--------------");

        //定义变量
        byte by = 3;
        int i = 4;
        System.out.println(by + i);
        int j =    by + i;
        System.out.println(j);
    }
}
/*
    强制转换:从大到小,不建议使用,因为可能有精度的丢失。
        目标类型 变量名=(目标类型)(被转换的数据);
*/
class DataTypeDemo2 {
    public static void main(String[] args) {
        //定义变量
        byte by = 3;
        int i = 4;
        byte bb = (byte)(by + i);
        System.out.println(bb);
    }
}
/*
    +:做加法操作
        A:针对数据操作
        B:针对字符进行做+
            ASCII码表
                '0'    48
                'A'    65
                'a'    97
        C:针对字符串进行做+
            在字符串的操作中,叫字符串连接符
*/
class DataTypeDemo3 {
    public static void main(String[] args) {
        System.out.println('a');
        System.out.println('a'+1);
        System.out.println('A'+0);
        System.out.println('0'+0);
        System.out.println("-----------");


        System.out.println('a'+'b');
        System.out.println("a"+"b");
        
        System.out.println("hello"+'a'+1); //左边字符串,往后拼的都是字符串
        System.out.println('a'+1+"hello");
        System.out.println("5+5="+5+5);
        System.out.println(5+5+"=5+5");
    }
}
/*
    byte b1=3,b2=4,b;
    b=b1+b2;
    b=3+4;
    哪句是编译失败的呢?为什么呢?
        b=b1+b2;

    原因:
        变量相加,它首先提示类型,再做操作。
        常量相加,它先做操作,然后判断结果是否在左边的范围内容,如果在就不报错。如果不在,报错。
*/
class DataTypeTest {
    public static void main(String[] args) {
        byte b1=3,b2=4,b;
        //b = b1+b2; //右边类型自动提升
        b = 3+4;
    }
}
/*
    byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
*/
class DataTypeTest2 {
    public static void main(String[] args) {
        //byte b = 130;

        //解决方案
        //方案1
        //int a  = 130;
    
        //方案2
        byte b = (byte) 130;
        System.out.println(b);
    }
}

/*
    十进制:130

    A:第一步,先把十进制转换为二进制
        二进制:000000000 000000000 000000000 100000010
        由于此二进制是一个正数,所以,补码也是000000000 000000000 000000000 100000010。

    B:做强制类型转换
        二进制:000000000 000000000 000000000 100000010
        截取后就变成了:100000010

    C:操作后的数据是补码,你看到的是原码
                符号位        数值位
        补码:    1            00000010
        反码:    1            00000001
        原码:    1            11111110
*/
class DataTypeTest3 {
    public static void main(String[] args) {
        byte b = (byte)300;
        System.out.println(b);


        System.out.println((byte)127);
        System.out.println((byte)128);
        System.out.println((byte)129);
        System.out.println((byte)130);
        System.out.println((byte)131);
    }
}

/*
    十进制:300

    A:把十进制转换为二进制
        00000000 00000000 00000001 00101100

    B:截取
        0 0101100
*/

算数运算符

/*
    运算:对常量和变量进行操作的过程称为运算。
    运算符:对常量和变量进行操作的符号称为运算符
    表达式:由运算符把常量和变量连接起来的式子
            a + b
            注意:表达式必须有结果

    常见的运算符:
        算术运算符
        赋值运算符
        比较运算符
        逻辑运算符
        位运算符
        三目运算符

    算术运算符:
        +,-,*,/,%,++,--
*/
class OperatorDemo {
    public static void main(String[] args) {
        System.out.println(10+20);
        System.out.println(10-20);
        System.out.println(10*20);
        //整数相除,只能得到整数
        System.out.println(10/20);
        //要想得到小数,可以乘以或者除以1.0
        System.out.println(10/1.0/20);

        //加法的用法:正号,加法,字符串连接符
        System.out.println(+5);
        System.out.println(1+2);
        System.out.println("1"+"2");
    }
}

赋值运算符

/*
    赋值运算符:
        基本:=
        复合:+=,-=,*=,/=,%=,...
*/
class OperatorDemo {
    public static void main(String[] args) {
        //把10赋值给int类型的变量a
        int a = 10;

        //复合的用法
        int b = 10;
        b += 20; //结果等价于:b = b + 20;
        System.out.println(b);
    }
}

关系运算符

/*
    关系运算符:
        ==,!=,>,>=,<,<=

    特点:
        无论表达式是简单还是复杂,结果肯定是boolean类型。
    
    注意事项:
        关系运算符“==”不能误写成“=” 。
*/
class OperatorDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        int c = 20;
        System.out.println(a == b);
        System.out.println(a == c);
        System.out.println((a + b*c) == (a*b + c));
        System.out.println("----------------");

        System.out.println(a = b); //把b的值赋值给a,把a的值作为结果留下来
        System.out.println(a = c);
    }
}

逻辑运算符

/*
    逻辑运算符:
        &,|,!,^
        &&,||

    注意:
        逻辑运算符连接的应该是一个布尔表达式。
*/
class OperatorDemo {
    public static void main(String[] args) {
        //&,|,!,^
        int a = 10;
        int b = 20;
        int c = 30;

        //&:逻辑与    有false则false
        System.out.println(a>b & a>c); //false & false = false
        System.out.println(a>b & a<c); //false & true = false
        System.out.println(a<b & a>c); //true & false = false
        System.out.println(a<b & a<c); //true & true = true
        System.out.println("--------");

        //|:逻辑或    有true则true
        System.out.println(a>b | a>c); //false | false = false
        System.out.println(a>b | a<c); //false | true = true
        System.out.println(a<b | a>c); //true | false = true
        System.out.println(a<b | a<c); //true | true = true
        System.out.println("--------");

        //^:逻辑异或 相同false,不同true。
        //情侣:男男,男女,女男,女女
        System.out.println(a>b ^ a>c); //false ^ false = false
        System.out.println(a>b ^ a<c); //false ^ true = true
        System.out.println(a<b ^ a>c); //true ^ false = true
        System.out.println(a<b ^ a<c); //true ^ true = false
        System.out.println("--------");

        //!:逻辑非
        System.out.println((a>b));//false
        System.out.println(!(a>b));//true
        System.out.println(!!(a>b));//false
        System.out.println(!!!(a>b));//true
        System.out.println(!!!!(a>b));//false
    }
}

位运算符

/*
    位运算符:位运算符一定是先把数据转成二进制,然后再运算。

    面试题:&和&&的区别?
            A:&和&&都可以作为逻辑运算,&&具有短路效果。
            B:&还可以作为位运算。
*/
class OperatorDemo {
    public static void main(String[] args) {
        //&,|,^,~
        System.out.println(3 & 4); //0
        System.out.println(3 | 4); //7
        System.out.println(3 ^ 4); //7
        System.out.println(~3); //
    }
}

/*
    A:计算出3,4的二进制
        3的二进制:00000000 00000000 00000000 00000011
        4的二进制:00000000 00000000 00000000 00000100
    B:位&运算    有0则0
        00000000 00000000 00000000 00000011
       &00000000 00000000 00000000 00000100
       ------------------------------------
        00000000 00000000 00000000 00000000
    C:位|运算    有1则1
        00000000 00000000 00000000 00000011
       &00000000 00000000 00000000 00000100
       ------------------------------------
        00000000 00000000 00000000 00000111
    D:位^运算    相同则0,不同则1
        00000000 00000000 00000000 00000011
       &00000000 00000000 00000000 00000100
       ------------------------------------
        00000000 00000000 00000000 00000111
    E:位~运算 把数据每个位都按位取反
        00000000 00000000 00000000 00000011
       ~11111111 11111111 11111111 11111100
     反:11111111 11111111 11111111 11111011
     原:10000000 00000000 00000000 00000100
*/

三元运算符

/*
    三元运算符:
    格式
        (关系表达式)?表达式1:表达式2;

    执行流程:
        计算关系表达式,看其返回值
            true:表达式1就是整个表达式的值
            false:表达式2就是整个表达式的值

*/
class OperatorDemo {
    public static void main(String[] args) {
        //获取两个数据中的较大值
        int x = 3;
        int y = 4;
        int z = (x > y)? x : y;
        System.out.println(z);

        //比较两个数是否相等
        int a = 4;
        int b = 4;
        //boolean flag = (a==b)?true:false;
        boolean flag = (a == b);
        System.out.println(flag);

        //获取三个数据中的较大值
        int c = 30;
        int d = 40;
        int e = 50;
        //int max = (c>d)?(c>e?c:e):(d>e?d:e);
        int temp = (c>d)?c:d;
        int max = (temp>e)?temp:e;
        System.out.println(max);
    }
}

键盘录入数据

/*
    为了程序的数据更加的灵活,我们决定加入键盘录入数据。

    如何使用键盘录入数据呢?目前你就给我记住了。
    A:导包
        import java.util.Scanner;

        在class的上面
    B:创建对象
        Scanner sc = new Scanner(System.in);
    C:获取数据
        int i = sc.nextInt();
*/
import java.util.Scanner;

class OperatorDemo {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个整数:");
        //获取数据
        int i = sc.nextInt();

        System.out.println("i:"+i);
    }
}

顺序结构语句

/*
    是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,
    依次执行,程序中大多数的代码都是这样执行的。
    
    总的来说:写在前面的先执行,写在后面的后执行
*/
class OrderDemo {
    public static void main(String[] args) {
        System.out.println("我爱林青霞");
        System.out.println("我爱Java");
        System.out.println("我爱张曼玉");
        System.out.println("林青霞爱张曼玉");
    }
}

选择结构(if语句)

/*
    选择结构:if语句,switch语句。

    if语句有三种格式。

    if语句格式1:
        if(关系表达式) {
             语句体;
        }

    执行流程:
        A:计算关系表达式,看其结果
        B:如果是true,就执行语句体
          如果是false,就不执行语句体
        C:继续向下执行
*/
class IfDemo {
    public static void main(String[] args) {
        int x = 3;

        if(x == 3) {
            System.out.println("x等于3");
            //x = 10;
        }

        if(x > 5) {
            System.out.println("x大于5");    
        }

        System.out.println("over");
    }
}

选择结构(switch语句)

/*
    switch语句格式:
        switch(表达式) {
            case 值1:
                语句体1;
                break;
            case 值2:
                语句体2;
                break;
                …
            default:    
                语句体n+1;
                break;
        }

        格式解释:
            A:switch表示这是switch语句
            B:表达式的取值
                byte,short,int,char
                JDK5以后可以是枚举类型。(enum)
                JDK7以后可以是字符串。(String)
            C:case后面跟的是要和表达式进行比较的值
            D:语句体可以是多条语句
            E:break表示中断,结束的意思,可以结束switch语句
            F:default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
        
        面试题:
            switch的表达式可以是byte类型吗?可以是long类型吗?可以是String类型吗?
                可以。
                不可以。
                JDK7以后可以。

        执行流程:
            A:首先计算出表达式的值
            B:其次,和case依次比较,一旦有对应的值,就会执行相应的语句,
              在执行的过程中,遇到break就会结束。
            C:最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

        需求:根据键盘录入的数值1,2,3,…7输出对应的星期一,星期二,星期三…星期日。

        分析:
            A:键盘录入数据,用Scanner实现
            B:对录入的数据进行判断,用switch实现
            C:输出对应的结果
*/
import java.util.Scanner;

class SwitchDemo {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        //键盘录入数据
        System.out.println("请输入一个数据(1-7):");
        int week = sc.nextInt();

        //用switch语句实现
        switch(week) {
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("你输入的数据有误");
                break;
        }
    }
}

循环语句(for)

/*
    for循环的格式:
        for(初始化语句;判断条件语句;控制条件语句) {
            循环体语句;
        }

        执行流程:
        A:首先执行初始化语句
        B:其次执行判断条件语句,看其返回值
            如果是true,就继续
            如果是false,循环结束
        C:执行循环体语句
        D:执行控制条件语句
        E:回到B
*/
class ForDemo2 {
    public static void main(String[] args) {
        //在控制台输出10次HelloWorld
        for(int x=0; x<10; x++) {
            System.out.println("HelloWorld");
        }    
        System.out.println("--------------");
        
        //初始化不从0开始
        for(int x=1; x<=10; x++) {
            System.out.println("HelloWorld");
        }    

        for(int x=1; x<11; x++) {
            System.out.println("HelloWorld");
        }

        for(int x=10; x>0; x--) {
            System.out.println("HelloWorld");
        }
    }
}

循环语句(while)

/*
    while循环的格式:
        while(条件表达式) {
            语句体;
        }

    变形格式:
        初始化语句;
        while(判断条件语句) {
            循环体语句;
            控制条件语句;
        }

        for(初始化语句;判断条件语句;控制条件语句) {
             循环体语句;
        }
    由此可见while循环和for循环是可以等价转换的。
*/
class WhileDemo {
    public static void main(String[] args) {
        //for
        /*
        for(int x=0; x<10; x++) {
            System.out.println("HelloWorld");
        }
        System.out.println("--------------");
        */

        //while
        /*
        int x=0;
        while(x<10) {
            System.out.println("HelloWorld");
            x++;
        }
        */

        //求和
        //for
        /*
        int sum = 0;
        for(int x=1; x<=100; x++) {
            sum+=x;
        }
        System.out.println("1-100之和是:"+sum);
        */

        //while
        /*
        int sum = 0;
        int x = 1;
        while(x<=100) {
            sum += x;
            x++;
        }
        System.out.println("1-100之和是:"+sum);
        */

        //水仙花
        //for
        /*
        for(int x=100; x<1000; x++) {
            int ge = x%10;
            int shi = x/10%10;
            int bai = x/10/10%10;

            if(x == (ge*ge*ge + shi*shi*shi + bai*bai*bai)) {
                System.out.println(x);
            }
        }
        */

        //while
        int x = 100;
        while(x<1000) {
            int ge = x%10;
            int shi = x/10%10;
            int bai = x/10/10%10;

            if(x == (ge*ge*ge + shi*shi*shi + bai*bai*bai)) {
                System.out.println(x);
            }

            x++;
        }
    }
}

循环语句(do…while)

/*
    do...while格式:
        do {
            语句体;
        }while(条件表达式);

    变形格式:
        初始化语句;
        do {
            循环体语句;
            控制条件语句;
        }while(判断条件语句);
        
        
        for(初始化语句;判断条件语句;控制条件语句) {
             循环体语句;
        }
*/
class DoWhileDemo {
    public static void main(String[] args) {
        /*
        int sum = 0;
        for(int x=1; x<=100; x++) {
            sum+=x;
        }
        System.out.println(sum);
        */

        //do...while
        int sum = 0;
        int x = 1;
        do{
            sum+=x;
            x++;
        }while (x<=100);
        System.out.println(sum);
    }
}

循环语句(嵌套使用)

/*
    需求:请输出如下图形
            *
            **
            ***
            ****
            *****
*/
class ForForDemo2 {
    public static void main(String[] args) {
        //我们先输出一个5行5列的星形
        /*
        for(int x=0; x<5; x++) {
            for(int y=0; y<5; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
        */

        //而我们现在需要的是下半部分
        //通过观察图形:我们知道行没有变化,是列在变化
        //第一行:1列
        //第二行:2列
        //第三行:3列
        //第四行:4列
        //第五行:5列
        //既然是一个变化的数,那么我们就定义一个变量
        /*
        int z = 0;
        for(int x=0; x<5; x++) {
            for(int y=0; y<=z; y++) {
                System.out.print("*");
            }
            System.out.println();
            z++;
        }
        */

        //我们发现z的变化和x的变化其实是一致的
        //所以我们根本就没有必要定义z变量,直接把z用x替换
        for(int x=0; x<5; x++) {
            for(int y=0; y<=x; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("---------");

        for(int x=1; x<=5; x++) {
            for(int y=1; y<=x; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

控制跳转语句

/*
    根据要求填空
*/
class BreakAndContinue {
    public static void main(String[] args) {
        for(int x=1; x<=10; x++) {
            if(x%3==0) {
                //在此处填写代码
                break;
                //continue;
                //System.out.println("Java基础班");
            }
            System.out.println("Java基础班");
        }
            
        //我想在控制台输出2次:“Java基础班“
        //我想在控制台输出7次:“Java基础班“
        //我想在控制台输出13次:“Java基础班“    
    }
}
/*
    break:中断

    break的使用场景:
        A:在选择结构switch语句中
        B:在循环语句中
        离开使用场景的存在是没有意义的

    break:
        A:跳出单层循环
        B:跳出多层循环(了解)
            带标签的用法
*/
class BreakDemo {
    public static void main(String[] args) {
        for(int x=0; x<10; x++) {
            //System.out.println(x);
            if(x%2==0) {
                break;
                //break后面是不能有东西的
                //System.out.println(x);
            }

            System.out.println(x);
        }
        System.out.println("-------------");

        wc:for(int x=0; x<3; x++) {
            nc:for(int y=0; y<4; y++) {
                System.out.print("*");
                break;
            }
            System.out.println();
        }
    }
}
/*
    continue的使用场景:
        在循环语句中
        离开使用场景的存在是没有意义的
    
    continue的作用:
        A:单层循环对比break,然后总结两个的区别
            break  退出当前循环
            continue  退出本次循环
        B:也可以带标签的使用

*/
class ContinueDemo {
    public static void main(String[] args) {
        //continue;

        for(int x=0; x<10; x++) {
            if(x%2==0) {
                //break;  //结束当前循环
                continue; //结束本次循环操作,进入下一次操作
            }
            System.out.println(x);
        }


        wc:for(int x=0; x<3; x++) {
            nc:for(int y=0; y<4; y++) {
                System.out.print("*");
                continue wc;
            }
            System.out.println();
        }
    }
}
/*
    return:结束方法的。
*/
class ReturnDemo {
    public static void main(String[] args) {
        for(int x=0; x<10; x++) {
            if(x%3==0) {
                //break;
                //continue;
                return;
            }
            System.out.println(x);
        }

        System.out.println("over");
    }
}

方法

/*
    方法:完成特定功能的代码块

    格式:
        修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
            方法体;
            return 返回值;
        }

    修饰符:public static
    返回值类型:功能最终的值的数据类型
    方法名:是为了方便调用而起的一个名字
    参数:
        形式参数:用于接受实际参数的变量
        实际参数:实际参与运算的数据
    方法体:完成特定功能的代码
    return 返回值:通过return把结果返回给调用者

    我们虽然知道了方法的格式,那么我们该如何写一个方法呢?
    两个明确:
        A:返回值类型
            结果的数据类型
        B:参数列表
            有几个参数参加,并且每个参数的数据类型是什么

    需求:求两个数据之和的案例
        A:我没有说数据的类型,默认int类型。
        B:求两个数据的和
            说明有两个参数参加,并且默认都是int类型
        C:两个int类型相加的结果是什么类型呢?
            是int类型,所以返回值类型这里是int类型

    方法的执行特点:
        不调用不执行。

    有明确返回值的方法的调用:
        A:单独调用,没有意义。
        B:输出调用,不是很好,因为我们可能需要针对结果还要进行其他的操作。
        C:赋值调用,推荐方式。
*/
class MethodDemo {
    public static void main(String[] args) {
        //定义两个变量
        int x = 10;
        int y = 20;

        //单独调用
        //sum(x,y);

        //输出调用
        System.out.println(sum(x,y));

        //赋值调用
        int result = sum(x,y);
        //result进行操作
        System.out.println(result);
    }

    //如果我自己要想写一个方法
    public static int sum(int a,int b) {
        int c = a + b;
        return c;
    }
}

方法重载

/*
    方法重载:
        在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
        和返回值类型无关。
*/
class MethodDemo {
    public static void main(String[] args) {
        //需求:请写一个功能,实现两个数据的求和
        System.out.println(sum(10,20));

        //需求:请写一个功能,实现三个数据的求和
        //System.out.println(sum2(10,20,30));
        System.out.println(sum(10,20,30));

        System.out.println(sum(1.5,2.5));
    }

    public static int sum(int a,int b) {
        return a + b;
    }

    /*
    public static int sum2(int a,int b,int c) {
        return a + b + c;

        //方法的嵌套调用
        //return sum(sum(a,b),c);
    }
    */

    //由于方法名要表达的其实是该方法的作用
    //所以,sum2这个名字不好,还是要用sum 比较好
    public static int sum(int a,int b,int c) {
        return a + b + c;
    }

    public static double sum(double a,double b) {
        return a + b;
    }
}

一维数组

/*
    数组:存储同一种数据类型的多个元素的集合。(也可以称为容器)

    数组的定义格式:
        格式1:数据类型[] 数组名;
            int[] arr;
        格式2:数据类型 数组名[];
            int arr[];

        推荐方式1。

    现在的数组没有元素,使用是没有意义的。
    接下来,我们要对数组进行初始化。
    那么,我们如何对数组进行初始化呢?
        动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
        静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

    动态初始化:
        数据类型[] 数组名 = new 数据类型[数组长度];

*/
class ArrayDemo {
    public static void main(String[] args) {
        //按照动态初始化数组的格式,我们来定义一个存储3个int类型元素的数组
        int[] arr = new int[3];

        /*
            左边:
                int:说明数组中的元素的数据类型。
                []:说明这是一个数组
                arr:数组的名称
            右边:
                new:为实体(对象)开辟内存空间
                    Scanner sc = new Scanner(System.in);
                int:说明数组中的元素的数据类型。
                []:说明这是一个数组
                3:说明的是数组中的元素个数
        */

        //我们如何获取里面的值呢?
        //数组名称
        System.out.println(arr); //[I@778b3fee 地址值
        //如何获取元素值呢?
        //数组为每个元素分配了一个编号,这个编号的专业叫法:索引。
        //而且是从0开始编号的。也就是说数组的最大编号是长度-1。
        //有了编号以后,我们就可以通过数组名和编号的配合取得数组元素
        //格式:数组名[编号];
        System.out.println(arr[0]); //0
        System.out.println(arr[1]); //0
        System.out.println(arr[2]); //0
    }
}

二位数组

/*
    二维数组:元素为一维数组的数组。

    定义格式1:
        数据类型[][] 变量名 = new 数据类型[m][n];
        
        m:m表示这个二维数组有多少个一维数组
        n:n表示每一个一维数组的元素个数

        变形:
            数据类型 变量名[][] = new 数据类型[m][n];
            数据类型[] 变量名[] = new 数据类型[m][n];

            int[] x,y[];
*/
class Array2Demo {
    public static void main(String[] args) {
        //定义一个二维数组
        int[][] arr = new int[3][2];
        //表示arr这个二维数组有三个元素
        //每个元素是一个一维数组
        //每一个一维数组有2个元素

        System.out.println(arr); //[[I@778b3fee
        System.out.println(arr[0]); //[I@57125f92
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        //如何输出元素呢?
        System.out.println(arr[0][1]);
        System.out.println(arr[2][2]);
    }
}

 

 To be continued

将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。 当美妙的华章响起,现实通往二进制的大门即将被打开。
相关文章
|
SQL Java 关系型数据库
IDEA+Java+JSP+Mysql+Tomcat实现Web学校教材管理系统
IDEA+Java+JSP+Mysql+Tomcat实现Web学校教材管理系统
234 0
IDEA+Java+JSP+Mysql+Tomcat实现Web学校教材管理系统
|
存储 Java 开发工具
IDEA+Java控制台实现教材管理系统
IDEA+Java控制台实现教材管理系统
133 0
IDEA+Java控制台实现教材管理系统
|
存储 Java 数据库
Eclipse+Java+Swing实现学校教材管理系统
Eclipse+Java+Swing实现学校教材管理系统
162 0
Eclipse+Java+Swing实现学校教材管理系统
|
9天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
10天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第9天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析Java中的同步机制,包括synchronized关键字、Lock接口以及并发集合等,并探讨它们如何影响程序的性能。此外,我们还将讨论Java内存模型,以及它如何影响并发程序的行为。最后,我们将提供一些实用的并发编程技巧和最佳实践,帮助开发者编写出既线程安全又高效的Java程序。
22 3
|
11天前
|
Java
Java 并发编程:深入理解线程池
【4月更文挑战第8天】本文将深入探讨 Java 中的线程池技术,包括其工作原理、优势以及如何使用。线程池是 Java 并发编程的重要工具,它可以有效地管理和控制线程的执行,提高系统性能。通过本文的学习,读者将对线程池有更深入的理解,并能在实际开发中灵活运用。
|
9天前
|
算法 Java 开发者
Java中的多线程编程:概念、实现与性能优化
【4月更文挑战第9天】在Java编程中,多线程是一种强大的工具,它允许开发者创建并发执行的程序,提高系统的响应性和吞吐量。本文将深入探讨Java多线程的核心概念,包括线程的生命周期、线程同步机制以及线程池的使用。接着,我们将展示如何通过继承Thread类和实现Runnable接口来创建线程,并讨论各自的优缺点。此外,文章还将介绍高级主题,如死锁的预防、避免和检测,以及如何使用并发集合和原子变量来提高多线程程序的性能和安全性。最后,我们将提供一些实用的性能优化技巧,帮助开发者编写出更高效、更稳定的多线程应用程序。
|
7天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第11天】 在Java中,高效的并发编程是提升应用性能和响应能力的关键。本文将探讨Java并发的核心概念,包括线程安全、锁机制、线程池以及并发集合等,同时提供实用的编程技巧和最佳实践,帮助开发者在保证线程安全的前提下,优化程序性能。我们将通过分析常见的并发问题,如竞态条件、死锁,以及如何利用现代Java并发工具来避免这些问题,从而构建更加健壮和高效的多线程应用程序。
|
22小时前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
1天前
|
安全 Java 调度
Java并发编程:深入理解线程与锁
【4月更文挑战第18天】本文探讨了Java中的线程和锁机制,包括线程的创建(通过Thread类、Runnable接口或Callable/Future)及其生命周期。Java提供多种锁机制,如`synchronized`关键字、ReentrantLock和ReadWriteLock,以确保并发访问共享资源的安全。此外,文章还介绍了高级并发工具,如Semaphore(控制并发线程数)、CountDownLatch(线程间等待)和CyclicBarrier(同步多个线程)。掌握这些知识对于编写高效、正确的并发程序至关重要。