目录

一、编写第一个java程序

1、java的基本格式

二、变量和数据类型以及运算符

1、进制的转换

2、 变量的使用

 2.1变量的分类

3、常量

4、数据类型

4.1整型的使用

4.2浮点类型

4.3字符类型

4.4boolean类型

5、运算符

5.1字符串连接符

5.2运算符优先级

5.3类型转换问题

三、java中实现简单的键盘输入

四、控制语句

1、条件判断语句

1.1if单分支结构

1.2if-else双分支结构

1.3if-else多分支结构

2、switch语句

2.1switch多分支结构(多值情况)

3.循环语句

3.1while循环

3.2do-while循环

3.3for循环

3.4嵌套循环 

3.5break和continue

3.6循环使用的练习

4、方法

4.1方法的声明及调用

4.2方法的重载

5、递归 


java第一周学习,前面的部分内容与c++语法基本一致,因此本周学习笔记当作c++复习以及对java入门的认知。

一、编写第一个java程序

1、java的基本格式

以输出hello world为例:

public class test {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

 注意大小写不可以搞错。

二、变量和数据类型以及运算符

1、进制的转换

二进制、十进制、八进制、十六进制的相互转换与c++相同。

2、 变量的使用

java入门推荐 java入门级_System

 变量使用的要求和c++也是一致的。

注意:标识符开头不能是数字。

 在学习之后的方法时上网查询了定义局部变量,类变量 ,实例变量的定义方法,在此先进行了解,之后学习中慢慢深入。

/**
 * 此段代码来自于JavaSE知识库
 */
public class TestTwo {
      //以下四个变量都是成员变量(全局变量)
      int num ;                         //属于基本数据类型的实例变量
      Integer obj ;                     //属于引用数据类型的实例变量
      static char ch = 'A';             //类变量(静态变量)
      final double constant= 12.6;      //属于常量的实例变量
     
     
      public void display(){
             //以下两个属于该方法的局部变量,必须先赋值才能使用,作用范围仅限于函数体之内
             int age = 1;
             String name = "Tom";
             System.out.println("name:"+name+";age: "+age);
      }
     
     
      public static void main(String[] args){
             System.out.println(num);           //这句会报错,因为num变量属于实例变量,只有将Test实例化之后才能使用
             System.out.println(Test.ch);       //这句则不会报错,因为ch属于类变量,不用实例化Test也能使用
            
             Test test = new Test();
             System.out.println(test.num);      //num为基本数据类型,打印出的默认值为0
             System.out.println(test.obj);      //obj为引用数据类型,打印出的默认值为null
      }
}

 2.1变量的分类

接触了一部分面向对象,现在对变量的定义及使用有了更深的了解,现在返回来添加部分内容。

变量分为局部变量,成员变量(实例变量)和静态变量。具体使用如下:

java入门推荐 java入门级_java入门推荐_02

3、常量

常量是一个固定的值,一旦初始化就不可再次更改。

c++中初始化常量时候使用的是define,而java中使用的是final。

4、数据类型

java中数据类型可以分为基本数据类型和引用数据类型

基本数据类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)、char(2字节)、boolean(1字节)。

引用数据类型:class(类)、interface(接口)、数组。

基本数据类型的使用与c++基本一致,引用数据类型之后再进行讨论。

4.1整型的使用

整型的使用在变量中以及提及,这里不做举例。

4.2浮点类型

public class test {
    public static void main(String[] args) {
        float a=3.14f;//float类型赋值的时候后面要加一个f,不然默认为double类型,double类型不能直接赋值给float类型。
        System.out.println(a);
        double c=3.1454;
        System.ouy.println(c);
    }
}

4.3字符类型

public class test {
    public static void main(String[] args) {
        char a='中';//由于java中使用的是unicode编码,因此可以直接输出汉字。                                                                             
        System.out.println(a);
        char c='\u0061';//java中字符型的十六进制表示方法。
        System.out.println(c);
        String str=”我爱中国“;
        System.out.println(str);
      
    }
}

注意:以后我们所学的String表示字符串,本质是char类型构成的数组。java中的字符串不是基本数据类型,而是一个独立定义的类。

java入门推荐 java入门级_c++_03

以上的转义字符会经常使用,要熟记。

4.4boolean类型

注意点:java中不能用0和非0代表true和false,与c++不同。

public class test {
    public static void main(String[] args) {
      boolean a=true;
      boolean b=false;
      if(a)System.out.println("ture");
      else System.out.println("false");
    }
}

5、运算符

java中各类运算符: 

java入门推荐 java入门级_System_04

 赋值运算符、扩展运算符、关系运算符、逻辑运算符,位运算符,条件运算符等等在c++中接触较多再此不具体介绍。

 注意,位运算符是指进行二进制位的运算,&等都是按位计算,另外<<左移运算符相当与乘2,>>右移运算符相当于除以2。

5.1字符串连接符

"+"运算符两侧操作数只要有一个是字符串(String类型,系统会自动把另一个操作数转换为字符串进行连接。

public class test {
    public static void main(String[] args) {
        String a="3";
        int b=4;
        System.out.println(a+b);//输出结果34。
        System.out.println("b="+b);//java中输出结果为b=4这种模式时,就要使用到字符串连接符,因此十分重要。

    }
}

5.2运算符优先级

由于在学习c++时对这块内容就不是很熟悉,因此在学习java时将此内容捎带复习。

java入门推荐 java入门级_c++_05

5.3类型转换问题

类型转换分为自动类型转换和强制类型转换。

强制类型转换:用于强制转换一个数据的类型,c++中使用较多,这里不提及。

自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。

java入门推荐 java入门级_c++_06

特例:int类型可以转换为byte,short和char类型。 

注意!类型转换较大数字的时候 ,要注意溢出。

三、java中实现简单的键盘输入

键盘输入:Scanna 

import java.util.Scanner;
public class test {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        System.out.println("请输入你的用户名");
        String uname=s.nextLine();//输入一个字符串
        System.out.println("请输入你的年龄:");
        int age=s.nextInt();
        System.out.println("请输入你的月薪:");
        double month=s.nextDouble();
        System.out.println("程序运行结束");
        System.out.println("用户名:"+uname+" 年龄:"+age+" 月薪:"+month);
    }
}

注意,在开头要加上import。

java入门推荐 java入门级_java入门推荐_07

 

四、控制语句

1、条件判断语句

1.1if单分支结构

语法结构:

if(布尔表达式){
语句块;
}

1.2if-else双分支结构

语法结构:

if(布尔表达式){
语句块;
}
else{
语句块2;
}

1.3if-else多分支结构

语法结构:

if(布尔表达式1){
语句块1;
}
else if(布尔表达式2){
语句块2;
}
else if(布尔表达式3){
语句块3
}
....
else if(布尔表达式n){
语句块n;
}
else{
语句块n+1;
}

2、switch语句

2.1switch多分支结构(多值情况)

语法结构:

switch(表达式){
    case 值1:
        语句 1;
        break;
    case 值2:
        语句 2;
        break;
  [default:
        默认语句;]
}

3.循环语句

3.1while循环

语法结构:

while(布尔表达式){
    循环体;
}

3.2do-while循环

语法结构:

do{
    循环体;
}while(布尔表达式);

注意:while和dowhile的循环体在java中不能使用while(a)或者while(1)这种格式,只能使用while(true)。 

3.3for循环

语法结构:

for(初始表达式;布尔表达式;迭代因子){
    循环体;
}

3.4嵌套循环 

3.5break和continue

break:中断循环,不执行剩下的循环语句。

continue:结束本次循环,进行下一次的循环。

带标签的break和continue语句直接使用,比如:continue outer; 

3.6循环使用的练习

用年薪计算来练习循环语句,因为本次练习存在ScannerLine和ScannerInt使用时缓冲区有回车的解决方法以及对字符串判断的相关事项,因此作为对于循环的一次练习。

package studyday1;
import java.util.Scanner;//使用Scanner类,目前的学习实现键盘输入的方法。
public class study2 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);//Scanner类的使用实现键盘输入。
            System.out.println("年薪计算程序");
            System.out.println("exit退出程序,next计算下一个年薪");
            while (true) {
                System.out.println("请输入月薪:");
                int monthSalary = scanner.nextInt();//获得一个整数。
                int yearSalary = monthSalary * 12;
                System.out.println("年薪是" + yearSalary);

                System.out.println("请输入命令(exit,next. 其他任意字符表示继续执行):");
                scanner.nextLine();//把之前读取整数时,缓冲区内所存在的输入的回车符读取,才能够用command读取新的字符串。如果不存在,则会直接跳过。
                String command= scanner.nextLine();//键盘获取一行字符串,目前所学前面一定要加一个scanner.nextLine()读取之前输入的回车。
                System.out.println(command+"=======");
                //注意!!这里的判断不能这么使用if("exit"==command),用等号表示对象的判断,这里要的是值的判断,因此无法使用。现阶段可以用数字代替退出按钮。
                if("exit".equals(command)){//判断字符串是否为exit和next。
                    System.out.println("退出软件");
                    break;
                }
                if ("next".equals(command)){
                 System.out.println("请重新输入新的数据......");
                 continue;
                }

                if(yearSalary>100000&&yearSalary<200000){
                    System.out.println("你的年薪超过了90%的人");
                }
                if (yearSalary>=200000){
                    System.out.println("恭喜你,你的年薪粗熬过了98%的人");
                }
            }
        }
    }

4、方法

方法就是一段完成特定功能的代码片段,类似于其他语言的函数。面向过程中,函数是最基本的单位,整个程序由若干个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。

4.1方法的声明及调用

方法的声明格式:[修饰符1 修饰符2...]  返回值类型  方法名(形式参数列表){
java语句;....
}
方法的调用格式:对象名.方法名(实参列表)
例子:

package studyday1;
public class study2 {
    public static void loveJava(int num) {//在java中,定义方法public static必须加,原因之后会了解。
//这里的void就和c++中的void a(){}一致,是没有返回值的,改为int就有返回值,并且最后用ruturn接收
        System.out.println("I love java"+num);
        System.out.println("I love java"+num);
    }
    public static void main(String[] args){
       loveJava(1);
       loveJava(100);
    }
}

4.2方法的重载

方法的重载是指一个类中可以定义多个方法名相同,但是形参不同的方法,根据不同的参数自动匹配对应的方法。

注意:重载中不同是指形参的个数,形参的类型,形参的顺序不同,形参的名称不同以及只有返回值不同(比如int a(String str)和void a(Strng str))不构成重载。

例子:
定义时:
public static int add(){
return 0;
}
public static int add(int a,int b){
return a+b;
}
调用时:
add();//进行第一个方法的调用
add(3,4);//进行第二个方法的调用

重载为了表达一个相同含义,比如都是add相加,一个2个整数相加,一个3个整数相加,一个2个浮点数相加,为了让其他人方便查看以及调用,就使用重载。

5、递归 

递归的基本思想就是“自己调用自己”。

递归结构体包括两个部分:定义递归头(什么时候不调用自己,如果没有递归头会出现死循环)和递归体(什么时候需要调用自己的方法)。

package studyweek4;

public class 递归 {
    //求阶乘

    public static void main(String[] args) {
        long d1 = System.currentTimeMillis();
        long result=factorial(5);
        System.out.println("阶乘的结果是:"+result);
    }
       static long factorial (int n){
            if (n == 1) {//递归头
                return 1;
            } else {
                return n * factorial(n - 1);
            }
        }
}

接下来接触一个求耗时的代码

long d1=System.currentTimeMillis();