2_JAVA基础

目录

初识java

James Gosling

java语言平台版本

  1. J2SE(Java 2 Platform Standard Edition)标准版

    是为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。

  2. J2ME(Java 2 Platform Micro Edition)小型版

    是为开发移动设备和嵌入式设备(电器、机器人、机顶盒…)提供的解决方案。

  3. J2EE(Java 2 Platform Enterprise Edition)企业版

    是为开发企业环境下的应用程序提供的一套解决方案,该技术体系中包含的技术如 Servlet、Jsp等,主要针对于Web应用程序开发。

java语言特点

面向对象、开源、跨平台

  1. java程序的运行依赖JVM,显而易见一个系统只要系统支持JVM就可以运行java程序,这就赋予了java程序良好的可移植性。

JDK

JDK是java语言的开发工具包,是整个java开发的核心,它包含了:

  1. java开发工具(jdk \ bin)
  2. 基础开发库(jdk\ jre\ lib\ rt.jar)
  3. 基础开发库的源码(jdk\ src.xip)

JVM

运行与工作原理

java源代码.java ——(编译)—— java字节码.class ——(执行)—— 运行
  1. 编译:通过javac命令将java文件编译成java字节码文件
  2. 执行:启动java虚拟机(JVM),通过jvm加载字节码文件,加载main方法执行程序。
  3. JVM中类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件。

语言基础

前言

标识符

在Java中,我们需要标识代码的很多元素,包括类名、方法、字段、变量、包名等。我们选择的名称就称为标识符,并且遵循以下规则:

  1. 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符。
  2. 标识符是严格区分大小写的,不能以数字开头
  3. 标识符中常见的命名规则(这些规定是不受语法约束的)
    • 包名:多单词组成时所有字母均小写,使用.连接 aa.bb.cc
    • 类名、接口名:大驼峰式 AaaBbbCcc
    • 变量名、方法名:小驼峰式 aaaBbbCcc
    • 常量名:多单词组成是所有字母均大写,使用_连接AAA_BBB_CCC

注释

Java代码的解释说明。不影响程序的运行,用于辅助读程。

//      单行注释
/*      多行注释   */
/**     文档注释     */
/*
			 实现了一个Java的HelloWorld程序
			 实现步骤:
			   1. 定义类
			   2. 定义主方法
			   3. 一条命令,控制台输出了HelloWorld
*/
public class HelloWorld{
	//main主方法,固定格式,程序的入口点
	public static void main(String[] args){
		//系统 输出 打印    打印的内容
		System.out.println("HelloWorld");
	}
}

变量

  1. 局部变量:定义在方法或局部代码块中。

    • 方法运行完内存就释放了。
    • 访问修饰符不能用于局部变量。
    • 内存分配在栈上。
    • 无默认值,被声明后必须经过初始化才能使用。
  2. 成员变量:定义在类里,不初始化时有默认初始值,类消失,变量才释放。

    • 类变量(静态变量):独立于方法之外的变量,用 static 修饰。

    • 实例变量:独立于方法之外的变量,不过没有 static 修饰。

      基本类型默认值
      byte0
      short0
      int0
      long0L
      float0.0F
      double0.0D
      booleanfalse
      char\u0000
      引用类型null

常量

public static final int NUMBER = 3; // 成员常量
  1. 在程序运行过程一直不会改变的量称为常量。
  2. 常量在整个程序中只能被赋值一次。
  3. 当定义的final变量为成员变量时,必须在定义时就设定它的初始值,否则将会提示编译错误。

数据类型

基本数据类型

位bit 字节Byte 1Byte=8bit

类型字节空间取值范围
整型byte1-27到27-1 或者 -128到127
short2-215到215-1
int4-231到231-1
long8-263到263-1(L)
浮点型float4单精度,对小数部分的精度要求不高(F)
double8双精度,精确的小数部分并操作值很大时(D)
字符char20到65535
布尔boolean1真true 假false
基本类型的类型转换
隐式转换
Byte a = 13;
Int  b = a;//直接转换
显式转换
int  a = 13;
Byte b = (byte)a;//小数转换成整数,小数直接舍弃
基本类型的字面值
  1. 整数字面值是ing类型
  2. 浮点数的字面值是double类型

引用数据类型

引用类型是一个对象类型,它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。

运算符

名称符号介绍
算数运算符+ - * /基本运算
%取余、求模、算整数
++ –i++ //先取值再自增;–i //先自减再取值
比较运算符==相等比较
!=不等
逻辑运算符&& &短路与,与;两边同为真结果才为真
|| |短路或,或;两边只要有一个真结果就是真
+
三元运算符布尔表达式 ? a :btrue 取a,false取b
赋值运算符=赋值
+= -= *= /=a+=2; //a=a+2

a=a+3和a+=3的区别

byte a = 1;
a=(byte) (a+3);	//右侧int,左侧byte,大转小,强转。
a+=4;			//会自动完成数据类型的转换 

运算规则

  1. 计算结果的数据类型,与最大类型一致

    3/2   //得1 ,而不是1.5,结果是int类型
    3d/2  //得1.5,相当于double/int,结果是double类型
    
  2. byte,short,char三种比int小的类型,运算时会先自动转换成int

    byte a=1;
    byte b=2;
    int c=a+b;
    byte d=a+b;//错,运行时,byte会先自动转成int再运算.(Byte d=(byte)(a+b);)
    

char 型变量中能不能存储一个中文汉字,为什么?

char 类型可以存储一个中文汉字,因为 Java 中使用的是 Unicode编码(16位,不选择任何特定的编码,直接使用字符在字符集中的编号),一个 char 类型占 2 个字节(16 比特、16位),所以放一个中文是没问题的。

流程控制

分支结构

if条件语句

if(布尔表达式){
	语句序列1
}else if(布尔表达式){
	语句序列2
}else {
	语句序列3
}
//注意:上面代码最多执行一个语句序列

switch 多分枝语句

表达式可以是int基本类型、Integer包装类型、char、String,由于byte,short,char都可以隐含转换为int,所以也支持。

switch(表达式){
	case 常量值1:语句块1 ;break;
	case 常量值n:语句块n;break;
	default:语句块n+1; break; //若没有符合的则执行default
}

循环结构

while循环语句:

循环执行,直到条件表达式为false退出循环。

while(条件表达式){
	执行语句
}

do…while 循环语句:

执行do里面的语句直到条件表达式为false退出循环。

do{
	执行语句
}while(条件表达式);

for循环语句:

循环到表达式2为false位置

for(开始条件;循环条件;更改条件){
	执行语句
}

foreach循环语句:

for (int x : arr) {   
	System.out.println(x); //逐个输出数组元素的值   
}  

循环控制

  1. break语句:跳出循环体(若是嵌套循环只能跳出内循环)
  2. continue:跳出本次循环

数组

  1. 创建的数组有默认值,int-0,double-0.0,char-空格,boolean-false,string-null
  2. 存放在堆中数组的地址给栈中的引用保存
  3. length 属性获取数组长度
  4. 数组一旦创建,长度不可变(允许0长度的数组)

创建数组(“[]”前后都一样)

  1. 动态初始化 :int [] a = new int[2];

  2. 静态初始化1:int[] a = {1,2};

  3. 静态初始化2:int[] a = new int[]{1,2};//不能填写长度

  4. 创建String数组

String a[]=new String[2];
String[] b=new String[2];
String c[]= {"1","2"};

数组工具类Arrays

Arrays.toString(数组)

把数组里的数据,用逗号连接成一个字符串。

格式:[10, 14, 20, 46, 51]

Arrays.sort(数组)

对数组排序,对于基本类型的数组使用优化后的快速排序算法,效率高。

对引用类型数组,使用优化后的合并排序算法。

Arrays.copyOf(数组,新长度)
  1. 把数组复制成一个指定长度的新数组
  2. 新长度小于原数组,相当于截取前一部分数据。

二维数组

存放数组的数组

int [] [] a = new int[2] [3];

冒泡排序

相邻位置比较,从小到大排序时,小就往前换位。

for(int i=0;i<arr.length-1;i++){
    for(int j=i+1;j<arr.length;j++){
        a[i]=a[i]+a[j];
		a[j]=a[i]-a[j];
		a[i]=a[i]-a[j];
    }
}

选择排序

从小到大排序时,找出最小值,换位。

for(int i=0;i<arr.length-1;i++){
    int min=i;
    for(int j=i+1;j<arr.length;j++){
        if(arr[min]>arr[j]){
            min=j;
        }
    }
    if(min!=i){
        a[i]=a[i]+a[min];
        a[min]=a[i]-a[min];
        a[i]=a[i]-a[min];
    }
}

二分算法

是一种在有序数组中查找特定元素的搜索算法:

​ 从数组中间元素开始,若不是要查找的元素,则在数组大于或小于中间元素的那一半查找,而且跟开始一样从中间元素开始比较。

  1. 递归

    int search(int arr[], int low, int high, int target){
        if(low > high) return -1;
        int mid = low + (high - low)/2;
        if(arr[mid] > target)
        	return search(arr, low, mid-1, target);
        if(arr[mid] < target)
        	return search(arr, mid+1, high, target);
        return mid;
    }
    
  2. 循环

    int search(int arr[], int key){
        int low = 0;
        int high = arr.length -1;
        int mid = -1;
        while(low<=high){
            mid = low + (high - low) /2;
            if(a[mid] > key)
            	high = mid -1;
            else if(a[mid]<key)
            	low = mid +1;
            else 
            	return mid;
        }
        return -1;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值