一.java的特点
1.平台无关性
(1).平台与机器指令:无论从哪种编程语言编写的应用程序都需要经过操作系统和处理器来完成程序的运行,因此这里所指的平台由操作系统(OS)和处理器(CPU)构成。
与平台无关是指操作软件的运行不因操作系统、处理器的变化导致程序无法运行或出现运行错误。所谓平台的机器指令,就是可以被平台直接识别、执行的一种由0和1组成的序列代码。
!! 需要注意的是,相同的CPU和不同的操作系统所形成的平台机器指令可能是不同的,因此每种平台都会形成自己独特的机器指令。
(2).C/C++程序依赖平台:
C/C++ 语言提供的编译器对C/C++源程序进行编译时,将针对当前C/C++源程序所在的特定平台进行编译、连接,然后生成机器指令,即根据当前平台的机器指令生成机器码文件(可执行文件)。这样就无法保证C/C++编译器所产生的可执行文件在所有平台上都能正确地被运行,因为不同平台可能具有不同的机器指令(如图)。因此,如果更换了平台,可能需要修改源程序,并针对新的平台重新编译源程序。
与其他语言相比,java语言最大的优势就是它的平台无关性,这也是java风靡全球的主要原因。Java在平台之上再提供一个java运行环境(JAVA Runtime Environment ,JRE),
该java运行环境由java虚拟机(Java Virtual Machine , JVM)、类库及一些核心文件组成。
注:通过两图的比较可以比较直观的看出这两者的不同,与C++不同的是,Java语言提供的编译器不针对特定的操作系统和CPU芯片进行编译,而是针对Java虚拟机把Java源程序编译为称为字节码的一种“中间代码”。
2.面向对象(obeject oriented):说起这个名字就想起自己刚学java时的感触,那时什么也不知道,当老师问我们面向对象的英文时我们都懵了,所以把这个告诉那些不知道的人。
提起面向对象,最先想到的就是面向对象三个特征封装、继承、多态。
(1).封装:面向对象的核心思想之一就是将数据和对数据的操作封装在一起。
(2)继承:子类可以继承父类的属性和功能,即继承了父类的数据和数据上的操作,又可以增加子类独有的数据和数据上的操作。
(3)多态:多态性是面向对象编程的又一重要特征。多态有两种。一种是操作名称的多态;另一种是与继承有关的多态。
注:在java里万物皆对象。
二.Java运行平台
在java里有三种平台,分别是JavaSE(曾称为J2SE)、JavaEE(曾称为J2EE)、JavaME(曾称为J2ME)。
Sun公司要实现“编写一次,到处运行(write once,run anywhere)”的目标,所以提供了这相应的Java运行平台。
三.Java程序开发
(1)在java里class是Java的关键字,用来定义类。Public也是关键字。
(2)一个Java应用程序必须有一个类含有public static void main (String args[])方法。这个类称为程序的主类。
注:在java里只有一个public类;
如果有一个类是public类,那么源文件的名字只要与这个类的名字完全相同,扩展名是.java就可以了。
Java语言区分大小写;当你写一个Java程序时,必须要做到写程序的规范性。如:当你写public static void main (String args[]){}这一对大括号要在一开始写的时候就一
起写着,以防遗忘。因为在java程序里有许多这样的大括号,所以在写程序时,遇到大括号就写完整,这样就不容易出错了。
四.Java的基本数据类型
标识符:用来标志类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符。标志符就是一个名字。
Java语言规定标志符由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字。
简单数据类型:Boolean,byte,short,char,int, long,float,double。这8种数据类型通常被分为四大数据类型:逻辑类型boolean,字符类型 char,整数类型byte 、 int、short、long,浮点类型 float、double。
另外告诉大家一个会的但是平常不太注意的,也是我不太懂的,经过请教别人弄懂的,所以分享给大家。
比如说为什么int不能放开3000000000呢,,得放在long类型,在这个问题我一直没弄懂,到最后看了这个表中的表述范围明白int的表述范围是21亿左右,而3000000000的表述范围是800亿超出了int的表述范围,所以要在3000000000的后面加L,因为long在计算机中的字节数比int大很多,所以long的表述范围就能装开3000000000。
基本数据类型转换
Boolean类型不可以转换为其他数据类型。
整形、字符型、浮点型自动转换为容量大的数据类型;数据类型按容量大小排序为:
byte,short,char,int, long,float,double。Byte,short,char之间不会互相转换,他们三者在计算时首先会转换为int 类型。
注:容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但会造成精度降低或溢出。在java里实数常量默认为double型,整数常量默认为int型。
例如:public static void main (String args[]){
Int i1=123;
Int i2=456;
double d1=(i1+i2)*1.2;//系统将转换为double型运算
Float f1=(float)((i1+i2)*1.2));//需要强制类型转换
System.out.println(f1);
}
注:float f1=(float)0.1与0.1f的差别:0.1f在计算机内部就是一个float类型4个字节而(float)0.1是八个字节而加上(float)是强制转换为4个字节。
数据的输入和输出:
数据的输入:Scanner 是在JDK1.5新增的一个类,可以使用该类创建一个对象:
Scanner input=new Scanner (System.in);
input.nextInt();
数据的输出:System.out.println();
五.运算符、表达式和语句
1.运算符
(1)算术运算符:+,-,*,/,%,++,--;
(2)关系运算符:>,<,>=,<=,==,!=;
(3)逻辑运算符:!,&,|,&&,||;
(4)位运算符:&,|,~,>>,<<,>>>;
(5):赋值运算符:=;
(6):字符串连接运算符:+;
(7)++、--;(自增、自减运算符);
(8)条件运算符:(?:)(op1?op2:op3);
现在我举几个例子帮助理解这些运算符:
逻辑与(&&)与逻辑或(||),赋值运算符,关系运算符是双目运算符;逻辑非(!)是单目运算符;条件运算符是三目运算符。
例:int i=5,j=9;
i=i++;//输出i的值得话,i=5;
j=++j;//输出的话j=6;
要注意++(——)的位置,当在前时是先运算再取值,在后是先取值再运算;当时我刚开始学一直弄混,多做几道这样的题就熟能生巧了。
我感觉大家最不熟的运算符应该是三目运算符吧,那么我就跟大家一块学一下三目运算符的使用吧:三目运算符的运算法则是当op1的值是true时op1?op2:op3运算的结果是op2的值;当op1的值是false时,op1?op2:op3运算的结果是op3的值。
例:12>8?100:200的结果是100,12<8?100:200的结果是200。
2.语句
(1).分支语句(if 、if ~else、if~else~if、switch)
(2).循环语句(while、do~while、for)
(3).跳转语句(break、continue)
while语句的一般格式如下:
while(表达式){
语句
}
do-while循环的一般格式如下:do{
语句
}while(表达式);
注:while与do-while的区别是do-whlie至少循环一次;还要注意do-while语句的while括号后面的分号。
for语句的一般格式如下:
for(表达式1;表达式2;表达式3){
语句;
}
平常在做循环的题时我都非常喜欢用for循环,所以就写个for循环的语句吧。
public static void main (String args[]){
long result =0;
for(i=1;i<=99;i+=2){
result+=i;
}System.out.println(" result="+result);
}
这是计算奇数(1+3+5+7+9+.........+99)的一个循环,结果是2500.
Switch开关语句
switch语句是多分支的开关语句,它的一般格式如下:
swich(表达式){
case 常量值1:若干语句
break;
case 常量值2:若干语句
break;
....................
case 常量值n:若干语句
break;
default:若干语句
}
注:switch语句中表达式的值必须是整型或字符型,常量值1-n也必须是整型或字符型;在同一个switch语句中,case后的常量值必须互不相同。
break与continue语句
跳转语句是指用关键字break或continue加上分号构成的语句。如:break;
在一个循环语句中,如果循环100次,当你在某次循环体的执行中执行了break语句,那么整个循环语句就结束;当你在某次循环体的执行中执行了continue语句,那么本次循环就结束,也就是不再执行本次循环中的continue后面的语句,而是进入下一次循环。一般continue与break语句是用于循环中的,在上面的switch语句中,当遇到break语句就输出到break语句之前的结果,如果没有break语句所有的结果都将会被显示出来,这样会浪费时间,所以在写switch语句时一定不要忘了break。
例:这是求余数不为3的运算,当遇到continue时,就不再执行后面两句的语句,再重新进入下一次循环。
public static void main (String args[]){
int sum=0;
int i;
for(i=1;i<=100;i++){
if(i%10==3){
continue;
}sum=sum+i;
}System.out.println("输出累加值的和"+sum);
}