一、类和对象
①构造函数:无返回值,函数名与类名相同,通过参数表的不同实现构造函数的重载。注意:当你不显式定义构造函数时,系统会为你生成一个默认的构造函数,这个构造函数的参数表和函数体都是空的(也就是说你在new的时候不能在()里面写任何东西,这个函数也不做任何事情)。
②如何声明一个对象:
③对象如何访问类内成员:用“.”。
二、数据类型
从这开始我们就开始说变量了。到底什么是变量?变量是使用系统预定义(基本数据类型)或者人为定义(引用或者说对象,其实也是基于基本数据类型)的数据类型定义的在内存中的一片连续(变量是数据结构的单元,数据结构可以不连续)的区域。变量的五要素:数据类型(这个变量占几个字节的内存)、地址(不管这个变量有多大。其地址都是第一个字节的地址)、名字(给程序员和编译器看的)、值(这片区域里面放的数据是什么)、存储类型(一个程序在操作系统里有其固定的内存模型,Java程序是在JVM里,这个内存模型的每一片区域都有其特点,一个变量肯定属于某一片区域)。
①基本(内置)数据类型:虽然Java是一门纯面向对象语言,但是他也像C++一样提供了8种基本的数据类型以方便程序员直接定义,这8种基本数据类型同样也可以作为对象(包装类)进行使用,系统会自动转换(装箱),存在装箱自然存在拆箱了。
看图说各类型的大小:注意boolean是一位(八分之一字节)
②引用数据类型:就是对象,比如Integer i = new Integer(); 注意要这样理解:i作为一种引用数据类型指向了“Integer()”这个对象,我相信引用的底层实现就是指针,只是他不像指针一样可以直接被操作系统的编译器解释。
这里有一个额外的话题:类型转换,大转小强制转换,小转大不必要强制转换,注意:
-
整数的默认类型是 int;
-
小数默认是 double 浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。
三、存储类型(在菜鸟教程上叫变量类型)
我现在还不知道JVM的内存模型长什么样,但是菜鸟上介绍了三种存储类型(成员变量又叫实例变量,静态变量又叫类变量):
通过上表我们能看出一个问题,Java是没有C++的静态局部变量一说的,这是二者的一个重要区别。
三种存储类型除了这四点区别以外还有一个重要区别,那就是他们可以被什么样的修饰符控制?详见下。
四、修饰符(控制符):控制类、函数、变量(三种)的属性。通常放在一条定义语句的最前头,访问一般放在非访问的前头,这个就如同一般将常量定义为大写一样,是个编程习惯。
①访问修饰符:default、public、protected、private
A.能修饰什么?
a.不能修饰局部变量;
b.private和protected不能修饰类,也就是说,在一个文件里,除了main类使用public修饰以外,其他的类前面不能有访问修饰符;
B.作用是什么?实现访问控制。
两点与C++的重要区别:
通过上表可以看出,default和protected几乎差不多,二者和public的区别在于包,和private的区别在于类,这是和C++的一个重要区别,除了这个区别以外,还有一个很重要的区别,那就是在继承时,C++有public、protected、private三种继承方式,而Java只有public这么一种,也就是说,Java的派生类中的继承成员没有private、protected还是protected、public还是public,但是要注意:在重写这些方法时,public只能重写为public,protected可以被重写为public或者protected。
②非访问修饰符:static、final、abstract、transient、synchronized、volatile
A.能修饰什么?
B.作用是什么?
static:我认为它应该主要用于同一类的对象间通信;
final:见上图;
abstract:见上图;
transient:修饰成员变量时表示该变量不持久化存储;
synchronized、volatile:用于线程,暂时不管。
五、运算符(详见菜鸟教程,每个运算符都总结了一张表格)
- 算术运算符
- 关系运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 其他运算符:?:、instanceof
六、程序结构:虽然Java是一门纯面向对象语言,但是函数写起来怎么都得面向过程啊
- 顺序结构
- 选择结构:①if-else;②switch-case;
- 赋值运算符:①for;②do-while;③while。
增强型for循环:
注意:数组名也可以为某个返回值为数组的函数。
七、数组:最基本的数据结构,二要素:同类型、连续
①如何定义一个数组:
dataType[] arrayRefVar = new dataType[arraySize];(应该是可以在后面直接放花括号的)
简化方式:
dataType[] arrayRefVar = {value0, value1, ..., valuek};
②Arrays类,我们已经知道了Java是一门纯面向对象语言,因而什么都是有类的,数组也有,有四个API和一个length成员变量较为常用:
注意:这里是第一次谈及API这个概念,要建立这样一个心态:没有程序员开发一个网站会从0开发,都是基于API即一些已经存在的服务进行开发的,所以能用API就要尽量使用API以减少自己的工作量。有一个关键问题:如何学习使用API?学API的方法很简单,就是看函数三要素,先看函数名,明确功能即这个API能干什么,再看返回值和参数表。
八、字符串
①常量:String
A.如何声明?两种方式:
第一种:String str = "Runoob"; // 公共池
第二种:String str = new String("Runoob"); // 堆
B.字符串长度:int length(); // 注意区别数组的length成员变量;
C.如何连接字符串:不要用concat方法,直接用“+”;
D.如何格式化字符串:两种方法
第一种:printf()
System.out.printf("浮点型变量的值为 " + "%f, 整型变量的值为 " + " %d, 字符串变量的值为 " + "is %s", floatVar, intVar, stringVar);
第二种:format()
String fs; fs = String.format("浮点型变量的值为 " + "%f, 整型变量的值为 " + " %d, 字符串变量的值为 " + " %s", floatVar, intVar, stringVar);
②变量:
A.定义方法以及一些常用方法:
定义:
常用API:
B.二者区别:StringBuffer线程安全,但是慢,StringBuilder线程不安全,但是快。
九、函数:三要素:返回值类型,函数名,参数表。可用所有修饰符修饰。
①可变参数:这个“变”指的是同数据类型参数的数量
②析构函数:首先说清楚,这个函数在C++里是必要的,与构造函数遥相呼应,但是在Java里不是必要的,可有可无,因为JVM会自动进行对象的内存回收。
protected void finalize() {
// 在这里终结代码
}