第2章 Java语言基础

2.1 Java语言的特点

1、Java是一种简单的、面向对象的、分布式的、解释的、健壮的、安全的、可移植的、多线程的、动态的语言.

Java语言的特点:简单性、面向对象、分布性、健壮性、体系结构中立、安全性、解释性、可移植性、高性能、多线程、动态性、类库。

Java保留了和C、C++相同的变量声明、参数传递、操作符、流控制等,去掉了指针、预处理、Goto、类型转换、内存管理、全 局变量的定义等难学的地方。

1、指针

指针是C、C++中最灵活,也是最不容易掌握的数据类型。Java对指针进行完全的控制,程序员不能直接进行任何指针操作。例如把整数转化为指针、或者通过指针释放某一内存地址。

数组作为类在Java中实现,解决了数组下标越界的问题,直接报错。

2、预处理

C、C++使用宏定义,而Java不支持宏,它通过关键字final来声明一个常量,来实现宏定义中广泛使用的常量定义。

3、goto

Java不支持C、C++的goto语句,而是使用try、catch、final.

4、类型转换

在类型转换时进行类型相容性检查

5、释放内存

Java中,所有的数据结构都是对象,同过运算符new为它们分配内存堆,Java自动管理内容并进行回收。

6、全局变量的定义

Java中,不能在所有类之外定义全局变量,只能在一个类中定义公用的、静态的变量来实现一个全局变量。

java 全局变量 - Google Search

//在类GlobalVar中定义变量global_var ,定义并赋值变量s,定义常量ss.

class GlobalVar{

public static global_var;

public static String s="abc";

public static final String ss="def";

}

使用:

//其他类可以访问和修改该变量

public class test{

System.out.println(GlobalVar.s);

GlobalVar.global_var="testtest";

}

例子:

class GlobalVar{
        public static int a=99;
}
public class app{
        public static void main(String[] args){
                System.out.println("hello world"+(GlobalVar.a+1));
        }
}
输出:hello world100


7、数据类型的长度

在Java中,数据类型都是固定长度的位数,例如int型,占用32位。

8、头文件

Java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有成员的操作。在Java中使用import语句来与其他类进行通信。

2.2 Java的数据类型

java的数据类型和其他语言很相似,分为简单数据类型和复合数据类型。简单数据类型是Java语言自己定义的数据类型,用户不能修改;复杂数据类型由用户定义,有简单数据类型组成。

2.2.1 简单类型

数据类型指的是一组性质相同的值的集合,以及定义这个集合的一组操作的总称。

Java的简单数据类型包括:字符型、整数、浮点数和布尔型。

1、字符型

关键字char,占用16位,范围是0~65535.

语法:

char c='c'; //声明一个变量,类型为char,变量名为c,赋初值为'c';

public class app{
        public static void main(String[] args){
                char c='c';
                System.out.println((char)(97)+"===="+(char)(65));
        }
}
输出:a====A

2、整型

Java的整型表示形式有三种:
1、十进制整数:123,-456,0

2、八进制整数,以0开头:0123表示十进制123.

3、十六进制整数,以0x或0X开头:如0x123表示十进制291.

关键字byte(8位,表示数据),short(16位,很少使用),int (32位,表示数范围:-2^31~2^31-1),long(64位)


3、浮点型

Java的浮点型表示形式有两种:

1、十进制数格式:123、0.123、123.0

2、科学计数法形式:123e3、123e-5.

浮点型:

float(32位),double(64位)。

语法:

float f;//指定变量f为float型

double d;//指定变量d为double型。

注意:和C、C++不同,Java没有无符号型整数,而且明确规定了整型和浮点型所占的内存字节数。

4、布尔型

布尔型数值只有true和false。

boolean b=true; //定义b为布尔型变量,且初值为true .

2.2.2 数组

数组是一系列对象或者基本数据类型的集合,数组中的每个元素都具有相同的数据类型。数组分为一维数组和多维数组。

1、一维数组

一维数组可以看成一个线性表。

int arr[];

int arr[]={1,2,3,4};

Java可以将一个数组用‘=’可以赋值给另一个数组。

public class app{
        public static void main(String[] args){
                int ar[]={1,2,3,4,5};
                int arr[];
                arr=ar;
                for(int i=0;i<arr.length;i++){
                        arr[i]++;
                }
                for(int i=0;i<ar.length;i++){
                        println("ar["+i+"]="+ar[i]);
                }
        }
        static void println(String s){
                System.out.println(s);
        }
}
问题:1、对数组arr的修改为什么会同步到数组ar上?

解答:Java的数据类型分为两类,基本类型:byte、short、int、long、char、float、double、boolean,引用类型:String、Array、Object.

这里的ar是数组的引用地址,因此进行赋值操作后,arr和ar指向的是相同的内存地址。

参考:

http://bbs.csdn.net/topics/270040439

http://blog.csdn.net/ye1992/article/details/9006765

http://blog.sina.com.cn/s/blog_453d87aa01016tkv.html

http://www.pocketdigi.com/20110406/233.html

2、多维数组

   1、直接为每一维分配空间

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

    2、从最高位开始,分别为每一维分配空间。

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

               a[0]=new int[3];

              ar[1]=new int[3];

    3、定义的时候开始初始化

         int arr[][]={{1,2,3},{4,5,6}};

public class app{
        public static void main(String[] args){
                int arr[][]={{1,2,3},{4,5,6}};
                println(arr[0][1]+"");
        }
        static void println(String s){
                System.out.println(s);
        }
}

输出:2

2.3 运算符

2.3.1 算术运算符

一元运算符
运算符用法描述
++num正值
--num负值
++i++返回i,i自增1
++++i返回i+1,i自增1
--i--返回i,i自减1
----i返回i-1,i自减1


二元运算符
运算符用法描述
+num1+num2
-num1-num2
*num1*num2
/num1/num2
%num1%num2取模(求余)


2.3.2 位运算符

位运算符用来对二进制位进行操作。除按位取反“~”以外,其他均为二元算术运算符。

位运算符
运算符用法描述
~num按位取反
&num1&num2num1和num2按位与
|num1|num2num1和num3按位或
^num1^num2num1和num2异或
<<num1<<num2num1左移num2位
>>num1>>num2num1右移num2位
>>>num1>>>num2num1无符号右移num2


1、补码

Java使用补码表示二进制数。在补码中,最高位为符号位,正数的符号位为0,负数的符号位为1.

正数:最高位为0,例如+42的补码为00101010

负数:最高位为1,将它的绝对值按位取反加1,即为该数的补码。例如-42的补码为11010110.

0的补码是唯一的,为00000000,而在原码、反码中,+0和-0的表示不是唯一的。

2、按位取反

~0010101按位取反结果:1101010

3、按位与运算符

00101010&00010111=00000010

按位与可以将某些特定为清0;

例如:对数11010110的第2位和第5位清0

11010110&11101101=11000100

按位与可与取某个数中某些指定的位;

例如:取11010110的第2位和第5位

11010110&00010010=00010010.

4、按位或运算符

11100110|00011000=11011110

5、按位异或运算符

00101010^00010111=00111101

按位异或可以使特定位取反。

例如:对数11010110的第4、5位取反。

11010110^00011000=11001110

按位异或可以实现两个数的交换而不是用临时变量

int a=2,b=3;

a=a^b;

b=b^a;

a=a^b;

6、左移运算符<<

例如:a=a<<2; 使a的各二进制位左移2位,右补0.若a=00001111,则a<<2=00111100.左移一位相当于*2;

7、右移运算符>>

例如:a=a>>2; 使a的各二进制位右移2位,移到右边的低位舍弃,缺失的高位取原先的值。右移一位相当于除2取商

如a=00110111,进行a=a>>2,a=00001101.

如b=11010011,   进行b=b>>2,b=11110100.

8、无符号右移运算符>>>

和右移运算符不同的是缺失的高位取0

如a=00110111,a=a>>>2, a=00001101;

如b=11010011,b=b>>>2, b=00220200;

2.3.3 关系运算符

关系运算符用来比较两个值,返回布尔类型true或false,关系运算符都是二元运算符。

关系运算符包括:>  >= < <= == !=

public class app{
        public static void main(String[] args){
                Integer n1=new Integer(2);
                Integer n2=new Integer(2);
                println((n1==n2)+"");
        }
        static void println(String s){
                System.out.println(s);
        }
}
输出:false

如前文所说,Java数据类型分为简单类型和引用类型。这里的n1和n2就是两个对象的引用地址。

2.3.4 布尔逻辑运算符

布尔逻辑运算符有3个:&&、||和!

import java.util.*;
public class app{
        public static void main(String[] args){
                Random rand=new Random();
                int i=rand.nextInt()%100;   //随机生成100以内的整数(范围[-100,100),包括负整数、正整数)
                int j=rand.nextInt()%100;
                println("i="+i);
                println("j="+j);
                println("i>j is"+(i>j));
                println("(i<10)&&(j<10) is"+((i<10)&&(j<10)));
        }
        static void println(String s){
                System.out.println(s);
        }
}

输出:

i=99
j=29
i>j istrue
(i<10)&&(j<10) isfalse

2.3.5 赋值运算符

赋值运算符用于把一个数值赋予给一个变量。赋值运算符两边的类型不一致时,如果左边的数据类型的级别高,则右边的数据将被转换左边的数据类型,然后赋值给左边的变量。否则需要进行强制类型转换。

赋值运算符
运算符用法等效表达式
+=num1+=num2num1=num1+num2
-=num1-=num2num1=num1-num2
*=num1*=num2num1=num1*num2
/=num1/=num2num1=num1/num2
%=num1%=num2num1=num1%num2
&=num1&num2num1=num1&num2
|=num1|=num2num1=num1|num2
^=num1^=num2num1=num1^num2
>>=num1>>=num2num1=num1>>num2
<<=num1<<=num2num1=num1<<num2
>>>=num1>>>=num2num1=num1>>>num2

2.3.6 条件运算符 conditional operator

例子:max=(a>b)?a:b;

2.3.7 运算符优先级

2.4 条件语句

if(expression){

statement;

}

或者

if(expression){

statement;

}else{

statement;

}

或者

if(expression){

statement;

}else if(expression){
statement;

}else{

statement;

}

例子:

import java.util.*;
public class app{
        public static void main(String[] args){
                Random rand=new Random();
                int i=rand.nextInt(3000)%3000;   // 随机生成3000以内的整数(范围[0,3000))
                if(i%400==0||(i%4==0&&i%100!=0)){
                        System.out.println(i+"是闰年");
                }else{
                        System.out.println(i+"不是闰年");
                }
        }
}

参考:http://blog.csdn.net/lovexiaozeng336/article/details/8529003

2.5 循环语句

循环语句的作用是反复执行一段代码,直到满足终止循环的条件为止,一个循环一般包括4个部分。

  • 初始化部分(initialization):用来设置循环的一些初始条件,如计数器清零等
  • 循环体部分(body):这是反复循环的一段代码,可以是单一的一条语句,也可以是复合语句
  • 迭代部分(interation):这是在当前循环结束,下一次循环开始前执行的语句,常常用来使计数加1或减1
  • 终止部分(termination):通常是一个布尔表达式,每一次循环都要对该表达式求值,以验证是否满足循环终止条件

Java中提供的循环:while、do-while、for

2.5.1 while循环

while(expression){

statement;

}

2.5.2 do-while循环

do{

statemtn;

}while(expression)

2.5.3 for循环

for(expression;expression1;expression2){

statement;

}

expression是初始化语句,这个语句在循环开始前执行,这部分通常执行给循环技术变量赋初值等初始化操作;expression1是循环结束条件;expression2在每一次循环结束后调用。这三部分之间由 ; 隔开,每部分都可以是空语句,但是分号不能省略。初始化、终止和迭代部分均为空时,相当于一个无限循环。例如:for(;;){statement;}

for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。

例子:

public class app{
        public static void main(String[] args){
                for(int i=1,j=i+10;i<5;i++,j=i*2){
                        System.out.println("i="+i+",j="+j);
                }
        }
}
输出:

i=1,j=11
i=2,j=4
i=3,j=6
i=4,j=8

2.5.4 循环退出语句

循环体部分,可用break、return、continue控制循环的流程。

  1. break用于强行退出循环,不执行循环中剩余的语句。
  2. return语句从当前的方法退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行
  3. continue则停止执行当前的反复,然后退回至循环起始处,开始新的反复。


1、break语句

public class app{
        public static void main(String[] args){
                int i=0;
                while(true){
                        if(i>=5){
                                break;
                        }
                        System.out.println("i="+i);
                        i++;
                }
        }
}
输出:

i=0
i=1
i=2
i=3
i=4

2、return语句

作用:

1、return expression

返回一个值给调用该方法的语句,返回值的数据类型必须和方法声明中的返回值类型一致,可使用强制类型转换。

2、return

将return嵌入到某些语句中,例如if-else,来使程序在未执行方法中的所有的语句时退出。

3、continue语句

public class app{
        public static void main(String[] args){
                for(int i=0;i<5;i++){
                        if(i==2){
                                continue;
                        }
                        System.out.println(i);
                }
        }
}

输出:

0
1
3
4

2.6 分支语句

语法:

switch(expression){

case value1:statement;break;

case value2:statement;break;

...

default:statemtn;

}

expression可以返回任一简单类型的值,如整数、字符型,case子句中的value1必须为常量。


public class app{
        public static void main(String[] args){
                int month=2;
                int year=2014;
                int numDays=0;
                switch(month){
                        case 1:
                        case 3:
                        case 5:
                        case 7:
                        case 8:
                        case 10:
                        case 12:numDays=31;
                                        break;
                        case 4:
                        case 6:
                        case 9:
                        case 11:numDays=30;
                                        break;
                        case 2:
                                        if((year%400==0)||(year%4==0&&year%100!=0)){
                                                                numDays=29;
                                                                }else{
                                                                numDays=28;
                                                                }
                                        break;
                }
                System.out.println("Number of Days="+numDays);
        }
}

输出:

Number of Days=28

2.7 Java的强制类型转化

2.7.1 简单数据类型的强制转化

高位数据转换成低位数据,需要用到强制类型转换。

int i;

byte b=(byte)i; //把int型变量i强制转换为byte型

2.7.2 简单数据类型和对象之间的强制转换



1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值