文章目录
第二章
IDE的使用
IDE(Integrated Development Environment)是集成开发环境,是用于提供程序开发环境的应用程序,一般包括代码编辑器,编译器,调试器和图形用户界面等工具.
常用的java开发工具:IDEA,Eclipse,myeclipse
注释
在java中有三种注释
//用于单行注释, 快捷键ctrl+/
例如:
//这是主类
public class Hello{
}
/*
*/用于多行注释,快捷键ctrl+shift+/ ctrl+shift+\ 取消注
例如:
/*
这是一个HelloWorld小程序,
public static void main(String[] args){
System.out.println("HelloWorld");
}
这是程序入口.
*/
public class Hello{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
/**
*/文档注释,用于为类,方法(函数),属性 功能进行说明,可在调用时提
示
/**
*@author feng
*/
public class Hello{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
关键字
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词).
特点:关键字中所有字母都为小写.
保留字
定义:现有Java版本尚未使用,但以后版本可能会作为关键字使用.
保留字:goto,const.
标识符
定义:Java 对各种变量、方法和类等要素命名时使用的字符序列称
为标识符.
定义合法标识符规则:由26个英文字母大小写,0-9 ,_或 $ 组成 数字不可以开头。
不可以使用关键字和保留字,但能包含关键字和保留字。
Java中严格区分大小写,长度无限制。
标识符不能包含空格。
注意:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
Java中的名称命名规范:
包名:多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:
XXX_YYY_ZZZ
Java变量
变量:是程序中最基本的存储单元,程序执行中数值是可变的.
本质上,变量其实是内存中的一小块区域,使用变量名来访问这块域,因 此每一个变量使用前必须要先申请(声明),然后必须进行赋值(填充内容),才能使用.
变量是通过使用变量名来访问这块区域的.
要素:包括变量名,变量类型。
Java程序中每一个变量都属于特定的数据类型,在使用前必须对其声明,声明
格式为:
[修饰符] type varName [=value][,varName[=value]……];
例如: int i = 100;
int i1, i2, i3 = 10;
String s = “hello”
Java数据类型
在java中,把数据分为基本数据类型和引用数据类型.
基本数据类型:整数类型(byte,short,int,long),浮点类型(float,double),字符型(char),布尔型(boolean).
应用数据类型:类(class),接口(interface),数组([]).
整数类型
Java 各整数类型有固定的表数范围和字段长度,其不受具体操作系统的影响,以 保证Java程序的可移植性.
Java语言的整型常量默认为int型,声明long型常量可以后加‘ l ’或‘ L ’
浮点类型
与整数类型类似,Java浮点类型有固定的表数范围和字段长度,不受平台影响. Java 浮点类型有两种表示形式
十进制数形式,例如: 3.14 314.0
科学记数法形式,如 3.14e2 3
Java 浮点型常量默认为 double 型,如要声明一个常量为 float 型,则需数字后面加 f 或 F.
逻辑型boolean(布尔)
boolean 类型适于逻辑运算,一般用于程序流程控制 .
java语言中boolean 类型数据只允许取值 true 或 false .
注意:不可以0或非 0 的整数替代false和true,这点和C语言不同.
字符型char char 型数据用来表示一个单个字符.
char占2字节. 用单引号括起来
例如: char c1 = ‘a’;
char c2 =‘中’;
可以涵盖世界上所有书面语的字符。
char运算 char类型是可以运算的因为char在字符编码表中有对应的数值。
在JAVA中,对char类型字符运行时,直接当做对应编码表的整数来 对待。
char c=‘a’+1; 先将’a’提升为int,计算结果98,对应的 字符是b
ASCII码
ASCII码: 在计算机内部,所有数据都使用二进制表示。每一个二进制位(bit)有 0 和 1 两种状态,因此 8 个二进制位就可以组合出 256 种状态,这被称为一个字节(byte)。一个 字节一共可以用来表示 256 种不同的状态,每一个状态对应一个符号,就是 256 个符 号,从0000000 到 11111111。
ASCII(ASCII American Standard Code for Information Interchange,美国信息互换标准代码) 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系, 做了统一规定。这被称为ASCII码。 ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制 00100000),大写的字母A是65(二进制01000001)。这128符号(包括32个不 能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
缺点:不能表示所有字符(例如,汉子在ASCII码中无法表示,所以才有了Unicode编码)
Unicode编码
Unicode:一种编码,将世界上所有的符号都纳入其中。这个编号范围
从 0x000000 到 0x10FFFF (十六进制),有 110 多万,每个字符都有一个唯一的 Unicode 编号,这个编号一般写成 16 进制,在前面加上U+。例如:“马”的 Unicode 是U+9A6C。
Java底层采用unicode编码来存储字符.
随着互联网的兴起,计算机与网络,计算机与计算机之间的通讯急需一
种统一的编码方式来编译和解释Unicode编码. 这种编码方式就是我们现在使用最广泛的UTF-8,所以,UTF-8 是 Unicode 编码的一种具体实现,它规定了字符转换到二进制编码的一系列规则。
UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使1~4个字 节表示一个符号,根据不同的符号而变化字节长度。
基本数据类型转换
java中可以从任意基本类型转型到另外的基本类型 .
例外 : boolean 类型不可以转换为其他的数据类型。
转换分为默认转换和强制转换
默认转换 :整形,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则: 容量小的类型默认转换为容量大的数据类型;数据类型按容量大小排序为: byte,shor t,char->int->long->float->double
byte,short,char之间不会互相转换,他们三者在计算时首先会转换为int类型 强制转换。
容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精 度降低或溢出;使用时要格外注意。
有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一 种数据类型,然后再进行计算。
基本数据类型转换
● long类型与float类型的大小
● 在内存中占用的是4个字节的空间,而long型占用的是8个字节的空间。可是long整型数,在内存中占用8个字节共64位,它表示的数值有2的64次方,平分正负,数值范围是负2的63次方到正2的63次方-1。
● float在内存中占4个字节,共32位,但是浮点数在内存中是这样的:
● V=(-1)^s * M *2^E
浮点数的32位不是简单的直接表示大小,而是按照一定的标准分配的。
其中第1位,符号位,即S,接下来的8位,指数域,即E。剩下的23位是小数域,即M。
即浮点数在内存中的二进制值不是直接转换为十进制数值的,而是按照上述公式计算而来,通过这个公式,虽然只用到了4个字节,但是浮点数却比长整型的最大值要大。
运算符
算术运算符
+,-,*,/,%,++,–
int i = 1;
i += ++i;
i最终的值是多少
i=3;
int i = 1;
2 2 4 5 5
int j = ++i + i++ + ++i + ++i + i++;
问 j最终的结果是多少?i最终的值多少?
j=18;
i=6;
字符串连接运算符+
char l = 'f';
char j = 'q';
char n = 'w';
//在Java中,字符串用"",单个字符用'',其实底层的字符串还是由字符组成。
System.out.println(l+j+n);
System.out.println(j+n);
System.out.println(n+l);
输出分别为fqw
qw
wf
关系(比较)运算符
<,>,>=,<=,==,!=
逻辑运算符
!,& , | , &&,||
“&”和“&&”的区别:
● 单&时,左边无论真假,右边都进行运算;
● 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算
● “|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
赋值运算符
=,+ =,- =,*=,/ =
int i = 1;
i += ++i;
i最终的值是多少
i=3;
同理,-=,*=,/=也一样
1为short+int赋值给short,即大的数据化小的,需要加强制类型转换。
2是java默认的大化小强制类型转换,只不过底层代码帮助我们实现了。
条件运算符
语法一:(条件表达式)? 表达式1:表达式2;
条件表达式结果为true,运算后的结果是表达式1; 为false,运算后的
结果是表达式2
位运算
日常开发中位运算使用相对较少,但是巧妙的使用位运算可以大量减少运行开销, 优化算法(注意,虽然我们经常用不到,但是在Java库中经常用到,所以我们学会后,在阅读底层代码的时候可以大大降低阅读难度)
package day02;
import org.omg.Messaging.SyncScopeHelper;
import java.sql.SQLOutput;
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
int a=4,b=5;
byte c=-7;
/*a=4 0000 0100 << 0000 1000 a=8 左移
b=5 0000 0101 >> 0000 0010 b=2 右移
c=-7 1111 1001 >>>0111 0100 c=2147483644 无符号右移
c:1111 1001 原码1000 0111 反码 1111 1000 补码1111 1001
c=~(byte)c c=-(c+1)即c=-(-7+1)=6
a^b(^异或符,即不相同即为真,相同为假) 0000 0001
*/
String st=(a<b)?"b大于a":"a大于b";
System.out.println(st);
System.out.println(a^b);
System.out.println(a<<1);
System.out.println(b>>1);
System.out.println(c>>>1);
System.out.println(~c);
Scanner sc=new Scanner(System.in);
System.out.println("请输入姓名");
String s=sc.next();
System.out.println(s);
char aa=sc.next().charAt(0);
switch(aa){
case 'a':
System.out.println(a);
break;
case 'b':
System.out.println(b);
break;
default:
System.out.println("abc");
}
}
}
以上为位运算的实例。
表达式的运算顺序
package day02;
public class Demo1 {
public static void main(String[] args) {
float f=0.2231278653f;//输出后为0.22312787
//单精度能显示四个字节,所以在输出后会将多余的直接四舍五入
System.out.println(f);
double d=12213.561566651654152;//输出后为12213.561566651653
//同理,双精度能显示八个字节,所以在输出后会将多余的直接四舍五入
System.out.println(d);
boolean flag=f<d;
System.out.println(flag);
char l = 'f';
char j = 'q';
char n = 'w';
//在Java中,字符串用"",单个字符用'',其实底层的字符串还是由字符组成。
System.out.println(l+0);
System.out.println(j+0);
System.out.println(n+0);
String f1="你好,世界";
System.out.println(f);
/*byte为一个字节,而int为四个字节,小容量向大容量转换,自动转换
其实127是int类型,但是这里int赋值给byte是java底层自动转换,如果超出byte范围,会出现精度溢出
int a=258;二进制为0001 0000 0010
byte b=(byte)a;
输出后会发现b==2;二进制为0000 0010所以会将前面的0001丢失,这就是精度损失.
*/
byte a=127;
int b=a;
//这里short是容量小的,不能向容量大的自动转换,必须加强行转换short c=b;
short c=(short)b;
//精度降低是小数部分转换时的问题,由于小数部分转换为二进制会无线循环,所以会出现精度损失。
float e=1.23456789f;
double g=e;
System.out.println(g);
System.out.println(a==b);
System.out.println(a!=b);
String st="adcder";
String st1="asdasdf";
System.out.println(st==st1);
System.out.println(st!=st1);
System.out.println(st+st1);//这里的+是连接运算符,进行字符串连接
System.out.println(b+st);//这里也是字符串连接,即int类型和字符串进行连接
System.out.println(b+l);//这里是加法运算,即先将'f'转换为int类型,再进行加法运算
System.out.println(b++);
System.out.println(b--);
System.out.println(--b);//126
}
}
以上为数据转换的实例。
控制台输入
使用标准输入串System.in 使用Scanner取得一个字符串或一组数字在新增一个Scanner对象时需要一个System.in对象,因为实际上还System.in在取得用户输入。
Scanner的next()方法用以取得用户输入的字符串; nextInt()将取得的输入字符串转换为整数类型;同样,nextFloat()转换成浮点型;nextBoolean()转 换成布尔型。
System.out.print("输入");
Scanner scan = new Scanner(System.in);
String read = scan.next ();
System.out.println("输入数据:"+read);
在使用Scanner对象时,需要在文件头带入 java.util.Scanner; 写法为: import java.util.Scanner;
控制语句
条件语句 - 根据不同条件,执行不同语句。
if
if … else
if … else if
if … else if … else if … else
switch
循环语句 – 重复执行某些动作
for
while
do …
if条件结构
if条件结构是根据条件判断之后再做处理
条件表达式必须是一个返回布尔结果的表达式。
语句可以是用{}包含的语句块。
if-else条件结构
if-else语句的另一种形式为:
if (条件1){
语句1;
} else if (条件2){
语句2;
}……
}else if (条件N){
语句N;
}
switch语句
switch语句:多分支选择语句,根据表达式的值,来执行多个操作中的一个。
switch (表达式){
case value1: 语句序列1;
[break]; …………
case valueN: 语句序列N;
[break];
[default : 缺省语句;]
}
表达式可以是byte、short、int、char、枚举类型。JDK 7以后,可以使用String类型;
case语句后面只能使用常量表达式;case后的值不能重复;
某个case分支如果没有提供break语句,则继续执行下一个case后的语句;
当表达式的值与任一case子句中的值都不匹配时,将执行default后面的语句;如没有default子句,则程序直接跳出switch语句。
循环
循环语句功能:在某些条件满足的情况下,反复执行特定代码的功能
循环语句的四个组成部分:循环变量的初始化,循环条件部分,循环体部分,循环变量的更新。
循环语句分类:while 循环,do/while 循环,for 循环
while&do…while语句
do…while循环
do{循环体}
while(判断条件)
while循环
while(判断条件){
循环体
}
while和do…while的区别:while循环是先进行判断,然后满足执行循环体。do…while循环是先进行一次循环体,再进行判断。
for循环
for(语句一;判断条件;语句二){
循环体
}
for循环和while,do…while循环的区别是for循环需要知道循环次数,而while循环和do…while循环就不需要知道循环次数。
break&continue
break语句用于终止某个语句的执行,经常用于终止循环。例如
for(int i=0;i<100;i++){
if(i==50){
System.out.print("--------");
break;
}
System.out.print(i);
}
//这里当执行到i==50的时候,语句就执行完毕,不在循环。
continue用于循环体中,用于终止某次循环过程,即跳过这一次循环,后面的循环会继续执行。例如:
for(int i=0;i<100;i++){
if(i==50){
coutinue;
}
System.out.print(i);
}
//这里会输出除了50的100之内的数,当执行到50时就会终止本次循环,继续从i==51开始循环。
循环嵌套
将一个循环放在另一个循环体内,就形成了嵌套循环。例如:
for(int i=1;i<100;i++){
for(int j=1;j<100;j++){
System.out.print(i*j)
}
}
//这是一个基础的循环嵌套,即当i=1以后,开始执行j==1到100的循环,当j==100的时候,又开始从i==2开始执行,如此反复当i==100的时候就终止了循环。
a:for(int i=1;i<100;i++){
for(int j=1;j<100;j++){
System.out.print(i*j)
if(i==50){
break a;
}
}
}
//这里a给外循环做个标记,当 i==50的时候就会终止本次循环,这里的break终止的是for(int i=1;i<100;i++)这个循环。
Java中的方法
Java的方法类似于其它语言的函数,方法是解决一类问题的步骤的有序组合,方法包含于类或对象中.
方法在程序中被创建,声明格式:
[访问权限修饰符 修饰符…] [返回值类型] 方法名(形式参数类型 参数名){
Java语句;… … …
[return 返回值;]
}
修饰符:这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
形式参数: 在方法被调用时用于接收外界输入的数据。
实参:调用方法时实际传给方法的数据。
返回值:方法在执行完毕后返还给调用它的环境的数据。
返回值类型:事先约定的返回值的数据类型,如无返回值,必须给出返回值类型void。
Java语言中使用下述形式调用方法:对象名.方法名(实参列表)
实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配,
return 语句终止方法的运行并指定要返回的数据 。
return语句
return语句用于从当前执行的方法中退出, 返回到调用该方法的语句处继续
执行。
return有两种形式
return 表达式;//将表达式的值返回;
,当 i==50的时候就会终止本次循环,这里的break终止的是for(int i=1;i<100;i++)这个循环。
## Java中的方法
Java的方法类似于其它语言的函数,方法是解决一类问题的步骤的有序组合,方法包含于类或对象中.
方法在程序中被创建,声明格式:
[访问权限修饰符 修饰符…] [返回值类型] 方法名(形式参数类型 参数名){
Java语句;… … …
[return 返回值;]
}
修饰符:这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
形式参数: 在方法被调用时用于接收外界输入的数据。
实参:调用方法时实际传给方法的数据。
返回值:方法在执行完毕后返还给调用它的环境的数据。
返回值类型:事先约定的返回值的数据类型,如无返回值,必须给出返回值类型void。
Java语言中使用下述形式调用方法:对象名.方法名(实参列表)
实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配,
return 语句终止方法的运行并指定要返回的数据 。
return语句
return语句用于从当前执行的方法中退出, 返回到调用该方法的语句处继续
执行。
return有两种形式
return 表达式;//将表达式的值返回;
return;//不返回任何值,这种形式是方法说明中明确为void类型的方法,即不需要返回值。