1.JAVA命名规则
驼峰。单词首字母大写。
注意JAVA编程规范。
2.输出输入
System.out.println();
Scanner in=new Scanner(System.in);
3.break 和 continue
break 跳出循环,而且break所在的循环体已经结束。
continue 中断循环中的迭代,继续循环下一个迭代。continue所在的循环体没有结束。
break跳出本层循环,continue跳出本次循环。
4. for each 循环 读作(for each element in a)
for(variable : collection) statement
for(int element :a) System.out.println(element);
// 16-07-2018
5. 阅读JAVA编码规范
代码结构说明可以导入,(大雾),自己写的特别难看。
6. for each 循环语句不能自动处理二维数组的每一个元素,它是按照行,也就是一维数组处理的。要想访问二维数组a的所有元素,需要使用两个嵌套的循环,如下所示。
for(double[] row : a)
for(double value : row)
do something with value
/**
* 杨辉三角
* @author panbo
*time:17-07-2018
*/
public class MyJavaPrograme_LotteryArray {
public static void main(String[] args)
{
final int NMAX=10;
//allocate triangular array
int[][] odds = new int[NMAX+1][];
for(int n=0;n<=NMAX;n++)
{
odds[n]=new int[n+1];
}
//fill triangular array
for(int n =0;n< odds.length;n++)
{
for (int k=0;k < odds[n].length;k++)
{
// compute binomial coefficient
int lotteryOdds = 1;
for(int i=1;i<=k;i++)
{
lotteryOdds=lotteryOdds*(n-i+1)/i;
}
odds[n][k]=lotteryOdds;
}
}
for(int[] row : odds)
{
for(int odd : row)
System.out.printf("%4d",odd);
System.out.println();
}
}
7. JAVA中类有三种关系:依赖(“uses-a”),聚合(“has-a”),继承(“is-a”).可以使用类的接口解决复杂任务,而不必知道其中实现的具体细节。
8.构造器 (就是C++里面的构造函数,但是一定要和new一起)
构造器与类同名,每个类可以有一个以上的构造器,构造器可以有0个、1个、或多个参数,构造器没有返回值、构造器总是伴随着new操作一起调用。
9.封装问题.
如果需要返回一个可变的数据域的拷贝,应该用clone来避免错误。
class Employee
{
private Date hireDay;
...
public Date getHireDay()
{
return hireDay.clone();
}
...
}
C++里面只能有一个main,但是JAVA里面每一个类可以有一个main方法
10. Java 程序设计 对对象采用的不是引用调用,实际上,对象引用进行的是值传递。
一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)
一个方法可以改变一个对象参数的状态
一个方法不能让对象参数引用一个新的对象
(c++和Java还是有区别的,别用自己的思想去想当然,需要查资料的多动手,争取手熟)
11.注释
类注释 /**+回车 会自动生成。
方法注释@param 变量描述 @return描述 @throws描述 抛出异常
域注释,
通用注释 @author @version @since @see @link 增加超链接,可以用于类,也可以用于方法
12. 类的设计技巧
1)一定要保证数据私有,不要破坏封装性。
2) 一定要对数据初始化。 Java不会对局部变量进行初始化,但是会对对象的实例域进行初始化。最好不要依赖于系统的默认值。
3)不要在类中使用过多的基本类型,将职责过多的类进行分解。
4)类名和方法名要能够体现它们的职责。
13. 继承
Java中用extends代替了C++里面的冒号(:),在Java中,所有的继承都是共有继承,
父类=超类,super
一个对象变量可以指示多种实际类型的现象被称为多态。在运行时,能够自动的选择哪个方法的现象称为动态绑定。
对象变量是多态的。
final 阻止继承, 如果在类名前,该类无法被继承,不允许扩展。 如果在方法前,子类无法覆盖这个方法。
abstract 抽象类。
在C++中,有一种在尾部用=0标记的抽象方法,称为纯虚函数。
class Person //c++
{
public:
virtual string getDescription()=0;
....
};
只要有一个纯虚函数,这个类就是抽象类。
20-07-2018: 被问到的问题
1:Java中,类如何向上层转化,为什么。
向上转型,通俗讲就是将子类对象转为父类对象。 向上转型时对象会遗失除与父类对象共有的其他方法。
向上转型的好处:代码变得简洁。 否则以子类对象为参数时,有多少个子类就需要写多少个函数。
子类可以赋值给超类,称之为向上转型,这个是自动的。
超类不可以赋值给子类,这个是向下转型,需要我们手动实现。
赋值给超类的子类引用在运行期间表现出不同的特性,这就是多态。
protect 作用于类的时候:只可以被本类本包的数据所访问。
protect 作用于 成员函数,方法,构造器的时候,可以被其他包的子类所调用,,而且往往写protected就是希望子类重写该函数。
2.Jvm内存总体一共分为了4个部分
stack segement(栈区): 保存基本数据类型的变量和自定义对象的引用。
heap segment(堆区):对象,每一个对象都包含了一个与之对应的class的信息
code segment(代码区):类中的方法,存在代码区。
data segment(数据区):static的变量或者字符串常量
在一个jvm实例的内部,类型信息被存储在一个称为方法区的内存逻辑区中。类型信息是由类加载器在类加载时从类文件中提取出来的。类(静态)变量也存储在方法区中。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
3 。排序
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。
排序有一个特别好的博客:https://www.cnblogs.com/onepixel/articles/7674659.html
Object类是比较特殊的类,它是所有类的父类。“==”比较的是两个对象的引用是否相等,而equals方法是比较两个对象的实际内容。
抽象类,abstract 修饰, 有抽象方法的一定是抽象类,但是抽象类中不一定有抽象方法,抽象类被继承后,需要实现其中所有的抽象方法
继承抽象类的所有子类需要将抽象类中的抽象方法进行覆盖。
如果每个子类都重写这个方法,就会造成代码冗余。所以引入“接口”
1. 接口
用interface 关键字定义,在接口中定义的任何字段都是static和final的
接口是抽象类的延伸,可以将它看做是纯粹的抽象类。
接口中所有方法都没有方法体。
import除了可以导入包之外,还可以导入静态成员变量和静态成员方法。
final定义的变量为常量,必须进行初始化。
final可以修饰数组,一旦一个对象引用被修饰为final后,它只能恒定指向一个对象,无法将其改变指向另一个对象。
一个既是static又是final的字段只占据一段不能改变的存储空间。
异常:
运行时异常:
种类 | 说明 |
---|---|
NullPointerException | 空指针异常 |
ArrayIndexOutOfBoundsException | 数组下标越界异常 |
ArithmeticException | 算术异常 |
ArrayStoreException | 数组中包含不兼容的值抛出的异常 |
IllegalArgumentException | 非法参数异常 |
SecurityException | 安全性异常 |
NegativeArraySizeException | 数组长度为负异常 |
一个项目的开始到结束