Java 基础

#java语法基础

>对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

类:类是一个模板,它描述一类对象的行为和状态。

方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。

实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。

类包含方法,产生对象,对象状态由实例变量决定。

##基本语法

>编写Java程序时,应注意以下几点:

大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。

类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如MyFirstJavaClass。

方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。

源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。

主方法入口:所有的Java程序由public static void main(String[]args)方法开始执行。

##Java标识符

>Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

关于Java标识符,有以下几点需要注意:

所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始

首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字的任何字符组合

关键字不能用作标识符

标识符是大小写敏感的

合法标识符举例:age、$salary、_value、__1_value

非法标识符举例:123abc、-salary

##Java修饰符

>像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

访问控制修饰符: default, public , protected, private

非访问控制修饰符: final, abstract, strictfp

## Java变量

>Java中主要有如下几种类型的变量

局部变量

类变量(静态变量)

成员变量(非静态变量)

##Java数组

>数组是储存在堆上的对象,可以保存多个同类型变量。

##Java枚举

>Java5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的bug。

//局部变量在方法体中。

//成员变量在类中,方法体外。

//类变量在类中,方法体外。

##创建对象

>对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:

声明:声明一个对象,包括对象名称和对象类型。

实例化:使用关键字new来创建一个对象。

初始化:使用new创建对象时,会调用构造方法初始化对象。

```java

public class Puppy{

public Puppy(String name){

//这个构造器仅有一个参数:name

System.out.println("小狗的名字是: " + name );

}

public static void main(String []args){

//下面的语句将创建一个Puppy对象

Puppy myPuppy = new Puppy( "tommy" );

}

}

```

##访问实例变量和方法

>通过已创建的对象来访问成员变量和成员方法,如下所示:

```java

/*实例化对象*/

ObjectReference = new Constructor();

/*访问其中的变量*/

ObjectReference.variableName;

/*访问类中的方法*/

ObjectReference.MethodName();

```

##Java基本数据类型

>变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。

内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。

因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。

Java的两大数据类型:

内置数据类型

引用数据类型

>内置数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

byte:

byte数据类型是8位、有符号的,以二进制补码表示的整数;

最小值是-128(-2^7);

最大值是127(2^7-1);

默认值是0;

byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;

例子:byte a = 100,byte b = -50。

short:

short数据类型是16位、有符号的以二进制补码表示的整数

最小值是-32768(-2^15);

最大值是32767(2^15 - 1);

Short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一;

默认值是0;

例子:short s = 1000,short r = -20000。

int:

int数据类型是32位、有符号的以二进制补码表示的整数;

最小值是-2,147,483,648(-2^31);

最大值是2,147,483,647(2^31 - 1);

一般地整型变量默认为int类型;

默认值是0;

例子:int a = 100000, int b = -200000。

long:

long数据类型是64位、有符号的以二进制补码表示的整数;

最小值是-9,223,372,036,854,775,808(-2^63);

最大值是9,223,372,036,854,775,807(2^63 -1);

这种类型主要使用在需要比较大整数的系统上;

默认值是0L;

例子:long a = 100000L,Long b = -200000L。

float:

float数据类型是单精度、32位、符合IEEE 754标准的浮点数;

float在储存大型浮点数组的时候可节省内存空间;

默认值是0.0f;

浮点数不能用来表示精确的值,如货币;

例子:float f1 = 234.5f。

double:

double数据类型是双精度、64位、符合IEEE 754标准的浮点数;

浮点数的默认类型为double类型;

double类型同样不能表示精确的值,如货币;

默认值是0.0d;

例子:double d1 = 123.4。

boolean:

boolean数据类型表示一位的信息;

只有两个取值:true和false;

这种类型只作为一种标志来记录true/false情况;

默认值是false;

例子:boolean one = true。

char:

char类型是一个单一的16位Unicode字符;

最小值是’\u0000’(即为0);

最大值是’\uffff’(即为65,535);

char数据类型可以储存任何字符;

例子:char letter = ‘A’。

```java

public class PrimitiveTypeTest {

public static void main(String[] args) {

// byte

System.out.println("基本类型:byte二进制位数:" + Byte.SIZE);

System.out.println("包装类:java.lang.Byte");

System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);

System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);

System.out.println();

// short

System.out.println("基本类型:short二进制位数:" + Short.SIZE);

System.out.println("包装类:java.lang.Short");

System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);

System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);

System.out.println();

// int

System.out.println("基本类型:int二进制位数:" + Integer.SIZE);

System.out.println("包装类:java.lang.Integer");

System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);

System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);

System.out.println();

// long

System.out.println("基本类型:long二进制位数:" + Long.SIZE);

System.out.println("包装类:java.lang.Long");

System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);

System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);

System.out.println();

// float

System.out.println("基本类型:float二进制位数:" + Float.SIZE);

System.out.println("包装类:java.lang.Float");

System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);

System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);

System.out.println();

// double

System.out.println("基本类型:double二进制位数:" + Double.SIZE);

System.out.println("包装类:java.lang.Double");

System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);

System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);

System.out.println();

// char

System.out.println("基本类型:char二进制位数:" + Character.SIZE);

System.out.println("包装类:java.lang.Character");

//以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台

System.out.println("最小值:Character.MIN_VALUE="

+ (int) Character.MIN_VALUE);

//以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台

System.out.println("最大值:Character.MAX_VALUE="

+ (int) Character.MAX_VALUE);

}

}

```

>引用类型

在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如Employee、Pubby等。变量一旦声明后,类型就不能被改变了。

对象、数组都是引用数据类型。

所有引用类型的默认值都是null。

一个引用变量可以用来引用与任何与之兼容的类型。

例子:Site site = new Site("Runoob")。

##Java常量

常量在程序运行时,不会被修改的量。

在Java中使用final关键字来修饰常量,声明方式和变量类似:

final double PI = 3.1415927;

虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。

字面量可以赋给任何内置类型的变量。例如:

byte a = 68;

char a = 'A'

byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。

当使用常量的时候,前缀0表示8进制,而前缀0x代表16进制。例如:

int decimal = 100;

int octal = 0144;

int hexa =0x64;

和其他语言一样,Java的字符串常量也是包含在两个引号之间的字符序列。下面是字符串型字面量的例子:

"Hello World"

"two\nlines"

"\"This is in quotes\""

字符串常量和字符常量都可以包含任何Unicode字符。例如:

char a = '\u0001';

String a = "\u0001";

##Java语言支持的变量类型有:

类变量:独立于方法之外的变量,用static修饰。

实例变量:独立于方法之外的变量,不过没有static修饰。

局部变量:类的方法中的变量。

## java中的类变量,实例变量,局部变量的比较

类变量、成员变量、局部变量

类变量(也叫静态变量)是类中独立于方法之外的变量,用static修饰。(static表示“全局的”、“静态的”,用来修饰成员变量和成员方法,或静态代码块(静态代码块独立于类成员,jvm加载类时会执行静态代码块,每个代码块只执行一次,按顺序执行))。

成员变量(也叫“实例变量”、“域”)也是类中独立于方法之外的变量,不过没有static修饰。

局部变量是类的方法中的变量。

```java

public class Variable{

static int allClicks=0;//类变量

String str="hello world";//实例变量

public void method(){

int i =0;//局部变量

}

}

```

成员变量也称为:“域”,“实例变量”,在实体类或数据类中被称为“属性”或“字段”。当成员变量可以改变时,被称为对象的状态。

常量:用final修饰,值一旦给定就不能修改

##Java局部变量、实例变量、类变量(静态变量)区别

Java局部变量实例变量类变量静态变量区别

局部变量

实例变量

类变量静态变量

伪代码说明

实例变量与类变量区别

1.局部变量:

局部变量是类的方法中的变量;

2.实例变量:

实例变量也是类中独立于方法之外的变量,不过没有static修饰,也叫对象变量

3.类变量(静态变量):

类变量是类中独立于方法之外的变量,用static修饰,也叫静态变量

4.伪代码说明

```java

public class Variable{

static int allClicks=0;//类变量

String str="hello world";//实例变量

public void method(){

int i =0;//局部变量

}

}

```

5.实例变量与类变量区别

区别在于:

类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;

demo说明:(可能存在错误)

```java

public class A{

staticint a = 0; //类变量

private int b = 0; //实力变量

}

public class B{

public void main (String[] args){

A a1 = new A();

A a2 = new A();

a1.a = 3;//等同于A.a = 3;

a1.b = 4 ;

System.out.println(a2.a); //结果为3

//类变量是针对所有对象的,所以a1改变a,a2的a也改变

System.out.println(a2.b); //结果为0

//实例只改变自身的,所以a1对象的b改变,不影响对象a2的b变量

}

}

```

##Java局部变量

局部变量声明在方法、构造方法或者语句块中;

局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;

访问修饰符不能用于局部变量;

局部变量只在声明它的方法、构造方法或者语句块中可见;

局部变量是在栈上分配的。

局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

##实例变量

实例变量声明在一个类中,但在方法、构造方法和语句块之外;

当一个对象被实例化之后,每个实例变量的值就跟着确定;

实例变量在对象创建的时候创建,在对象被销毁的时候销毁;

实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;

实例变量可以声明在使用前或者使用后;

访问修饰符可以修饰实例变量;

实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;

实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;

实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。

##类变量(静态变量)

类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。

无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。

静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。

静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。

静态变量在程序开始时创建,在程序结束时销毁。

与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。

默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。

静态变量可以通过:ClassName.VariableName的方式访问。

类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。

##构造器

子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。

如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。

posted @ 2017-09-30 20:37  素丶素  阅读(328)  评论(0编辑  收藏  举报