Java基础 - 1.1-Java 语言特性及其基本语法
2016-05-18 21:18
633 查看
Java学习笔记
一 Java语言特性
1. Java 技术体系平台----
Java SE---标准版 开发桌面应用程序
Java EE---企业版 开发企业级应用程序
Java ME---微型版 开发手机等移动端应用程序
2. Java 语言特点
(1)特点一:面向对象
[I]两个基本概念:类,对象;
[II]三大特性:封装,继承,多态;
(2)特点二:健壮性
提供了一个相对安全的内存管理和访问机制,但是仍然存在缺点;
(3)特点三:跨平台性
原理:操作系统—>JVM(java virtual machine)--->Java应用程序
3. Java 两种核心机制
Java 虚拟机,垃圾收集机制;
4. 开发Java程序的步骤
编写源码(.java)---编译(生成.class文件)---执行
5.java中涉及到的几个概念
jdk:java development kit java开发工具包
jre:java runtime Environment java运行环境
jvm:java virtual machine java虚拟机
jdk中包含 jre+开发工具
jre中包含 jvm+类库
二 Java基本语法
1. 关键字--> 自我理解就是官方定义的字,被Java语言赋予了特殊含义,用做专门用途的字符串(单词)。特点:关键字中所有字母都要求小写;
2. 标识符—>对各种变量、方法和类等要素命名时使用的字符序列; 凡是自己可以起名字的地方都叫标识符。
定义合法标识符规则:
a) 由26个英文字母大小写,数字:0-9 ,_或 $ 组成
b) 数字不可以开头。
c) 不可以使用关键字和保留字,但能包含关键字和保留字。
d) Java中严格区分大小写,长度无限制。
e) 标识符不能包含空格。
实例:&abc X
2abc X
class X
class1 V
Animal V
Animal V
last name X
a V
age V
3. 变量间自动类型转换以及强制类型转化
数据类型 : 分为两大类-- 基本数据类型以及引用数据类型
(1) 基本数据类型:
1.1 数值型:
整数类型(byte\short\int\long); 浮点型(float,double)
1.2 字符型: (char)
1.3 布尔型:(boolean)
(2) 引用数据类型
2.1 类(class)- 包括自定义类以及系统定义的类,String属于这里
2.2 借口 (interface )
2.3 数组
注意:
[1].自动类型转换:当容量小的数据类型与容量大的数据类型做运算时,容量小的会自动转换为大的数据类型。
char,byte,short====>int====>long====>float====>double
[2].当char\byte\short之间做运算时,默认的结果为int类型; ---如图所示
[3].字符串与基本数据类型之间的运算: 只要 + 左右两边有一方为字符串,此时就为拼接
如下代码所示:
[4] .位运算的基本操作(具体事例)
(1) 举例 模拟位运算过程
(2) 交换两个数的值
(3) 位运算 将一个数转化成16进制数输出;
进制之间的相互转化,使用Integer 类方法
基本类型与String之间的转化
【1】基本类型转化为string类:
【2】string类转化为基本类型
运算符需要注意的事项:
【1】求余运算:
【2】关于i++(++i)的实质:
逻辑与(&&)和短路(&)与的区别:
案例:表达式1 && 表达式2
如果表达式1 为false,则不用判断表达式2,直接得出结果为false
案例:表达式1 & 表达式2
不管表达式1 为true还是false,都要判断表达式2,最终得出结果
随机数生成函数:
项目:小小计算器(使用switch)
实现功能:
(1) 加法
(2)减法
(3)乘法
(4)除法
(0)退出
代码:
存在BUG,待完善
项目:家庭收支记账软件(使用switch, if(string类追加记录信息)语句)
实现功能:
(1) 记录收支明细
(2)登记收入
(3)登记支出
(4)退出
代码:
5. 数组的基本操作
包括基本一维,二维数组的定义和初始化 ,结合while(),for(),if 语句 来完成较为复杂的语句处理;
<1>数组的初始化
接下来 我就以比较简单的冒泡排序和直接排序来举例;
【1】一维数组的冒泡排序
6.增强for循环
特点:增强for循环用于遍历集合或数组的,比使用普通for效率高
语法:
for(元素类型 变量名 : 数组名或集合名){
循环操作
}
执行顺序:
依次取出数组的每个元素,从第一个开始,一直到最后一个,赋值给临时变量,并进行循环操作,如果到达数组的末尾(也就是说取不出值),循环停止
注意事项:
增强for只能用于遍历(访问),不能做增删改
(后续 iterator)
解释:在第二个增强for中,i在进入到增强for后就引入迭代器 转化为数组值,:
一 Java语言特性
1. Java 技术体系平台----
Java SE---标准版 开发桌面应用程序
Java EE---企业版 开发企业级应用程序
Java ME---微型版 开发手机等移动端应用程序
2. Java 语言特点
(1)特点一:面向对象
[I]两个基本概念:类,对象;
[II]三大特性:封装,继承,多态;
(2)特点二:健壮性
提供了一个相对安全的内存管理和访问机制,但是仍然存在缺点;
(3)特点三:跨平台性
原理:操作系统—>JVM(java virtual machine)--->Java应用程序
3. Java 两种核心机制
Java 虚拟机,垃圾收集机制;
4. 开发Java程序的步骤
编写源码(.java)---编译(生成.class文件)---执行
5.java中涉及到的几个概念
jdk:java development kit java开发工具包
jre:java runtime Environment java运行环境
jvm:java virtual machine java虚拟机
jdk中包含 jre+开发工具
jre中包含 jvm+类库
二 Java基本语法
1. 关键字--> 自我理解就是官方定义的字,被Java语言赋予了特殊含义,用做专门用途的字符串(单词)。特点:关键字中所有字母都要求小写;
2. 标识符—>对各种变量、方法和类等要素命名时使用的字符序列; 凡是自己可以起名字的地方都叫标识符。
定义合法标识符规则:
a) 由26个英文字母大小写,数字:0-9 ,_或 $ 组成
b) 数字不可以开头。
c) 不可以使用关键字和保留字,但能包含关键字和保留字。
d) Java中严格区分大小写,长度无限制。
e) 标识符不能包含空格。
实例:&abc X
2abc X
class X
class1 V
Animal V
Animal V
last name X
a V
age V
3. 变量间自动类型转换以及强制类型转化
数据类型 : 分为两大类-- 基本数据类型以及引用数据类型
(1) 基本数据类型:
1.1 数值型:
整数类型(byte\short\int\long); 浮点型(float,double)
1.2 字符型: (char)
1.3 布尔型:(boolean)
(2) 引用数据类型
2.1 类(class)- 包括自定义类以及系统定义的类,String属于这里
2.2 借口 (interface )
2.3 数组
注意:
[1].自动类型转换:当容量小的数据类型与容量大的数据类型做运算时,容量小的会自动转换为大的数据类型。
char,byte,short====>int====>long====>float====>double
注意:float的数值后面要加 f或F; long类型后面要加L或者l;
[2].当char\byte\short之间做运算时,默认的结果为int类型; ---如图所示
/* * a,b的类型都是byte ,a+b默认类型为int ,目的在与防治a,b相加后超byte范围 */
[3].字符串与基本数据类型之间的运算: 只要 + 左右两边有一方为字符串,此时就为拼接
如下代码所示:
package test_day001; /** * @author zhangyong * @Time:20160508 */ public class test_20160508 { public static void main(String[] args) { // TODO Auto-generated method stub String str="hello"; char c='a'; int Myint=12; System.out.println(c+Myint+str); System.out.println(str+c+Myint); System.out.println(Myint+c+str); System.out.println(Myint+str+c); System.out.println(str+Myint+c); System.out.println(c+str+Myint); } }结果:
109hello helloa12 109hello 12helloa hello12a ahello12
[4] .位运算的基本操作(具体事例)
(1) 举例 模拟位运算过程
int i=-31; System.out.println(i>>2);//-8 有符号右移 System.out.println(i>>>2);//无符号右移 1073741816 //左端用0补齐 所以此数就是一个正数;
详解: /* [-31] 0000 0000 0001 1111 // 31原码 1000 0000 0001 1111 //-31原码 1111 1111 1110 0000 //-31反码 1111 1111 1110 0001 //-31补码(计算机底层的数字都是以补码的形式存在的) 111111 1111 1110 00|01 //右移2位前面以1补齐(正数用0补,负数用1补) 1111 1111 1111 1000 //右移后结果为-8的补码; 还原过程(为负数原码求补码的逆过程) 1111 1111 1111 0111 //减一 1000 0000 0000 1000 //-8的原码 */
(2) 交换两个数的值
int m=2; int n=3; m=m^n; n=n^m; m=m^n; System.out.println("m:"+m+" "+"n:"+ n);
(3) 位运算 将一个数转化成16进制数输出;
int i=60;//手动将60转化为16进制数输出 int j=i&15; //i和1111做与运算 求得最低4位的值 Stringk1=(j<=9)?j+"":(char)('a'+j-10)+""; //System.out.println(k1); i=i>>4; int j2=i&15; String k2=(j2<=9)?j2+"":(char)('a'+j2-10)+""; //System.out.println(k2); System.out.println(k2+k1);
进制之间的相互转化,使用Integer 类方法
public class BinaryTypeConvert { public static void main(String[] args) { int i=13; String j=Integer.toBinaryString(i);//十进制转化为2进制 System.out.println(j); String jj=Integer.toHexString(i);//10进制转化为16进制 System.out.println(jj); String jjj=Integer.toOctalString(i);//10进制转化为8进制 System.out.println(jjj); String jjjj=Integer.valueOf("F", 16).toString();//16进制转化为10进制 System.out.println(jjjj); String jjjjj=Integer.valueOf("1100", 2).toString();//二进制转化为10进制 System.out.println(jjjjj); } }
1101 d 15 15 12
基本类型与String之间的转化
【1】基本类型转化为string类:
int i=9; string str=i+""; //运用到连接符“+” 左右两边存在字符串就会把左右两边连接起来成为新的字符串
【2】string类转化为基本类型
String string="132"; int i=Integer.parseInt(string);//double 同理
运算符需要注意的事项:
【1】求余运算:
a%b=a-(a/b)*b;
【2】关于i++(++i)的实质:
<1>int i=i++ 等价于 : <2>int temp=i++; //先使一个变量tmp=i++;---tmp此时保存的是i的初始值 <3>i=i+1; //之后i的值增加1 <4>i=temp; //此时将最开始tmp的值赋值给i,又因为tmp保存的是i的初始值,即使i在第<3>式中做了增1运算,可是还是赋值为tmp ----所以总结 int i=i++,i的值不会变化
逻辑与(&&)和短路(&)与的区别:
案例:表达式1 && 表达式2
如果表达式1 为false,则不用判断表达式2,直接得出结果为false
案例:表达式1 & 表达式2
不管表达式1 为true还是false,都要判断表达式2,最终得出结果
随机数生成函数:
Scanner t=new Scanner(System.in); Random q=new Random(); int max=100; int min=1; int l=q.nextInt(100); //System.out.println("生成的随机数是:"+(l%(max-min+1)+min));//目的在于生成在1-100的随机数 int i=l%(max-min+1)+min;
项目:小小计算器(使用switch)
实现功能:
(1) 加法
(2)减法
(3)乘法
(4)除法
(0)退出
代码:
import java.util.Scanner; public class test { public static void main(String[] args) { Scanner t=new Scanner(System.in); int a,b,num=1; while(num!=0) { System.out.println("----------------小小计算器------------------"); System.out.println("1.加法"); System.out.println("2.减法"); System.out.println("3.乘法"); System.out.println("4.除法"); System.out.println("0.退出"); System.out.print("请选择:"); num=t.nextInt(); switch (num) { case 1: System.out.println("请依次输入两个数:"); a=t.nextInt(); b=t.nextInt(); System.out.println(a+" + "+b+" = "+(a+b)); break; case 2: System.out.println("请依次输入两个数:"); a=t.nextInt(); b=t.nextInt(); System.out.println(a+" - "+b+" = "+(a-b)); break; case 3: System.out.println("请依次输入两个数:"); a=t.nextInt(); b=t.nextInt(); System.out.println(a+" * "+b+" = "+(a*b)); break; case 4: System.out.println("请依次输入两个数:"); a=t.nextInt(); b=t.nextInt(); System.out.println(a+" / "+b+" = "+(a*1.0/b)); break; case 0: System.out.println("程序退出!"); default:break; }}}}实际效果:
----------------小小计算器------------------ 1.加法 2.减法 3.乘法 4.除法 0.退出 请选择:1 请依次输入两个数: 2 4 2 + 4 = 6 ----------------小小计算器------------------ 1.加法 2.减法 3.乘法 4.除法 0.退出 请选择:2 请依次输入两个数: 4 3 4 - 3 = 1 ----------------小小计算器------------------ 1.加法 2.减法 3.乘法 4.除法 0.退出 请选择:3 请依次输入两个数: 3 4 3 * 4 = 12 ----------------小小计算器------------------ 1.加法 2.减法 3.乘法 4.除法 0.退出 请选择:4 请依次输入两个数: 4 2 4 / 2 = 2.0 ----------------小小计算器------------------ 1.加法 2.减法 3.乘法 4.除法 0.退出 请选择:0 程序退出!
存在BUG,待完善
项目:家庭收支记账软件(使用switch, if(string类追加记录信息)语句)
实现功能:
(1) 记录收支明细
(2)登记收入
(3)登记支出
(4)退出
代码:
package FamilyAccount; import java.util.Scanner; public class FamilyAccount { public static void main(String[] args) { Scanner t=new Scanner(System.in); boolean k=true; boolean flag=false; String str="收支\t 账户金额\t\t收支金额\t\t说 明\n"; String str1="",str2=""; double money=10000;//余额 int in,out; // 主菜单 while(k) { System.out.println("--------------------------家庭收支记账软件----------------------"); System.out.println(" 1-收支明细"); System.out.println(" 2-登记收入"); System.out.println(" 3-登记支出"); System.out.println(" 4-退 出"); System.out.print("请选择(1-4) : "); int choice=t.nextInt(); switch (choice) { case 1: if(flag) { System.out.println("------------------------------当前收支明细"); System.out.println(str); } else { System.out.println("暂时没有收支明细"); } break; case 2: flag=true; System.out.println(" 登记收入"); System.out.print("本次收入额度:"); in=t.nextInt(); System.out.print("本次收入类型:"); str1=t.next(); money+=in; str+=str.format("收入\t%.0f\t\t%d\t\t%s\n", money,in,str1); break; case 3: flag=true; System.out.println(" 登记支出"); System.out.print("本次支出额度:"); out=t.nextInt(); money-=out; if(money<0) { System.out.println("不要意思,你的支出额度已经超过你的账户余额,无法透支"); continue; } System.out.print("本次支出类型:"); str1=t.next(); str+=str.format("支出\t%.0f\t\t%d\t\t%s\n", money,out,str1); // break; case 4: System.out.println("确认是要退出程序吗?Y/N?"); char ch=t.next().charAt(0); if(ch=='y'||ch=='Y') k=false; break; } } } }实际效果:
--------------------------家庭收支记账软件---------------------- 1-收支明细 2-登记收入 3-登记支出 4-退 出 请选择(1-4) : 1 暂时没有收支明细 --------------------------家庭收支记账软件---------------------- 1-收支明细 2-登记收入 3-登记支出 4-退 出 请选择(1-4) : 2 登记收入 本次收入额度:1000 本次收入类型:彩票 --------------------------家庭收支记账软件---------------------- 1-收支明细 2-登记收入 3-登记支出 4-退 出 请选择(1-4) : 1 ------------------------------当前收支明细 收支 账户金额 收支金额 说 明 收入 11000 1000 彩票 --------------------------家庭收支记账软件---------------------- 1-收支明细 2-登记收入 3-登记支出 4-退 出 请选择(1-4) : 3 登记支出 本次支出额度:1000 本次支出类型:吃饭 --------------------------家庭收支记账软件---------------------- 1-收支明细 2-登记收入 3-登记支出 4-退 出 请选择(1-4) : 1 ------------------------------当前收支明细 收支 账户金额 收支金额 说 明 收入 11000 1000 彩票 支出 10000 1000 吃饭 --------------------------家庭收支记账软件---------------------- 1-收支明细 2-登记收入 3-登记支出 4-退 出 请选择(1-4) : 3 登记支出 本次支出额度:10001 不要意思,你的支出额度已经超过你的账户余额,无法透支 --------------------------家庭收支记账软件---------------------- 1-收支明细 2-登记收入 3-登记支出 4-退 出 请选择(1-4) :
5. 数组的基本操作
包括基本一维,二维数组的定义和初始化 ,结合while(),for(),if 语句 来完成较为复杂的语句处理;
<1>数组的初始化
int arr[]={1,2,3};//数组的静态初始化 int[] arr1={1,2,3};//数组的静态初始化 int[] arr2=new int[3];//数组的动态初始化 arr2[0]=1;arr2[1]=2;arr[3]=3;<2>数组的简单操作
接下来 我就以比较简单的冒泡排序和直接排序来举例;
【1】一维数组的冒泡排序
package test_day001; import java.util.Arrays; public class test_20160508 { public static void main(String[] args) { int[] arr={-5,2,13,-123,15,0,17}; for(int i=0;i<arr.length-1;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[j]>arr[j+1]) { int tmp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp; } } } for(int i=0;i<arr.length;i++) { if(i!=arr.length-1) System.out.print(arr[i]+" "); else System.out.println(arr[i]); } } }
结果:-123 -5 0 2 13 15 17【2】一维数组的直接排序
int[] arr={-5,2,13,-123,15,0,17}; for(int i=0;i<arr.length-1;i++) { for(int j=i;j<arr.length;j++) { if(arr[i]>arr[j]) { int tmp=arr[i]; arr[i]=arr[j]; arr[j]=tmp; } } } for(int i=0;i<arr.length;i++) { if(i!=arr.length-1) System.out.print(arr[i]+" "); else System.out.println(arr[i]); }
6.增强for循环
特点:增强for循环用于遍历集合或数组的,比使用普通for效率高
语法:
for(元素类型 变量名 : 数组名或集合名){
循环操作
}
执行顺序:
依次取出数组的每个元素,从第一个开始,一直到最后一个,赋值给临时变量,并进行循环操作,如果到达数组的末尾(也就是说取不出值),循环停止
注意事项:
增强for只能用于遍历(访问),不能做增删改
(后续 iterator)
int[] arr=new int[]{1,2,3,4,5,6,7,8,8,9}; for(int i:arr) { System.out.print(i+" "); } System.out.println(); for(int i:arr) { System.out.print(arr[i]+" "); }结果:
1 2 3 4 5 6 7 8 8 9 2 3 4 5 6 7 8 8 8 9
解释:在第二个增强for中,i在进入到增强for后就引入迭代器 转化为数组值,:
arr[1]=2; arr[2]=3; arr[3]=4; arr[4]=5; arr[5]=6; arr[6]=7; arr[7]=8; arr[8]=8; arr[8]=8; arr[9]=9;
相关文章推荐
- Java集合类的混淆点总结(二)
- LeetCode上与树相关的问题
- java中抽象类和接口的异同点
- Java之InetAddress类
- Eclipse构建Maven项目
- Eclipse构建Maven项目
- 初学JAVA环境变量配置以及编译程序和运行
- 马士兵Java课堂笔记-7-键盘事件测试代码
- 深入java学习之java面向对象程序设计
- Java——CLASSPATH环境变量深度解析
- 集合框架-List与Set
- Java swing 入门
- [疯狂Java]基础类库:Runtime(运行时信息)
- Java 中的内部类
- Java:用四种方式实现两个数交换
- java中path和CLASSPATH的配置和意义解析
- java中的接口
- Clojure里调用Java类
- java类和方法
- Java 垃圾收集器与内存分配策略