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) 

浙公网安备 33010602011771号