java-基础-1

第一章     基础

1.1 命名

1)         命名硬性规则

 

2)         补充规则1

变量名由多单词组成时,第一个单词的首字母小写,其后单词的首字母大写,俗称骆驼式命名法(也称驼峰命名法),如myAge

变量命名时,尽量简短且能清楚的表达变量的作用,做到见名知意。如:定义变量名stuName保存“学生姓名”信息。

Ps:java变量名的长度没有限制,但java语言是区分大小写的,所以price和Price是两个完全不同的变量哦

3)         补充规则2

常量一般用大写字母

1.2 运算符

1)自增自减

++

如++a,等效于:a = a + 1;

a++,等效于:a = a执行完后再a = a+ 1;

num2 = ++ num1;等效于:num1 = num1 + 1; num2 = num1;

2)赋值运算符

从右往左运算

3)复合赋值运算符

+=:X+=5等效于 X = X + 5;

-+:X-=5 等效于 X = X – 5;

*=:X*=5 等效于 X = X * 5;

/=:X/=5 等效于 X = X / 5;

%=:X%=5 等效于 X = X % 5;

4)运算符的优先级

 

 

运算符

描述

()

圆括号

!,++,--

逻辑非,自增,自减

*,/,%

乘法,出发,取余

+,-

加法,减法

<,<=,>,>=

小于,小于等于,大于,大于等于

==,!=

等于,不等于

&&

逻辑与

||

逻辑或

=,+=,*=,/=,%=,-=

赋值运算符,复合赋值运算符

5)关系运算符

1、字母比较大小,实际是比较字符的ASCII码值

48~57为0到9十个阿拉伯数字

65~90为26个大写英文字母

97~122为26个小写英文字母

6)逻辑&

不是短路运算符,&&才是短路运算符,||也是短路运算符

7)==

比较两边是否相等,两边的类型应该一致

1、int c=3,d=2; ((c-1>=d)==1)

表达式1是:c-1>=d,计算出来是2>=2,为true,布尔型

表达式2是:数字1,整数型

所以会编译报错,换成((c-1>=d)==true)即可。

2、浮点数与整数比较是否相等,比较的是值

float f=9.0f;long l=9; 比较f==l?结果是相等。

1.3 数据类型

Java数据类型分为基本数据类型(不具有对象化能力,包装类解决)和引用数据类型。

基本数据类型:

类型

对应字节数

short

2

int

4

long

8

float

4

double

8

char

2

浮点型

1、 JDK的描述,参数类型为double的构造方法的结果有一定的不可预知性。因为二进制有时不能准确表达浮点数。

2、 Java的浮点数只能用来进行科学计算或工程计算,在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。

对应的三种构造函数:

1. BigDecimal(double val)将double表示形式转换为BigDecimal *不建议使用。因为参数为double类型。参数必须为double类型时,可用Double.toString(double)转成String。

2. BigDecimal(int val)将int表示形式转换成BigDecimal

3. BigDecimal(String val)将String表示形式转换成BigDecimal

其他:
BigDecimal类提供了相应的加、减、乘、除方法,add、subtract、multiply、divide;
BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。比如加减乘除计算后其实是返回一个新的BigDecimal对象。

一个Byte共有8个Bit,一个byte即为一个字节。

包装类

基本类型

对应的包装类

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

boolean

Boolean

类型转换

1)         向上类型转换(隐式/自动类型转换)是小类型到大类型的转换

2)         向下类型转换(强制类型转换)是大类型到小类型

3)         Instanceof运算符,解决引用对象的类型,避免类型转换的安全性问题

String基本类型和包装类的转换有三种:

 

数组

Java语言中声明数组时不能指定其长度(数组中元素的数)。

int[] a = {0};

int a1[] = new int[3];

数组元素默认初始值

 

不管是对象、基本类型还是对象数组、基本类型数组,在函数中都不能改变其实际地址但能改变其中的内容。

 

 

String类型默认是null

:String []a = new String[10];

则:a[0]~a[9] = null

1.4 面向对象

对象:用来描述客观事物的一个实体,是由一组属性和方法构成。

类是模子,确定对象将会拥有的特征(属性)和行为(方法)。

类的特点:

类是对象的类型

具有相同属性和方法的一组对象的集合

类和对象的关系:

类是抽象的概念,仅仅是模板;对象时具体的实体;

类是对象的类型;对象是特定类型的数据;

先定义类,再实例化对象。

单一职责原则

面向对象的一个重要原则:一个类,应该有且只有一个引起变化的原因。即程序设计中,尽量把不同的职责,放在不同的职责中;不同的变化原因,封装到不同的类中。

对象实例化

对象间的引用传递,实际上传递的是堆内存空间的使用权。

构造方法

构造方法和类名相同,且没有返回值;

无构造方法是,系统会自动添加无参构造方法;

当有构造方法时,系统不会自动再添加构造方法(但父类一定要有无参构造方法。);

构造方法可以重载(有相同的名称,但是参数列表不相同的情形);

构造方法用于对象实例化。

关键字this

当前对象的默认引用。

使用:

this.属性,操作当前对象的属性;

this.方法,调用当前对象的方法;

this(参数);调用重载的构造方法,必须是构造方法第一条语句。

关键字super

super是父类对象的一个引用。

使用:

super.属性,操作当前对象父类的属性;

super.方法,调用当前对象父类的方法;

super (参数);调用重载的构造方法,必须是构造方法第一条语句。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。父类一定要有无参构造方法。

this和super的区别

1)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

2)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

3)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字

4)super是父类的,this是本类的。

5)尽管可以用this调用一个构造器,但却不能调用两个。

但是二者都不能在静态方法中使用。

 

1.5 关键字static

1)  Static可以修饰属性、方法,不能修饰类、方法内局部变量。

2) 静态变量被所有的对象所共享,在内存中只有一个副本

3)  static方法是没有this的方法,不依赖任何对象

4)  静态方法中可以直接调用同类中的静态成员,但不能调用非静态成员(创建类,通过类访问)

5)  静态方法中不能直接调用非静态方法,需通过对象来访问非静态方法,普通方法中,可直接访问同类中的静态变量和非静态变量

6)  静态代码块:statis+{}。普通代码块,方法内的代码块;构造代码块:类内的代码块。无论实例产生多少对象,静态代码块只执行一次。构造代码块随实例化过程调用,普通代码块随方法调用执行。

7)  静态初始化块、静态变量只有在类加载时执行;且只会执行一次;同时静态初始化块只能给静态变量赋值,不能初始化普通成员变量;类中可以有多个static块;静态代码块可以优化程序性能

8)  C/C++中static是可以作用域局部变量的,但Java:static是不允许用来修饰局部变量

对象的初始化

1)         类加载。初始化父类的静态变量,赋默认值;执行父类的静态初始化代码块;初始化子类的静态变量,赋默认值;执行子类的静态初始化代码块。

2)     创建类。初始化父类的非static属性,赋默认值;执行父类的instance初始化块;执行父类的构造方法;初始化子类的非static属性,赋默认值;执行子类的instance初始化块;执行子类的构造方法。后续再创建子类对象时,只执行创建类这一个步骤。

3)    

 

posted @ 2018-10-23 22:17  huinina  阅读(166)  评论(0)    收藏  举报