java基础之 sun认证之一

本文详细介绍了Java编程的基础知识,包括数据类型、运算符、流程控制、循环、数组、字符串操作、异常处理等核心概念及最佳实践。此外,文章还涵盖了如何创建jar包、文本注释、标示符命名规则、变量类型转换、输出命令等内容,旨在帮助开发者构建高效、易维护的Java应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sun考试:  SCJP:只考core java   SCJD:+jdbc+swing   
         SCWCD:+servlet+jsp(JAVA EE)   SCEA:+EJB+Webserver(架构师) 


必须养成优秀程序员的编写习惯:缩进(用空格)、注释、命名约定。
大小写敏感。
单独的“;”代表一条空语句。
main函数是我们整个程序的执行入口所以必须是静态公开的。
       必须写成这样:  public static void main(String[]args){...}


生成jar包:
    在eclipse里,选中要打包的几个文件,右键-Export-写文件名-Next-Next-选main方法的class-finish
    在jar包的同一文件夹下,新建一个空文档,写“java -jar ./文件名.jar”,再把这文档改成“文件名.sh”
    把这sh的属性-权限 改成“允许以程序执行文件”。以后双击这个sh即可运行


文本注释 Comments:
    注释必须写上,以便其他人阅读、引用和维护。
    单行注释  //...
    多行注释  /* ....*/
    文档注释  /** ... */ 
    文档注释,可以使用JDK的javadoc工具从原文件中抽取这种注释形成程序的帮助文档。
    使用javadoc命令建立HTML格式的程序文档:
     javadoc[options][packagenames][sourcefiles][@files]


标示符:
    用来给一个类、变量或方法命名的符号
  标示符命名规则:
    1. 以字母,“_”和“$”开头。可以包含字母、数字、“_”和“$”。
    2. 大小写敏感
    3. 不能与保留关键字冲突
    4. 没有长度限制(暗示使用长的标示符,以便阅读。长名字可使用工具输入) 
    5. 建议使用JavaBeans规则命名,并根据方法的目的,以 set、get、is、add 或 remove 开头。
  标示符命名约定:
    1. 类名、接口名:每个单词的首字母应该大写,尤其第一个单词的首字母应该大写。(驼峰规则)
        class  MyFirstClass
        interface  Weapon
    2. 字段、方法以及对象:第一个单词首字母应小写,其他单词首字母大写。(以便跟上面的有所区别)
        boolean isWoman
        void setName(String name)
    3. 常量:全部用大写字母表示。如果由几个单词组成,则由下画线连接。
        public final int  GREEN    
        public final int  HEAD_ COUNT
    4. Java包(Package):全部用小写字母。
        package  java.awt.event




java.lang.System.gc();  /  java.lang.Runtime.gc(); 
    垃圾回收的建议语句,只能建议而不能强制回收
    注意: System.gc(); 是静态方法,可直接调用。
          java.lang.Runtime.gc(); 不是静态方法,不能直接在main方法里调用


package 包
    目的:命名冲突,便于管理类
    运行时,先找到包所在目录,再执行“ 包名.类名”
import 导入。导入包内的类
    定义包之后,执行时:javac  -d 包的路径  类名.java
                    java  包名.类名
    import java.util.*; //表示导入java.util里面的所有类;但 import java.*; 则什么类都导不进
    用“*”表示导入当前包的类,不包括子包的类(可把包看作目录)。


声明规则
    * 一个源代码文件最多只能有一个公共(public)类。
    * 如果源文件包含公共类,则该文件名称应该与公共类名称相同。
    * 一个文件只能有一个包语句,但是,可以有多个导入语句。
    * 包语句(如果有的话)必须位于源文件的第一行。
    * 导入语句(如果有的话)必须位于包之后,并且在类声明之前。
    * 如果没有包语句,则导入语句必须是源文件最前面的语句。
    * 包和导入语句应用于该文件中的所有类。
    * 一个文件能够拥有多个非公共类。
    * 没有公共类的文件没有任何命名限制。


输入:使用Scanner 获取输入
    在J2SE 5.0中,可以使用java.util.Scanner类别取得使用者的输入
    可以使用这个工具的 next() 功能,来获取用户的输入
       Scanner s = new Scanner(System.in);
     System.out.printf("您输入了字符:  %s \n",  s.next());
     System.out.printf("您输入了数字: %d \n",  s.nextInt());
输入:使用 BufferedReader 取得输入//5.0之前的读取键盘的方法
    BufferedReader建构时接受java.io.Reader物件
    可使用java.io.InputStreamReader
    例: import java.io.InputStreamReader;
        import java.io.BufferedReader;
      class n{
    public static void main(String[] args){
       System.out.println("请输入一列文字,包括空格:");
       BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
       String next;
       try{next = s.readLine();//此语句会抛异常,需处理
          System.out.println("您输入了文字:" + next);
       }catch(Exception e){}
        }}


数值保存方式:
    正数=  二进制
    负数=  补码
    补码=  反码 +1     正数=负数的补码(反码+1) 
    反码=  非(二进制数)


八进制数,零开头        011(八进制)=9(十进制)
十六进制数,零x开头    0x55(十六进制)=5*16+5(十进制) 


类型:数据都必须有类型
    boolean (8bit,不定的)只有true和false两个值
    char    16bit,   0~2^16-1     (2^16=6万6)
    byte    8bit,   -2^7~2^7-1    (2^7=128; 注意:两个 byte 数相加,变 int 型) 
    short   16bit,  -2^15~2^15-1  (2^15=32768)
    int     32bit,  -2^31~2^31-1  (2147483648,20亿,10位有效数字) 
    long    64bit,  -2^63~2^63-1  (900亿亿,20位有效数字) 
    float   32bit,  9位有效数字,含小数(四舍五入)(小数点算一位,正负号不算) 
    double  64bit,  18位有效数字
             注:float 和 double 的小数部分不可能精确,只能近似。
                比较小数时,用 double i=0.01; if ( i - 0.01 < 1E-6) ...
                不能直接 if (i==0.01)...


默认,整数是int类型,小数是double类型
long类型值,需跟L或l在数据后;float类型要跟f或F;或强制类型转换
科学计数法:12.5E3


    类型转换默认序列:
    byte  >  short   > int  >  long   >  float  >  double
                   char 」
    注意:默认类型转换(自动类型提升)会丢失精度,但只有三种情况:
    int>float; long>float; long>double.   看一下他们的有效位就明白。
    二进制是无法精确的表示 0.1 的。
    进行高精度运算可以用java.math包中BigDecimal类中的方法。
    自动类型提升又称作隐式类型转换。


    强制类型转换:int ti;  (byte) ti ;
    强制转换,丢弃高位


    宣告变量名称的同时,加上“final”关键词来限定,这个变量一但指定了值,就不可以再改变它的值
    如:final int n1= 10;   n1=20;  这就会报错




输出命令:
   System.out.println()  会自动换行的打印
   System.out.print()    直接打印,不会自动换行
   System.out.printf()   可插入带 % 的输入类型,前两种只可以插入转义符, 不能插入 % 的数据或字符串
   在 printf 里面,输出有5个部分  %[argument_index$][flags][width][.precision]conversion
         以“%”开头,[第几个数值$][flags][宽度][.精确度][格式]
   printf()的引入是为了照顾c语言程序员的感情需要
         格式化输出 Formatter;格式化输入 Scanner;正则表达式


输出格式控制:
   转义符:
   \ddd     1到3位8进制数指定Unicode字符输出(ddd)
   \uxxxx   1到4位16进制数指定Unicode字符输出(xxxx)
   \\       \ 
   \'       ' 
   \"       "  
   \b       退格(光标向左走一格)
   \f       走纸转页,换页
   \n       换行
   \r       光标回到行首,不换行
   \t       跳格


   %%       %  
   %d       输出10进位整数,只能输出Byte、Short、 Integer、Long、或BigInteger类型。(输出其他类型会抛异常) 
   %f       以10进位输出浮点数,提供的数必须是Float、Double或 BigDecimal (输出Integer类型也抛异常) 
   %e,%E    以10进位输出浮点数,并使用科学记号,提供的数必须是Float、 Double或BigDecimal
   %a,%A    用科学记号输出浮点数,以16进位输出整数部份,以10进位输出指数部份,数据类型要求同上。
   %o       (字母o)以8进位整数方式输出,限数据类型:Byte,Short,Integer,Long或BigInteger
   %x,%X    将浮点数以16进位方式输出,数据类型要求同上
   %s,%S    将字符串格式化输出(可输出任何类型)  
   %c,%C    以字符方式输出,提供的数必须是Byte、Short、Character或 Integer
   %b,%B    输出"true"或"false"(%B输出"TRUE"或"FALSE");另外,非空值输出true,空值输出 false
   %t,%T    输出日期/时间的前置,详请看在线API文件 


/********找出各字符的Unicode值*******************/
class Test{
    public static void main(String[] args) {
        String s= ""+0+'a'; //0=48,9=57
              //A=65,Z=90;a=97,z=122;空格=32
        int i = s.codePointAt(0);
        int j = s.codePointAt(1);
            //利用这codePointAt(int index)方法
        System.out.printf("%d %d",i,j);
}}
/**********************************************/
       
字符串的拼接:
    字符串+数值=字符串
    数值+字符串=字符串
    如:str+10+20  ==str1020   而 10+20+str  ==30str
    "+" 和 "+=" 都被重载了,具有合并字符串的能力,相当于 String 类里的 concat();


运算:
    算术运算:   加( +)   减(-)    乘( * )     除( / )     取余( % )
        % 取余运算: 2%3=2     100%3=1 
    赋值运算符:
      =     +=    -=    *=     /=     %=   
      (先运行完右边的,再跟左边的进行赋值运算;如 int i=10;i-=3*5;结果-5) 
      <<=     >>=    
    比较、条件运算:
        大于>   不小于>=    小于<   不大于<=    等于==    不等于 !=
    逻辑运算:
        短路运算(且 &&    或 ||  )      非短路运算(&   |  )      反相 ! 
        短路运算:当前面一个表达式可以决定结果时,后面的语句不用再判断。非短路运算时,还照样判断后面的
    位运算:
      &(AND)    |(OR)    ^(XOR异或)       ~(补码)按位取反 = 加1再取反(全 1 的补码是-1)
    移位运算:
     >>   <<    >>>     
     
     >>右移:全部向右移动,移到右段的低位被舍弃,最高位则移入原来最高位的值。右移一位相当于除2取商。
     >>>同上,只是最高位移入0(不带符号)。因为最高位是符号位,所以负数跟 >> 有区别,正数没区别。
     12>>>33  为12>>(33%32) = 12>>1  =6;因为int 型只有32位,认为全移走后就没意义
     1 <<32 为1
    instanceof():用户判断某一个对象是否属于某一个类的实例。
    “==”双等于号,比较数值是否相等。还可以用于比较两个引用,看他们引用的地址是否相等。
    在 Object 类里 equals() 跟“==”功能一样;但可以重载定义一个比较两者意义是否相等的方法。
    在java里可以把赋值语句连在一起写,如: x=y=z=5;   这样就x,y,z都得到同样的数值 5




两个数相运算时,默认是 int 类型
如果有更高级的,就按高级的那个类型
   if(其中一个是double型)double型;
   else if(其中一个是float型)float型;
   else if(其中一个是long型)long型;
   else int 型。


选择:
    if(...){...}else{...}
    if(...){...}else if(...){...}
    if(...){... if(...){...}}
    
    三重以上的选择,建议使用 switch
    switch(char c){
        case c1: ...; break;
        case c2: ...; break;
        ...
        default :...;
    } /*switch的括号里只能用 int 和 枚举类型
        能隐式转换为 int 的也可以:byte,short,char,Integer,Short,Character,Byte等。
        不能用 long、小数类型(float,double) 和 String。
        case后的值必须是常量。而包装类变量(Integer,Character)不会被视作常量。*/




循环:
   for(初始表达式;  布尔表达式 ;  步进 ) 循环语句;
     跟C的 for 一样,for 的初始化条件、结束条件、增量都可以不写。
    但条件判断部分只能是boolean值,所以只能是一条条件判断语句。
     for 循环一般用在循环次数已知的情况。
   while (<boolean expr>)...;
   do...; while (<condition>);   注意:do 后最好用“{}”,while 后的分号不可忘。


break 和 continue
   break 退出当前的循环体,在嵌套循环中,只退出当前的一层循环。
   continue 结束当前本次循环,继续进行下一轮的循环。可以说,只是本次忽略循环内后面的语句。
   continue 只能在循环体内用。break 可以用在任意代码块中,表示退出当前程序块(配合标签使用,很好用)
这两个相当于JAVA里的 goto 语句。


注意:(个人归结的)
    循环体内申明的变量,在循环体结束后立即释放,循环体外无法使用。
    但在另外一个循环体内可以再次申明一个跟前面同名的变量,互相不影响。
        如for内定义的 i:  for(int i=0;i<10;i++){...}
        则在上式 for 循环结束后无法再调用 i 值,还会报错。
      for(int i=0;i<10;i++){...} 和后面的 for(int i=0;i<3;i++){...} 互不影响
    若想循环体外还可以调用 for 循环体内的值,应先在体外定义。
        如:  int i;   for (i=0; i<10; i++){...}   则for 循环后再调用 i 值,其值为10 




关键字列表:
   abstract  boolean   break   byte     case    catch       char    class
   continue  default   do      double   else    extends     enum    false
   final     finally   float   for      if      implements  import  instanceof
   int       interface long    native   new     null        package private
   protected public    return  short    static  super       switch  synchronized
   this      throw     throws  transient true   try         void    volatile  while 
Java 中 true、false不是关键字,而是boolean类型的字面量。但也不能当作变量用。
所有的关键字都是小写,friendly,sizeof不是java的关键字 
保留字:const,goto :这两个已经削去意义,但同样不能用作变量名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值