java 语言笔记

java简介

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

Java是SUN公司的产品,从1996年发布JDK1.0以来,经过多年的发展陆续发布了JDK1.1,JDK1.2,JDK1.3,JDK1.4,JDK1.5版本。2009年,甲骨文(Oracle)公司宣布收购SUN,甲骨文公司又陆续发布了JDK6.0,JDK7.0,2014年发布了JDK8.0版本。
作者:詹姆斯·高斯林

JDK(Java Development Kit)称为Java开发包,是一个编写Java应用程序的程序开发环境。JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一些Java工具和Java的核心类库(Java API)。可以把Java API类库中的Java SE API子集和Java虚拟机这两部分统称为JRE(JAVA Runtime Environment),JRE是支持Java程序运行的标准环境。

JRE是个运行环境,JDK是个开发环境。因此写Java程序的时候需要JDK,而运行Java程序的时候就需要JRE。而JDK里面已经包含了JRE,因此只要安装了JDK,就可以编辑Java程序,也可以正常运行Java程序。

JVM是Java Virtual Machine(Java虚拟机)的缩写。JVM是java的核心和基础,是java编译器和OS平台之间的虚拟处理器,主要用于实现Java跨平台。

第一个示例程序

安装JDK并配置好环境变量(见主页JDK环境安装)后就可以进行java编程了,下面编写一个入门级别的Java程序来体验Java开发的神奇之旅。开发一个Java程序分3步,如下:

  1. 创建Java源程序即一个.java文件。

  2. 将源程序编译为字节码文件即.class文件。

  3. 执行字节码文件。

1.创建Java源程序

在C盘根目录下创建一个目录,命名为java,在c:\java目录中新建一个记事本文件,将该文件命名为HelloWorld.java。在HelloWorld.java文件中输入下面的代码。

/**                       
*   HelloWorld程序 
**/                      
public class HelloWorld{    
/**
*main方法是程序的入口点  
**/ 
    public static void main(String[] args){     
        System.out.println("HelloWorld");   
    }
}

2.将源文件编译为字节码文件

字节码文件是以.class结尾的文件,字节码文件通过Javac编译器编译出来的。

打开控制台,在控制台中使用Java编译器命令(javac)将java源文件编译成字节码文件,字节码文件是以.class为扩展名的文件。编译后会在C盘根目录下产生编译完的HelloWorld.class字节码文件,字节码文件是不允许修改的,只能修改源文件后重新生成字节码文件。

javac  文件名.java

3.运行字节码文件

在控制台中使用java解释器命令(java)运行HelloWorld字节码文件,显示java程序运行结果。

java 文件名

 变量命名规范

​ 命名规范:

​ 1)只能使用$,字母,数字,_,不能以数字开头

​ 2)不能使用关键字。public class static void String

​ 3)  要见名知意 age name score

​ 4)使用驼峰法(Camel命名法),第一个单词首字母小写,其后每个单词首字母大写:stuJavaScore

​ 5)区分大小写 age Age是两个不同的变量

数据类型

数据类型占用空间保存范围使用举例
boolean 布尔型1字节true或false是否婚配
byte 字节型1字节-128~127如文件读写
char 字符型2字节0~65535保存单个字母
short 短整型2字节-32768~32767保存较小的整数时使用
int 整型4字节-2147483648~2147483647保存一般的整数时使用
long 长型8字节-922337203654775000~22337203654775007保存较长的整数时使用
float 浮点型4 字节-3.403e38~3.403e38保存小数时使用
double 浮点型8字节1.798e308~1.798e308保存精度较高的小数

这这几种数据的范围说明

//byte
System.out.println("最小值:Byte.MIN_Value = "+ Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_Value = "+ Byte.MAX_VALUE);
System.out.println();
​
//short
System.out.println("最小值:Short.MIN_Value = "+ Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_Value = "+ Short.MAX_VALUE);
System.out.println();
​
//int
System.out.println("最小值:Integer.MIN_Value = "+ Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_Value = "+ Integer.MAX_VALUE);
System.out.println();
​
//long
System.out.println("最小值:Long.MIN_Value = "+ Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_Value = "+ Long.MAX_VALUE);
System.out.println();
​
//float
System.out.println("最小值:Float.MIN_Value = "+ Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_Value = "+ Float.MAX_VALUE);
System.out.println();
​
//double
System.out.println("最小值:Double.MIN_Value = "+ Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_Value = "+ Double.MAX_VALUE);
System.out.println();
​
//char
System.out.println("最小值:Character.MIN_Value = "+ Character.MIN_VALUE);
System.out.println("最大值:Character.MAX_Value = "+ Character.MAX_VALUE);
System.out.println();

强制类型转换(显示)
1.特点:代码需要进行特殊的格式处理,不能自动完成

2.规则:数据范围由小到大

格式如下:

int b = (char)10L;
整数类型:byte,short,int,long
注意:java的整型常亮默认为int型,声明long型常量须后加 'l’或’L’

浮点类型:float、double
注意:Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’

字符类型:char
注意:char类型是可以进行运算的。因为它都对应有Unicode码。

布尔类型:boolean
注意:boolean类型数据只允许取值true和false,无null。

boolean类型不可以转换为其它的数据类型。

输出格式

System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出

printf 的格式化输出方式和 C 语言的 printf 是基本一致的。

格式化字符串

转换符类型举例
d十进制整数(“%d”,100)100
x十六进制整数(“%x”,100)64
o八进制整数(“%o”,100)144
f定点浮点数(“%f”,100f)100
e指数浮点数(“%e”,100f)1.00E+02
g通用浮点数(“%g”,100f)100
a十六进制浮点数(“%a”,100)0x1.9p6

运算符

赋值: =

算术运算符: + - * / % ++ --  +=

位运算:   二进制     &   |   ^    ~   >>

比较运算符:  >  <   >=   <=   ==   !=

逻辑运算符:  &&(&)    ||(|)       !

三元运算符: ?  :

public static void main(String[] args){
       //char可以直接运算
        System.out.println('B'+ 1);
        //区分string的+连接
        System.out.println("A"+1);
        //int/int  默认去除小数类型
        System.out.println(10/3);
        System.out.println(10.0/3);//保存小数
        System.out.println((byte)100+(byte) 100);

    }
}

输入

System.in 输入
System.out 输出
Scanner 扫描
public class Test {
  public static void main(String[] args) {
  // 和用户交互
  Scanner sc = new Scanner(System.in);
  // String word = sc.nextLine(); // sc 扫描的结束标记 以换行作为标记
  // System.out.println(word);
  // String word = sc.next(); // 以空格作为结束标记
  // System.out.println(word);
  // 不建议
  // int x = sc.nextInt();
  // System.out.println(x);
  // sc.nextLine();
  // int y = sc.nextInt();
  // System.out.println(y);
  // 通过java提供的API 将输入的 字符串转成 数值
  System.out.println("请输入int");
  String word = sc.nextLine();
  int x = Integer.parseInt(word); // string - int
  System.out.println(x);
  System.out.println("请输入double");
  word = sc.nextLine();
  double d = Double.parseDouble(word);
  System.out.println(d);
  System.out.println("请输入boolean");
  word = sc.nextLine();
  boolean res = Boolean.parseBoolean(word);
  System.out.println(res);
  System.out.println("请输入1个字符");
  word = sc.nextLine();
  char c = word.charAt(0); // 1 个字符
  System.out.println(c);
  }
}

练习

public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String command = "";
        while (!command.equals("Q")) {
            System.out.println("请输入 [w 向上 s向下 a向左 d向右 Q退出] 控制你的角色:");
            command = scanner.next();
            String message = (command.equals("w")) ? "向上移动" :
                    (command.equals("s")) ? "向下移动" :
                            (command.equals("a")) ? "向左移动" :
                                    (command.equals("d")) ? "向右移动" :
                                            (command.equals("Q")) ? "退出游戏" : "无效的命令,请重新输入";
            System.out.println(message);
        }
        scanner.close();
    }

流程控制

顺序结构:按照顺讯执行

分支结构:根据某个事情的结果来决定下一步操作,if else

循环结构:重复做某件事

分支结构

if(条件表达式){
   //要做的事
}

if(条件表达式1){
}else if(条件表达式2){
}else{
}

   public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //根据员工工资判定员工的工资等级
        //1.接受输入的员工工资
        double sal =Double.parseDouble(sc.nextLine());

        //在编程中尽量不使用嵌套代码,能不用if else尽量不用
        //数据校验
        if(sal<700){
            System.out.println("工资低于700异常");
            //System.exit(3);//3 是自己设置的一个验证码
            return;
        }
        if(sal>9999){
            System.out.println("工资高于9999异常");
            return;
        }
        //业务处理
        if(sal>=3000){
            System.out.println(5);
        }else if(sal>=2001){
            System.out.println(4);
        }else if(sal>=1401){
            System.out.println(3);
        }else if(sal>=1201){
            System.out.println(2);
        }else{
            System.out.println(1);
        }
    }
//根据员工的部门编码显示员工的部门名称
//分支语句
//定义一个变量接受员工的部门编码
int deptno=Integer.parseInt(sc.nextLine());
//判断员工部门
//只能做是否相等判断,支持byte,int,double,short,char,String(仅支持jdk7版本以上)
switch(deptno){
   case 10:
       System.out.println("ACCOUNTING");
       break; //跳出当前语句块
   case 20:
       System.out.println("RESEARCH");
       break;
   case 30:
       System.out.println("SALES");
       break;
   case 40:
       System.out.println("OPERATIONS");
   default:
       System.out.println("输入部门编码异常!");
}

循环结构

while(条件表达式){
   //重复的事
}

do{
   //重复的事
}while(条件);

for(  ;  ; ){

}

练习

//打印心形
int line1 =4; //打印几行
int x1 =1;     //从几行开始
for(int i = x1; i<=line1; i++){
  for(int j=0; j<=line1-i; j++){
      System.out.print(" ");
  }
  for(int j=0;j<2*i-1;j++){
      System.out.print("*");
  }
  for(int j=0;j<=10-i*2;j++){
      System.out.print(" ");
  }
  for(int j=0;j<2*i-1;j++){
      System.out.print("*");
  }
  System.out.println();
}
int line2 =10; //打印几行
int x2 =1;     //从几行开始
for(int i = x2; i<= line2; i++){
    for(int j = 1; j< i; j++){
        System.out.print(" ");
    }
    for(int j=0; j<=line2-i; j++){
        System.out.print("*");
    }
    for(int j=0; j<line2-i; j++){
        System.out.print("*");
    }
     System.out.println();
    }
//打印斐波那契数列
//n为打印长度 
int n=Integer.parseInt(sc.nextLine());
//first与second为第一个和第二个数
int first = 0;
int second = 1;
System.out.println("斐波那契数列前 " + n + " 个数字为:");
System.out.print(first + " " + second);
for(int i = 2; i < n; i++) {
    int next = first + second;
    System.out.print(" " + next);
    first = second;
    second = next;
}

结果:

数组

一组类型相同,固定长度的数据集合

数组的声明方式:int[] arr;  或 int []arr;  或int arr[];  或 int [] arr;

数组的初始化:给数组分配空间

动态初始化: int[] arr; arr = new int[len];

静态初始化:int[] arr = {};

数组的基本使用

public static void main(String[] args) {
   //统计学生年龄
   int[] ages;
   //分配了5个32bit的存储空间
   ages =new int[5];
   int a0=ages[0];
   System.out.println(a0);
   System.out.println(ages[1]);
   ages[2]=12;
   System.out.println(ages[2]);
   //数组长度
   int len=ages.length;
   //数组循环遍历,可以读取也可以修改
   for(int i=0;i<len;i++){
       System.out.println(ages[i]);
   }
   //foreach 迭代,只能从数组中读取数据
   for(int x : ages){
       System.out.println(x);//这里的x不是数组的位置
   }
   //使用java工具打印数组
   System.out.print(Arrays.toString(ages));
}

数组练习

设计一个程序,输入学生的姓名,根据学生的姓名得到学生的年龄

public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    //分配了5个32bit的存储空间
    int ages[];
    String [] names;
    ages =new int[5];
    names = new String[5];
    //数组长度
    int len=ages.length;
    //输入数据
    for(int i=0;i<len;i++){
        names[i]=sc.nextLine();
        ages[i]=Integer.parseInt(sc.nextLine());
    }
    //根据输入的名字输出年龄
    String name=new String();
    name=sc.nextLine();
    for(int i=0;i<len;i++) {
        if (name.equals(names[i])) {
            System.out.println(ages[i]);
        }
    }
}

多维数组

基本使用

public static void main(String[] args) {
   int[][] arr={
           {0,1,2,3},
           {0,1,2,3},
           {0,1,2,3},
           {0,1,2,3}
   }; 
   int[][] ste =new int[4][]; 
   ste[0] = new int[3];
   ste[1] = new int[4];
   ste[2] = new int[5];
   ste[3] = new int[3];
   System.out.println(arr.length);
   arr[1][2]=100;
   for(int i=0;i< arr.length;i++){
      for(int j=0;j<arr[i].length;j++){
         System.out.print(arr[i][j]+",");
   }
}

删除与扩容的功能实现

public class kuorong {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int size=4;
        int index=0;//记录元素个数
        String[] names= new String[4];
        //初始化元素
        names[index++]="张三";
        names[index++]="张四";
        names[index++]="王五";
        names[index++]="张留";
        int command=-1;
        while(command!=0){
            System.out.println("请输入要进行的操作:1.删除元素   2.添加元素   3.查看元素   0.退出");
            command=Integer.parseInt(sc.nextLine());
            switch(command){
                case 1:
                    //根据同学的序号、索引删除一个同学
                    System.out.println("请输入删除的同学序号:");
                    int no=Integer.parseInt(sc.nextLine());
                    //校验数据
                    if(no>=index || no<0){
                        System.out.println("序号错误!");
                        return;
                    }
                    //删除
                    names[no]=null;
                    //整理数组
                    for(int i=no;i<index-1;i++){
                        names[i]=names[no+1];
                    }
                    names[--index]=null;
                    break;
                case 2:
                    //输入新用户
                    System.out.println("请输入新增的姓名:");
                    String name=sc.nextLine();

                    //确保数组有足够的空间
                    if(index>=size){
                        //扩容
                        //1.创建新的数组长度是size+size>>1其中>>是右移
                        int newSize=size+(size>>1);
                        String[] newNames= new String[newSize];
                        //2.移植原来的数据到新数组中
                        for(int i=0;i<names.length;i++){
                            newNames[i]=names[i];
                        }
                        //3.将names的引用指向newNames
                        names=newNames;
                        size=newSize;//修改数组新的容量
                    }
                    //保存
                    names[index++]=name;
                    break;
                case 3:
                    System.out.println(Arrays.toString(names));
                    break;
                default:
                    break;
            }

        }
    }
}

练习

1.统计部门员工的工资,找出工资排名3-5的员工

2.统计各部门工资最高的员工

public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    // 员工姓名数组
    String[] names = {"小明", "小红", "小刚", "小华", "小李"};
    // 部门数组//0是10部门,1是20部门,2是30部门
    int[] depts = {10,10,20,20,30};
    int[] dept = {10,20,30};
    // 工资数组
    double[] sal  = {5000, 8000, 10000, 6000, 9000};

    int command=-1;
    while(command!=0){
    System.out.println("请选择:0.退出  1.以工资排序并查看  2.查看排序后的3-5名  3.查看各部门工资最高的员工");
    command=Integer.parseInt(sc.nextLine());
    switch(command){
     case 1:
         //统计员工工资并排序
         int n = sal.length;
         for (int i = 0; i < n - 1; i++) {
             for (int j = 0; j < n - i - 1; j++) {
                 if (sal[j] > sal[j + 1]) {
                    // 交换元素
                    double temp = sal[j];
                    sal[j] = sal[j + 1];
                    sal[j + 1] = temp;//员工名字也交换
                    String temp1=names[j];
                    names[j] = names[j+1];
                    names[j+1] = temp1;
                  }
              }
          }
          System.out.println(Arrays.toString(sal));
          System.out.println(Arrays.toString(names));
          System.out.println();
          break;
      case 2:
           //查看工资排序3-5 的员工
           for(int i=2;i<=4;i++){
               System.out.print((i+1)+names[i]);
           }
           System.out.println();
           break;
       case 3:
           int max=0;//记录最高工资的下标
           for(int j=0;j<3;j++){
               System.out.println(dept[j]+"部门工资最高员工:");
               max=0;

               for(int i=1;i<sal.length;i++) {
                  if (sal[max] < sal[i] && depts[i] == dept[j]) {
                   max = i;
                  }
               }
               System.out.println(names[max]);
           }
           System.out.println();
           break;
        default:
           System.out.println();
           break;
        }
    }
}

  • 32
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值