zoukankan      html  css  js  c++  java
  • Java SE(二)——java语言基础

    一、Java程序预览

    Java的语法与C非常类似,这里先使用几个非常简单的程序以点带面来区分C语Java的区分再细讲每个知识点。该文仅针对有编程基础的朋友参考。

    1.1、Hello World

    创建java项目

    新建一个类

     

    运行

    1.2、Eclipse使用

    1.2.1、项目位置

    在项目上右键 ->properties ->location

    在项目上alt+enter键也可以打开项目属性

    1.2.2、重置窗口布局

    显示窗口,如控制台

    选择show view

    1.2.3、设置字体

     

    window->preferences

    1.2.4、修改控制台字体

    1.2.4、项目的导入与保存

     点击选择项目

     

    完成

    1.2.5、修改快捷键

    默认快捷键为alt+/,可以修改为其它习惯的快捷键,如tab,tab

    1.2.6、重命名

    有时我们需要将类名或文件名修改,不能随意的原因是因为一个类可能被其它的类所引用

    1.2.7、编码

    Window -> Preferences -> General -> Workspace -> Text file encoding -> Other

    万国码 unicode

    utf-8 gb-2312-80 big5

    Window -> Preferences -> Web -> JSP Files -> Text file encoding-> Other:

    1.2.8、设置JDK本地JavaDOC API路径及源码路径

    在需要代码提示时,可能经常会遇到这样的情况: 

     

    还都生成的是无意义的变量名,这样可能会对含有相同类型的变量参数的调用顺序造成干扰;

    这种问题,我们把JDK或者相应Jar包的源码导入进去就能避免了:

    Window -> Preferences -> Java -> Installed JREs -> Edit:

     

    选中设置好的JRE目录,编辑,然后全选 JRE system libraries 下的所有Jar包,点击右边的 Source Attachment;

     

    External location 下,选中JDK安装目录下的  src.zip 文件,一路OK 下来。

     

    设置完,我们再来看看,幸福来的好突然有木有!

     

    1.3、快捷键

    1.3.1、Eclipse快捷键大全

    Ctrl+1 快速修复(最经典的快捷键)

    Ctrl+D: 删除当前行

    Ctrl+Alt+↓ 复制当前行到下一行(复制增加)

    Ctrl+Alt+↑ 复制当前行到上一行(复制增加)

    Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)

    Alt+↑ 当前行和上面一行交互位置(同上)

    Alt+← 前一个编辑的页面

    Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)

    Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性

    Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)

    Shift+Ctrl+Enter 在当前行插入空行(原理同上条)

    Ctrl+Q 定位到最后编辑的地方

    Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)

    Ctrl+M 最大化当前的Edit或View (再按则反之)

    Ctrl+/ 注释当前行,再按则取消注释

    Ctrl+O 快速显示 OutLine

    Ctrl+T 快速显示当前类的继承结构

    Ctrl+W 关闭当前Editer

    Ctrl+K 参照选中的Word快速定位到下一个

    Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)

    Ctrl+/(小键盘) 折叠当前类中的所有代码

    Ctrl+×(小键盘) 展开当前类中的所有代码

    Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)

    Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)

    Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)

    Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)

    Ctrl+Shift+F4 关闭所有打开的Editer

    Ctrl+Shift+X 把当前选中的文本全部变味小写

    Ctrl+Shift+Y 把当前选中的文本全部变为小写

    Ctrl+Shift+F 格式化当前代码

    Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

    下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)

    Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)

    Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)

    Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)

    Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)

    Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)

    Alt+Shift+I 合并变量(可能这样说有点不妥Inline)

    Alt+Shift+V 移动函数和变量(不怎么常用)

    Alt+Shift+Z 重构的后悔药(Undo)

    1.3.2、

    二、类型

    2.1、java中常用的类型

    2.2、自动转换

    小转大,类型匹配

    double d=5;

    String s="Hello"+9527

    2.3、强制转换

    大转小,类型适应(数字转数字)

    int i=(double)198.5;

    2.4、不同类型间的强制转换

    复制代码
            String name = "9527";
            int brother = Integer.parseInt(name) + 1;
            System.out.println(brother);
    
            double d = Double.parseDouble(name);
            Boolean.parseBoolean(name);
            float f = Float.parseFloat(name);
    复制代码

    输出:

    三、输入

    复制代码
    package com.zhangguo.chapter1;
    
    //导入包,同一个包不用导入直接使用,不同的包需导入
    import java.util.Scanner;
    import com.zhangguo.chapter1.Math1;
    
    /**
     * 输入
     * @author Administrator
     *
     */
    public class Math2 {
        
        public static void main(String[] args) {
            //定义扫描器
            Scanner input=new Scanner(System.in);
            
            //定义变量
            int n=input.nextInt();  //等待输入
            
            //String name=input.next();  //输入字符
            //float mark=input.nextFloat();  //输入单精度数字
            //double pi=input.nextDouble();  //输入双精度数字
            
            //条件 判断
            if(n==0){
                System.out.println("零");
            }else if(n%2==1){  //如果一个数与2求余为1
                System.out.println("奇数");
            }else{
                System.out.println("偶数");
            }
        }
    
    }
    复制代码

    a)、导入包,导入类

    同一个包中的类可以直接引用

    不同包中的类型需要导入,使用import,import java.util.Scanner;

    如需使用某个包下的所有类,则使用*号,如import java.util.*;

    b)、输入

    定义扫描器

    使用扫描器对象的next*()方法

    复制代码
    package com.zhangguo.chapter1;
    
    //导入包,同一个包不用导入直接使用,不同的包需导入
    import java.util.Scanner;/**
     * 输入
     * @author Administrator
     *
     */
    public class Math2 {
        
        public static void main(String[] args) {
            //定义扫描器
            Scanner input=new Scanner(System.in);
            
            System.out.print("请输入一个数:");
            //定义变量
            int n=input.nextInt();  //等待输入
            
            //String name=input.next();  //输入字符
            //float mark=input.nextFloat();  //输入单精度数字
            //double pi=input.nextDouble();  //输入双精度数字
            
            //条件 判断
            if(n==0){
                System.out.println("零");
            }else if(n%2==1){  //如果一个数与2求余为1
                System.out.println("奇	数");
            }else{
                System.out.println("偶数");
            }
        }
    
    }
    复制代码

    四、流程控制

    4.0、if条件分支

    判断一个数是奇数还是偶数

    复制代码
    package com.zhangguo.chapter1;
    
    /**
     * 判断一个数是奇数还是偶数
     * @author Administrator
     *
     */
    public class Math1 {
        
        public static void main(String[] args) {
            //定义变量
            int n=0;
            
            //条件 判断
            if(n==0){
                System.out.println("零");
            }else if(n%2==1){  //如果一个数与2求余为1
                System.out.println("奇数");
            }else{
                System.out.println("偶数");
            }
        }
    
    }
    复制代码

    4.1、for循环

    for循环计算1到该数间能被3和5同时整除的数之和

    复制代码
    package com.zhangguo.chapter1;
    
    //导入包,同一个包不用导入直接使用,不同的包需导入
    import java.util.Scanner;
    
    /**
     * 计算1到该数间能被3和5同时整除的数之和
     * 
     * @author Administrator
     *
     */
    public class Math3 {
    
        public static void main(String[] args) {
            // 定义扫描器
            Scanner input = new Scanner(System.in); // 默认的提示 alt+/
    
            // 提示输入
            System.out.print("请输入一个数:");
    
            // 执行输入
            int n = input.nextInt();
            int sum = 0;
    
            // 循环
            for (int i = 1; i <= n; i++) {
    
                // 判断,逻辑运算,与C一样,&&与,||或,!非
                if (i % 3 == 0 && i % 5 == 0) {
                    // 累加
                    sum = sum + i;
                }
            }
    
            System.out.println("总和是:" + sum);
        }
    
    }
    复制代码

    运行结果:

    4.2、while循环

    while循环计算1到该数间能被3和5同时整除的数之和

    复制代码
    package com.zhangguo.chapter1;
    
    import java.util.Scanner;
    
    /**
     * while循环计算1到该数间能被3和5同时整除的数之和
     *
     */
    public class Math6 {
    
        public static void main(String[] args) {
            Scanner input=new Scanner(System.in);
            System.out.print("请输入一个数:");
            int n=input.nextInt();
            int i=1,sum=0;
            
            while(i<=n){
                if(i%3==0&&i%5==0){
                    sum=sum+i;
                }
                i++;
            }
            
            System.out.println("总和是:"+sum);
        }
    
    }
    复制代码

    break:结束当前循环

    复制代码
    package com.zhangguo.chapter1;
    
    import java.util.Scanner;
    
    /**
     * while循环计算1到该数间能被3和5同时整除的数之和
     *
     */
    public class Math6 {
    
        public static void main(String[] args) {
            Scanner input=new Scanner(System.in);
            System.out.print("请输入一个数:");
            int n=input.nextInt();
            int i=1,sum=0;
            
            while(i<=n){
                if(i%3==0&&i%5==0){
                    sum=sum+i;
                    System.out.println(i);
                    break;
                }
                i++;
            }
            
            System.out.println("总和是:"+sum);
            System.out.println("i的值:"+i);
        }
    
    }

    复制代码

    continue:结束当次循环,继续下一次循环

    复制代码
    package com.zhangguo.chapter1;
    
    import java.util.Scanner;
    
    /**
     * while循环计算1到该数间能被3和5同时整除的数之和
     *
     */
    public class Math7 {
    
        public static void main(String[] args) {
            Scanner input=new Scanner(System.in);
            System.out.print("请输入一个数:");
            int n=input.nextInt();
            int i=1,sum=0;
            
            while(i<=n){
                if(i%3==0&&i%5==0){
                    sum=sum+i;
                }
                i++;
                if(i<=15) {continue;}
                System.out.println(i);
            }
            
            System.out.println("总和是:"+sum);
            System.out.println("i的值:"+i);
        }
    
    }
    复制代码

    4.3、do-while循环

    do-while 输入年龄,介于1-100之间

    复制代码
    package com.zhangguo.chapter1;
    
    import java.util.Scanner;
    
    /**
     * do-while 输入年龄,介于1-100之间
     *
     */
    public class Math8 {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            int age = 0;
    
            do {
                System.out.print("请输入年龄:");
                age = input.nextInt();
            } while (age < 1 || age > 100);   //条件为真,循环继续
    
            System.out.println("年龄是:" + age);
        }
    
    }
    复制代码

    4.4、if-else多条件分支

    if-else 输入购物金额,完成商场打折功能

    0-99 打9折

    100-500 打8折

    500以上打7折

    复制代码
    package com.zhangguo.chapter1;
    
    import java.util.Scanner;
    
    /**
     * do-while 输入年龄,介于1-100之间
     *
     */
    public class Math8 {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            int age = 0;
            String range = "";
    
            do {
                System.out.print("请输入年龄:");
                age = input.nextInt();
            } while (age < 1 || age > 100); // 条件为真,循环继续
    
            System.out.println("年龄是:" + age);
    
            if (age >= 0 && age <= 30) {
                range = "青年";
            } else if (age >= 31 && age <= 60) {
                range = "中年";
            } else if (age >= 61 && age <= 90) {
                range = "老年";
            } else {
                range = "晚年";
            }
    
            System.out.println("年龄段是:" + range);
    
        }
    
        // 0-30 青年
        // 31-60 中年
        // 61-90 老年
        // 晚年
    
    }
    复制代码

     

    4.5、switch开关分支

    switch 输入1-7 输出星期一到星期天

    等值比较

    复制代码
    package com.zhangguo.chapter1;
    
    import java.util.Scanner;
    
    public class Math9 {
    
        public static void main(String[] args) {
            
            Scanner input = new Scanner(System.in);
            int week = 0;
            System.out.print("请输入周:");
            week = input.nextInt();
            
            switch (week) {   //char int
            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;
            }
            
            
            
        }
    
    }
    复制代码

    五、包与注释

    a)、指定包名,相当于文件夹,一般使用倒置的域名如(com.baidu.项目名)

    整理代码

    避免冲,如一个项目中有多个同名的类,可以处在不同的包中间

    类可以不在任何包中,一个包中也可以有0-N个类

    包与文件夹一一对应

    包的声明要放在第一行

    b)、类型名,首字母大小

    c)、代码中自动插入:public static void main(String[] args)

    复制代码
    //包名,1单行注释
    package com.zhangguo.chapter1;
    
    /**
     * 判断一个数是奇数还是偶数
     * @author 张果
     *2文档注释
     */
    public class Demo1 {
    
        /*
         * 主方法,程序的入口
         * 3多行注释
         */
        public static void main(String[] args) {
            //语句
            System.out.println("Hello World!");
        }
    
    }
    复制代码

    e)、注意java中有3种类型的注释

    六、数组

    Java 语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,....,number99

    6.1、 一维数组

    a)、计算5位同学的平均成绩

    复制代码
    package com.zhangguo.chapter1;
    
    public class Math91 {
    
        public static void main(String[] args) {
            int[] a=new int[10];
            
            for (int i = 0; i < a.length; i++) {
                a[i]=i*i;
            }
            
            for (int i = 0; i < a.length; i++) {
                System.out.println(a[i]);
            }
            
        }
    
    }
    复制代码

      输出:

    求平均成绩与总分

    复制代码
    package com.zhangguo.chapter2;
    
    import java.util.Scanner;
    
    public class Array2 {
    
        public static void main(String[] args) {
            //统计平均成绩
            //实例化(创建)长度为5的数组
            int[] scores=new int[5];
            int sum=0;
            //int[] scores2={20,30,50,90,100,99,19,78};
            //int[] scores3=new int[]{20,30,50,90,100,99,19,78};
            //int[] scores2=new int[8];
            //scores2[0]=20;
            //scores2[1]=30; //...
            
            //输入器
            Scanner input=new Scanner(System.in);
            
            //scores.length 数组的长度
            for (int i = 0; i <scores.length; i++) {
                scores[i]=input.nextInt();
            }
            
            //遍历数组
            for (int i = 0; i < scores.length; i++) {
                sum=sum+scores[i];
            }
            
            System.out.println("总分是:"+sum+",平均分:"+(sum/scores.length));
        }
    
    }
    复制代码

    复制代码
    package com.zhangguo.chapter2;
    
    import java.util.Scanner;
    
    public class Array2_2 {
    
        public static void main(String[] args) {
            //统计平均成绩
            //实例化(创建)行为3的数组,列为2的数组
            double[][] scores=new double[3][2];
            double sum=0;
            int n=0;  //个数,输入
            
            //输入器
            Scanner input=new Scanner(System.in);
            
            //scores.length 数组的长度
            for (int i = 0; i <scores.length; i++) {
                for (int j = 0; j < scores[i].length; j++) {
                    scores[i][j]=input.nextDouble();
                    n++;
                }
            }
            
            //遍历数组
            for (int i = 0; i <scores.length; i++) {
                for (int j = 0; j < scores[i].length; j++) {
                    sum+=scores[i][j];   //sum=sum+scores[i][j]; 
                }
            }
            
            System.out.println("总分是:"+sum+",平均分:"+(sum/n));
        }
    
    }
    复制代码

    6.2、二维数组

    6.2.1、二维数组的定义与使用基础

    定义数组并赋初值:

    复制代码
    package zhangsan;
    
    public class C1 {
    
        public static void main(String[] args) {
            System.out.println("Hello");
    
            int[][] a = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
            
            System.out.println(a[0][2]);
            
            for (int i = 0; i < a.length; i++) {  //行
                
                for (int j = 0; j < a[i].length; j++) {  //列
                    System.out.print(a[i][j]+" ");
                }
                System.out.println();
            }
    
        }
    
    }
    复制代码

      输出:

    6.2.2、二维数组赋值

    定义数组并赋值

    复制代码
    package zhangsan;
    
    import java.util.Scanner;
    
    public class C2 {
    
        public static void main(String[] args) {
    
            int sum=0;
            Scanner input=new Scanner(System.in);
            
            int[][] a = new int[3][2];
            
            //a[0][0]=98;
            //a[0][1]=89;
            
            for (int i = 0; i < a.length; i++) {
                for (int j = 0; j < a[i].length; j++) {
                    System.err.print("请输入a["+i+"]["+j+"]=");
                    a[i][j]=input.nextInt();
                }
            }
            
            for (int i = 0; i < a.length; i++) {  //行
                for (int j = 0; j < a[i].length; j++) {  //列
                    sum+=a[i][j];
                }
            }
            
            System.out.println(sum);
    
        }
    
    }
    复制代码

     输出:

    6.2.3、二维数组应用

    有3名同学,每名同学有语文与数学考试成绩,求平均分与总分?

    复制代码
    package com.zhangguo.chapter2;
    
    import java.util.Scanner;
    
    public class Array2_2 {
    
        public static void main(String[] args) {
            //统计平均成绩
            //实例化(创建)行为3的数组,列为2的数组
            double[][] scores=new double[3][2];
            double sum=0;
            int n=0;  //个数,输入
            
            //输入器
            Scanner input=new Scanner(System.in);
            
            //scores.length 数组的长度
            for (int i = 0; i <scores.length; i++) {
                for (int j = 0; j < scores[i].length; j++) {
                    scores[i][j]=input.nextDouble();
                    n++;
                }
            }
            
            //遍历数组
            for (int i = 0; i <scores.length; i++) {
                for (int j = 0; j < scores[i].length; j++) {
                    sum+=scores[i][j];   //sum=sum+scores[i][j]; 
                }
            }
            
            System.out.println("总分是:"+sum+",平均分:"+(sum/n));
        }
    
    }
    复制代码

    运行结果:

    6.2.4、方法与排序

    java中内置了非常多的工具方法如Math类、Arrays类等,使用sort可以实现给数组排序:

    复制代码
    package com.zhangguo.chapter2;
    
    import java.util.Arrays;
    
    public class Method {
    
        public static void main(String[] args) {
            int a=1,b=2;
            int max=a>b?a:b;  //三目
            System.out.println(max);
            
            //算术
            System.out.println(Math.max(9, 10));
            
            int[] a1={8,9,1,3,4,5,0,-1};
            
            //排序
            Arrays.sort(a1);
            
            for (int i = a1.length-1; i>=0; i--) {
                System.out.print(a1[i]+" ");
            }
            
            
            //字符,字符串比较只能用equals, ==
            String x="abc";
            System.out.println(x.equals("abc"));
            System.out.println("abc"==x);
        }
    
    }
    复制代码

    ?:表达式的作用是如果表达式1为真则返回或执行第2个表达式,如果表达式为假则执行或返回第3个表达式

    表达式1?表达式2:表达式3

    如:int min=a<b?a:b;

    七、练习与笔记

    请说出下面程序的运行结果?

    复制代码
    package a.b.c.d;
    
    public class Test {
    
        public static void main(String[] args) {
            for (int i = 1; i <=10; i++) {
                if(i%2==0){
                    System.out.print("a");
                }else if(i%3==0){
                    System.out.print("b");
                }else {
                    System.out.print("c");
                }
            }
        }
    }
    复制代码

    cabacacaba

    break在程序中的作用是什么?他能用在那些结构中?

    复制代码
    package a.b.c.d;
    
    public class Test2 {
    
        public static void main(String[] args) {
            for (int i = 0; i <10; i++) {
                if(i%2==0){
                    System.out.print("a");
                }else if(i%7==0){
                    System.out.print("b");
                    break;
                }else {
                    System.out.print("c");
                }
            }
        }
    }
    复制代码

     acacacab

    continue在程序中的作用是什么?他能用在那些结构中?

    当输入0、2、7时程序分别输出什么?

    复制代码
    package a.b.c.d;
    
    import java.util.Scanner;
    
    public class TestC {
    
        public static void main(String[] args) {
            Scanner input=new Scanner(System.in);
            String[] weeks={"天","一","二","三","四","五","六"};
            int index=input.nextInt();
            System.out.println("星期"+weeks[index]);
        }
    }
    复制代码

    上机练习,用户注册示例

    复制代码
    package com.zhangguo.chapter2;
    
    import java.util.Scanner;
    
    /**
     * 注册
     *
     */
    public class Math9 {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            String uid,pwd;
            String flag;
    
            do {
                System.out.print("请输入帐号:");
                uid = input.next();
                System.out.print("请输入密码:");
                pwd = input.next();
                System.out.println("注册成功,您的用户为:"+uid+"	密码:"+pwd);
                
                System.out.print("是否继续(y/n):");
                flag=input.next();
            } while (flag.equals("y"));   //条件为真,循环继续
    
        }
    
    }
    复制代码

    运行结果:

    八、推荐学习网站

    http://www.maiziedu.com/

    http://www.imooc.com/

    http://www.jikexueyuan.com/

     https://ke.qq.com/

    http://www.chuanke.com/

    八、示例与视频

    第一次视频:http://pan.baidu.com/s/1bp7pTjL

    JDK8下载:http://pan.baidu.com/s/1nuSuIKT

    Eclipse下载:http://pan.baidu.com/s/1c2koakg

    第三次视频:http://pan.baidu.com/s/1mhAfWSg (JavaSE_第2章第3次_数组,方法,复习流控)

    上课示例:http://files.cnblogs.com/files/best/JavaSE02.7z

    作业:

    在这里找 http://www.cnblogs.com/best/p/5991771.html 5个题

    在这里找 http://www.cnblogs.com/best/p/5991751.html 5个题

    所有课后练习,包含预习,简答,编程 All

  • 相关阅读:
    JavaSE学习(二):进制转换—数据类型转换—Java运算符
    JavaSE学习(五):数组及其基础操作
    iOS工作中的经验总结—马甲包审核以及常见审核问题!!!(干货)
    月薪过万不是梦!2018年最全/最新Python面试题(整理汇总)
    Python:爬虫技巧总结!
    【转】maven学习(下) 利用Profile构建不同环境的部署包
    【转】maven学习(上) 基本入门用法
    Java从控制台获取数据的方法
    【转】LinkedHashMap实现由插入集合的顺序输出
    浅谈String/StringBuffer/StringBuilder字符串的拼接
  • 原文地址:https://www.cnblogs.com/jiekun/p/6648395.html
Copyright © 2011-2022 走看看