您的位置:首页 > 编程语言 > Java开发

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

注意: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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: