Java了解(更至Task3)

在这里插入图片描述

一、Java特性

Java:静态面向对象编程语言

1)简单性:没有结构,不需要指针
2)面向对象
3)分布性:分布式语言。既支持各种层次的网络连接,又以Socket类支持可靠的流*(stream)*网络连接,所以用户可以产生分布式的客户机和服务器。
4)编译和解释性
	java编译程序生成字节码(byte-code),而不是常用的机器码
5)稳健性
6)安全性
7)可移植性
8)高性能:Java是一种先编译后解释的语言
9)多线程性
10)动态性

二、数据类型与变量

(一)数据类型

基本数据类型(简单数据类型)

1、整型:byte、short、int、long

1)byte:-128~127(-2的7次方到2的7次方-1)
2)short:-32768~32767(-2的15次方到2的15次方-1)
3)int:-2147483648~2147483647(-2的31次方到2的31次方-1)
4)long:-9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1)

2)浮点型:float、double

1)float单精度浮点型:取值范围:3.402823e+38~1.401298e-45
2)double(双精度浮点型)(浮点型默认):取值范围:1.797693e+308~4.9000000e-324

3)字符型:char(可存储任何字符)

	单一的16位Unicode字符
	最小值: \u0000(十进制等效值为 0)
	最大值: \uffff(即为 65535);

4)布尔型:boolean

	true、false(默认)

引用数据类型

1)数组 []

(二)变量

Java属于强类型语言,强类型语言必须为每一个变量声明一种类型。

1、变量类型

public class var{
	static int lei_var;  //类变量
	String str="hello world"; //实例变量
	public void test(){
		int local_var=0; //局部变量
	}
}

1)类变量(静态变量):独立于方法之外的变量,用 static 修饰,必须在方法之外。生命周期与类一致。
2)实例变量(类成员变量):独立于方法之外的变量,声明在类中,无static 修饰。生命周期与对象一致。
3)局部变量:类的方法中的变量,在成员方法中定义一个变量(类成员变量和成员方法可以统称为类成员)。局部变量在方法实行时被创建,在方法执行结束的时候被销毁。局部变量在使用时必须进行赋值操作或被初始化。

2、类型转换

自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低--------------------------------------------->高
byte,short,char-> int -> long -> float -> double

3、常量

常量在程序运行时不能被修改。
通常用final关键字修饰常量,通常用大写字母表示常量。

final double PI = 3.1415927;

byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。

当使用字面量的时候,前缀 0 表示 8 进制,而前缀 0x 代表 16 进制;

(三) 枚举类型

变量取值在有限集合内

三、运算符和表达式

(一)运算符

算数运算符说明示例
+-
--
*-
/除,两个操作数都是整数时表整除,否则表示浮点除法15/2=7、15.0/2=7.5
%取余15%2=1

(二)数学函数与常量

Math类,包含各种数学函数;
1、计算数值平方根:Math.sqrt(x)
2、幂运算:Math.pow(x,a) x的a次幂
3、常用三角函数:
Math.sin
Math.cos
Math.tan
Math.atan
Math.atan2
4、指数函数及其反函数,自然对数及以10为底的对数:
Math.exp
Math.log
Math.log10
5、用于表示 π 和 e \pi和e πe常量的近似值:
Math.PI
Math.E
* 如不想在数学方法名和常量名前添加前缀"Math",只需要在源文件的顶部添加代码:

import static java.lang.Math.*;

(三)结合赋值和运算符

x +=4;
//等价于
x = x+4

(四)自增与自减运算符

运算符只会改变变量的值,他们的操作数不能是数值,例如4++是非法语句

int n = 12;
n++; //自增后,n=13
n--; //自减后,n=11
//  ++n/--n 先+1/-1再使用,n++/n-- 先使用再+1/-1
int m = 7;
int n = 7;
int a = 2* ++m; //m=8,a=16
int b = 2* n--; //n=6,b=14

(五)关系和boolean运算符

1、相等性:==
2、不相等:!=
3、! 非
4、&& 与
5、|| 或

e1 || e2
若e1返回true则不计算e2,整个表达式结果返回为true
若e1返回false,e2返回true,整个表达式返回true
若e1返回false,e2返回false,曾哥表达式返回false

6、三目运算符
x?y:z,当x返回结果为true时就返回y,当x返回结果为false时就返回z

x < y ? x : y
// 返回x和y中较小的一个

(六)位运算符

处理整数类型时,可以直接对组成整型数值的各个位完成操作
位运算符包括:
	& and
	|  or 
	^ xor  异或 exclusive OR
	~ not 
	>>  位模型右移
	<< 位模型左移

(七) 括号与运算符级别

一般而言,单目运算符优先级较高,赋值运算符优先级较低。
算术运算符优先级较高,关系和逻辑运算符优先级较低。
多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。
Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。

在这里插入图片描述

Java运算符优先级 http://c.biancheng.net/view/794.html

四、控制流程

(一)块作用域

块是指由一对{}括起来的若干条简单的Java语句,块确定了变量的作用域。一个块可以嵌套在另一个块中,但是不能在嵌套的两个快中声明同名的变量

(二)条件语句

if(condition)
{
	statement
}
if (condition)
{
	statement1
}esle{
	statement2
}
if(condition1){
	if (condition2){
		statement21
	}else{
		statement22
	}
}
if (c1){
	s1
}else if (c2){
	s2
}else if (c3){
	s3
}else{
	s4
}

(三)循环语句

1、while循环:

while (condition1){
	statment1
}

2、do-while循环:

do{
	statment1
}while(c1)
// 循环体至少执行一次

(四)确定循环

for循环

for(int i =1;i<=10;i++){
	System.out.println(i); //i 只能作用于这块作用域
}
// 如果要在循环体外使用i,则需要在循环体语句前声明变量
int i;
for (i = 1,i <=10,i++){
	System.out.println(i);
}
// 可在独立的不同for循环中定义同名变量
// for循环是while循环的一种简化形式

(五)中断控制流程语句

1、break 语句

while(c1){
	s1;
	if(c2) break;
	s2;
}
//如c1或在循环体中c2,就退出循环

2、continue语句,中断正常的控制流程,语句将控制转义到最内层循环的首部

while(c1){
	s1;
	if (c2) continue;
	s2;
}
//如果c2,则continue语句越过剩余部分(s2),例可跳到循环首部s1
//如果将continue语句用于for循环中,就可以跳到for循环的“更新”部分
for(int i=1;i<=100;i++){
	n = in.nextInt();
	if(n<0) continue;
	sum += n ;
}
//如果n<0,则continue语句跳到count++语句

(六)多重选择:switch语句

在处理多个选项时,使用if-else结构会显得有些笨拙,Java中可使用switch语句

switch语句将从与选项值相匹配的case标签处开始执行,直到遇到break语句,或执行到switch语句的结束处位置。
如果没有匹配的case标签,有default子句则执行default子句;
如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支语句(词是不管条件是否成立都会执行)。
switch(choice)
{
	case 1:
		s1;
		break;
	case 2:
		s2;
		break;
	case 3:
		s3;
		break;
	default:
		...;
		break;
}

五、数组

(一)数组概念

容器,一组连续的存储空间,存储多个相同数据类型的值。
特点:类型相同,长度固定,创建数组之后不能修改数组的大小。可以使用length 属性获取数组的大小。可以自动给数组中的元素从0开始编号,方便操作这些元素。

(二)数组创建

声明数组变量:必须在程序中声明数组,并指定数据类型

//格式一:
//元素类型[] 数组名 = new 元素类型[元素个数或数组长度]
// 关键词new用来在内存中产生一个容器容体。数据要存储时需要有空间的,存储很多数据的空间用new操作符来开辟;
int[] arr1 = new int[5]; //5是元素个数
float[] arr2 = new float[5]
// int x[]也是一种创建数组的格式,推荐使用int[] 

//格式二:
// 元素类型[] 数组名=new 元素类型[]{元素1,元素2,....};
int[]  arr1 = new int[]{1,2,3,4};
float[] arr2 = {1.3,1.4,1.7,1.1}


(三)数组的初始化

初始化数组,必须将声明,创建,初始化都放在一条语句中

int[] arr = new int[2]
a[0] = 10;
a[1] = 20;
//直接明确数组长度及数组中元素的内容
int[] arr = new int[]{20,30,40};
int[] arr = {20,30,40};

(四)数组下标的有效范围及常见异常

1、索引值越界异常(ArrayIndexOutOfBoundsException)
有效下标范围:0~数组长度-1

public class Test {
	public static void main(String[] args){
		int[] arr =new int[3]; //创建数组
		arr[0] = 1; //依次赋值
		arr[1] = 3;
		arr[2] = 5;
		System.out.println(arr[0]); //依次取值
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr[3]); //报错
	}
}

2、空指针异常(NullPointerException)
引用类型变量没有指向任何对象,而访问了对象的属性或是调用了对象的方法

(五)数组内存分析

1、栈内存:存储局部变量,变量一旦出了自己的作用域,那么就会马上从内存的消失,释放内存空间。
2、堆内存:存储对象内存,对象一旦被使用完,并不会马上从内存中消失,而是等待垃圾回收器不定时的把垃圾对象回收,这时候该对象才会消失,释放内存。

  • 以new关键字创建的对象,JVM都会在堆内存中开辟一个新的空间,创建一个新的对象。
  • 对象如果没有变量引用了,那么该对象是一个垃圾对象

(六)二维数组

1、创建二维数组
声明方式:

//1、数组元素类型 数组名字[][];
//2、数组元素类型[][] 数组名字;
int arr1[][];
char[][] arr2;

2、为二维数组分配内存
二维数组在声明时没有分配内存空间,需要关键字new来分配内存,然后才可以访问每个元素。

int a[][];
a = new int[2][4];//直接分配类
int b[][];
b = new int[2][]; //先分配行,再分配列
b[0] = new int[2]; //给第一行分配列
b[1] = new int[2]; //给第二行分配列

//创建二位数组时,可以只声明行的长度,不声明列的长度
~~int a[][] = new int[][]; //省略列的长度~~ 

3、二位数组的赋值
二维数组有两个索引(即下标),构成由行和列组成的一个矩阵

//1
int tdarr1[][] = {{1,3,5},{5,9,10}};
//2
int tdarr2[][] = new int [][] {{1,3,5},{5,9,10}};
//3
int tdarr3[][] = new int[2][3]; //先给数组分配内存空间
tdarr3[0] = new int[] {6,54,71}; //给第一行分配一个一维数组
tdarr3[1][0] = 63; //第二行第一列赋值63
tdarr3[1][1] = 10; //第二行第二列赋值10
tdarr3[1][2] = 7; //第二行第三列赋值7

4、多维数组
创建方法与创建二位数组类似

  • 因结构过于复杂,不推荐使用比二位数组更高维的数组,可使用集合类或自定义类集合类包括List、Map等

5、通过二维数组输出不同版式的古诗
待补充

(七) 不规则数组

如:不同行的元素个数不同

(八)数组的基本操作

1、数组遍历
通常用for循环实现;
遍历二位数组需使用双层for循环,通过数组的length属性可获得数组的长度

2、使用fill()方法填充数组元素,最后将数组中的各个元素输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值