Java培训笔记十二(中信的Java基础归纳)

                       JAVA基础知识总结

 

一.基本数据类型

byte  8位(一字节)     char 16位(两个字节)

short  16位(两字节)    int 32位(4个字节)

float   32位(四字节)   double 64位(8字节)

long   64位(八字节)    boolean 8位(一字节)

一共八种,作用:对基本内存空间进行划分

 

在基本数据类型用注意以下两点:

1Java中默认的浮点数是double类型的,所以在进行浮点数变量赋值的时候,一定要注意。例如:

float a; //定义了一个单精度浮点类型变量a
a=1.0
//将一个浮点数1.0赋值给a

这在java 中是不可以的。你需要这样写:

float a;
a=1.0f
//1.0为单精度再赋值给a

2. Java中的布尔值只能是true或者false。不像c语言那样可以用0表示false用其它的数表示true

二.数据类型的转换

数据类型间的转换有两钟:一种是自动类型转换;条件是:1).两种类型必须兼容;  2).目标类型的取值要大于源类型的取值。二种是强制类型转换。但容易造成精度的丢失。

java中的类型自动提升规则:

one:所有byte类型,short类型,和char类型都将自动提升为int类型

two:如果有一个操作符是long型。则计算结果就是long

three:如果有一个操作符是float型。则计算结果就是float

four    如果有一个操作符是double型。则计算结果就是doubl

                                                                 

                                                                 3.javaStringint,double数据类型之间的转换:
String转为int
String s1="abc";
int i1=Integer.parseInt(s1);

String转为double
String s1="abc";
double d1=Double.parseDouble(s1);

String先转为double,后转为int
String s1="abc";
int i2=(int)Double.parseDouble(s1);

 

class zh

{public static void main (String args [])

       {String s1="abc";

     int i1=Integer.parseInt(s1);

        System.out.println(i1);

       }

 

}//为什么编译的时候不报错了,而运行的时候会报错?

 

int类型转换不double类型是看自动进行的,而double转换不int需要强制类型转换.

 

例:

double x=0.999;

 

    int n=(int)x; //强制类型转换是通过截断小数部分转换不整型的

基本类型与其包装器类之间的转换

 

    包装器类 对象变量名=new  包装器类(基本类型变量);

 

   基本类型 基本类型变量名=对象变量名. 基本类型Value();

 

例:

 

 int i=1;

 

  Integer io=new Integer(i);

 

   int b=io.intValue();

 

   数据转换为String类型

 

    String str1=””+基本类型变量;

  

 

十进制到其他进制的转换

 

Integer.toBinaryString(int i); //十进制 转换成二进制

 

Integer.toHexString(int i); //十进制 转换成十六进制

 

Integer.toOctalString(int i); //十进制 转换成八进制

 

 

toString(int/long i, int radix)方法,可以将一个十进制数转换成任意进制的字符。

 

byte, short, floatdouble等数据类型,可以利用Integer或者LongtoBinaryString, toHexString, to OctalStringtoString方法转换成其他进制的字符串。

 

 

其它进制到十进制的转换

 

Integer.valueOf("1000", 几进制);

 

IntegerLong类的valueOf(String source, int r)方法,可以将任意进制的字符串转换成十进制数据。

 

 

字节数组与数据类型的转换

 

整型转换为字节数组,其它类型参考此例

 

1

 public static byte[] InttoByteArray(int n)

 

   {

 

       int tmp = n;

 

       byte[] b=new byte[4];

 

 b[3]=new Integer(tmp).byteValue();

 

       tmp=tmp>>8;

 

       b[2]=new Integer(tmp).byteValue();

 

       tmp=tmp>>16;

 

       b[1]=new Integer(tmp).byteValue();

 

       tmp=tmp>>24;

 

       b[0]=new Integer(tmp).byteValue();

 

       return b;

 

   }

 

 

2

 

 

public static byte[] InttoByteArray(int n)

 

{

 

   int tmp1 = n;

 

   byte[] b=new byte[4]; //整型需要4个字节存储

 

   for (int i = b.length - 1; i >=0; i--)

 

   {

 

       //int的后8位转换为byte

 

       b[i] = new Integer(tmp1).byteValue();

 

       tmp1 = tmp1 >> 8;

 

   }

 

   return b;

 

}

 

字节数组转换为整型

 

       byte[] b=new byte[4];

 

          b[0]=0;

 

          b[1]=0;

 

          b[2]=39;

 

          b[3]=16;

 

   public static int toInteger(byte[] b)

 

   {

 

       int s=0;

 

       s=b[0] * 256 * 256 * 256 + b[1] * 256 * 256 +b[2] * 256+b[3];

 

       return s;

 

   }

 

boolean类型转换为String

 

例一:Boolean b=true;

 

String str1=b.valueOf(b);

 

例二:

 

   Boolean b=new Boolean(true);

 

   String str2=b.toString();

 

 

 

 

三.变量

  对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。

int
类型变量默认初始值为0
float
类型变量默认初始值为0.0f
double
类型变量默认初始值为0.0
boolean
类型变量默认初始值为false
char
类型变量默认初始值为0(ASCII)
long
类型变量默认初始值为0
所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null

对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。这个问题会在以后的系列中进行详细讨论。

 有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为staticstatic 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:
1.
它们仅能调用其他的static 方法。
2.
它们只能访问static数据。
它们不能以任何方式引用this super(关键字super 与继承有关)。
如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:
// Demonstrate static variables
methodsand blocks.
class UseStatic {
static int a = 3;
static int b;
static void meth(int x) {
System.out.println("x = " + x);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
static {
System.out.println("Static block initialized.");
b = a * 4;
}
public static void main(String args[]) {
meth(42);
}
}
一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4 12。然后调用main()main() 调用meth() ,把值42传递给x3println ( ) 语句引用两个static变量ab,以及局部变量x
注意:在一个static 方法中引用任何实例变量都是非法的。
下面是该程序的输出:
Static block initialized.
x = 42
a = 3
b = 12
在定义它们的类的外面,static 方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:
classname.method( )
这里,classname 是类的名字,在该类中定义static方法。可以看到,这种格式与通过对象引用变量调用非static方法的格式类似。一个static变量可以以同样的格式来访问——类名加点号运算符。这就是Java 如何实现全局功能和全局变量的一个控制版本。
下面是一个例子。在main() 中,static方法callme() static 变量b在它们的类之外被访问。
class StaticDemo {
static int a = 42;
static int b = 99;
static void callme() {
System.out.println("a = " + a);
}
}
class StaticByName {
public static void main(String args[]) {
StaticDemo.callme();
System.out.println("b = " + StaticDemo.b);
}
}
下面是该程序的输出:
a = 42
b = 99

      

 

四.java中类,对象和引用间的关系

类:是对现实存在事物的一种抽象,一种高度的概括。
对象:是类的实例,是类中的一个个体,它具有该类的属性。
引用:当你引入一个包时,你可以引用该包内的类的对象,也就是说,引用针对的是类的对象。

定义一个类

 

class ccircle

{ int r=20;

  float d=2*r;

}

public class zh

{ public static void main (String args[])

   {   

        ccircle cir1=new ccircle();

       ccircle cir2=new ccircle();//在这个时候已经在堆中开辟了两个内存空间用

       System.out.println(cir1.r);

        /*

        *引用类的对象,基本数据类型变量名输出的是值,内存分配在栈。

          而引用类型输出的是地址,内存分配在堆。

        *

        */

        System.out.println(cir1);

        System.out.println(cir2);

   }

四.算术运算符  +  - * % (取模)    /(取商)

比较运算符  基本数据类型    引用(引用的是比较地址)  =   ==

  比较两个对象的值如 p.equals(p1)

逻辑运算符  &&   ||    ~    ?:

五.流程控制

1 顺序结构

任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序从上到下一行一行地执行,中间没有任何判断和跳转。

如果main方法多行代码之间没有任何流程控制,则程序总是从上向下依次执行,排在前面的代码先执行,排在后面的代码后执行。这意味着:如果没有流程控制,Java方法里的语句是一个顺序执行流,从上向下依次执行每条语句。

2 分支结构

Java提供了两种常见的分支控制结构:if语句和switch语句,其中if语句使用布尔表达式或布尔值作为分支条件来进行分支控制;而switch语句则用于对多个整型值进行匹配,从而实现分支控制。

条件语句

if语句使用布尔表达式或布尔值作为分支条件来进行分支控制,其中if语句有如下三种形式:

第一种形式:

if ( logic expression )

{

statements...

}

第二种形式:

if (logic expression)

{

statements...

}

else

{

statements...

}

第三种形式:

if (logic expression)

{

statements...

}

else if(logic expression)

{

statements...

}

...//可以有零个或多个else if语句

else//最后的else语句也可以省略

{

statement..

}

在上面if语言的三种形式中,放在if之后的括号里的只能是一个逻辑表达式,即这个表达式的返回值只能是truefalse。第二种情形和第三种情形是相通的,如果第三种形式中else if块不出现,则变成了第二种形式。

上面的条件语句中,if(logic expression)else if(logic expression)以及else后花括号括起来多行代码被称为代码块,一个代码块通常被当成一个整体来执行(除非运行过程中遇到returnbreakcontinue等关键字,或者遇到了异常),因此这个代码块也被称为条件执行体。例如如下程序:

 

public class TestIf

{

public static void main(String[] args)

{

int age = 30;

if (age > 20)

//只有当age > 20时,下面花括号括起来的语句块才会执行

//花括号括起来的语句是一个整体,要么一起执行,要么一起不会执行

{

System.out.println("年龄已经大于20岁了");

System.out.println("20岁以上的人应该学会承担责任...");

}

}

}

因此,如果if(logic expression)else if(logic expression)else后的语句块只有一行语句时,则可以省略花括号,因为单行语句本身就是一个整体,无须花括号来把它们定义成一个整体。下面代码完全可以正常执行:

//定义变量a ,并为其赋值

int a = 5;

if (a > 4)

//如果a>4,执行下面的执行体,只有一行代码作为代码块

System.out.println("a大于4");

else

//否则,执行下面的执行体,只有一行代码作为代码块

System.out.println("a不大于4");

通常,我们建议不要省略ifelseelse if后执行块的花括号,即使条件执行体只有一行代码,因为保留花括号会有更好的可读性,而且保留花括号会减少发生错误的可能,例如如下代码,则不可正常执行:

//定义变量b ,并为其赋值

int b = 5;

if (b > 4)

//如果b>4,执行下面的执行体,只有一行代码作为代码块

System.out.println("b大于4");

else

//否则,执行下面的执行体

b--;

//对于下面代码而言,它已经不再是条件执行体的一部分,因此总会执行

System.out.println("b不大于4");

上面代码中以粗体字标识的代码行:System.out.println("b不大于4");,将总是会执行,因为这行代码并不属于else后的条件执行体,else后的条件执行体就是b--;这行代码。

 

 

 

3 控制循环结构

Java语言没有提供goto语句来控制程序的跳转,这种做法提高了程序流程控制的可读性,但降低了程序流程控制的灵活性。为了弥补这种不足,Java提供了continuebreak来控制循环结构。除此之外,return可以结束整个方法,当然也就结束了一次循环。在某些时候,我们需要在某种条件出现时,强行终止结束循环,而不是等到循环条件为false时。此时,可以使用break来完成这个功能。break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到break,系统将完全结束该循环,开始执行循环之后的代码。例如如下程序:

public class TestBreak

{

public static void main(String[] args)

{

//一个简单的for循环

for (int i = 0; i < 10 ; i++ )

{

System.out.println("i的值是" + i);

if (i == 2)

{

//执行该语句时将结束循环

break;

}

}

}

}

运行上面程序,将看到i循环到2时即结束,当i等于2时,循环体内遇到break语句,程序跳出该循环。

break语句不仅可以结束其所在的循环,还可直接结束其外层循环。此时需要在break后紧跟一个标签,这个标签用于标识一个外层循环。

Java中的标签就是一个紧跟着英文冒号(:)的标识符。与其他语言不同的是,Java中的标签只有放在循环语句之前才有作用,例如下面代码:

public class TestBreak2

{

public static void main(String[] args)

{

//外层循环,outer作为标识符

outer:

for (int i = 0 ; i < 5 ; i++ )

{

//内层循环

for (int j = 0; j < 3 ; j++ )

{

System.out.println("i的值为:" + i + "  j的值为:" + j);

if (j == 1)

{

//跳出outer标签所标识的循环。

break outer;

}

}

}

}

}

运行上面程序,看到如下运行结果:

i的值为:0  j的值为:0

i的值为:0  j的值为:1

当程序从外层循环进入内层循环后,当j等于1时,程序遇到一个break outer;语句,这行代码将会导致结束outer标签指定的循环,不是结束break所在的循环,而是结束break循环的外层循环。所以看到上面的运行结果.

4.while结构和do  {  }   while;结构

 Int k=0;

   while (k<100)

 {Syetem.out.println(“hello”);

   k++

  }

  在本例中k是计数器。它从0开始计数到99.即它计数了100次,特点:先判断后执行

Int k=0;

 do 

 {Syetem.out.println(“hello”);

   k++

  } while (k<100)

在本例中k是计数器。它从0开始计数到100.即它计数了101,特点:先执行后判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值