public class HelloWorld {
public static void main(String[] args) {
System.out.println("hello world!");
}
}
关键词:
类,对象,方法,属性,引用,变量,
java特性
jdk与jre有什么区别?
int x=1; while(x){}//是不行的
编译器
(这篇博客写的挺好,至少比书里好)
IDEA可以导出javadoc文件,
按照注释后面的元素分类,
程序员分:客户端程序员,与类开发者,对于JDK来说,我就是客户端程序员
引用:
没有被引用的对象将被垃圾回收器GC回收,引用数,对象数
为什么需要封装:因为不封装数据会暴露,通过封装能实现数据隐藏,
变量
来判断值是否相同,而
也可以判断两个引用是否指向同一对象,而判断两个对象是否相等则是通过equals()方法,
变量类型(根据位置来分类)
分3类:静态变量(位于方法之外,用static修饰),实例变量(位于方法外,没有static修饰),局部变量(位于方法之内)
局部变量:在方法,构造方法,语句块内声明,执行完后被销毁,无默认值,在”栈“上分配
实例变量:在类中声明,在方法,构造方法,语句块之外,在对象创建时创建,在对象销毁时销毁,
有默认值,整型为0,布尔类型为false,引用类型为NULL,
在创建数组的时候,会对元素进行初始化,如基本类型的boolean就会将元素初始化成false,而引用类型的则是默认元素值为null,
Boolean[] booleans=new Boolean[7];
System.out.println(Arrays.toString(booleans));//[null, null, null, null, null, null, null]
boolean[] booleans1=new boolean[7];
System.out.println(Arrays.toString(booleans1));//[false, false, false, false, false, false, false]
方法
public int addNums(int a,int b){return a+b;}
public double addNums(double a,double b){return a+b;}
修饰符
访问修饰符
非访问修饰符
==
与!=
不仅仅适用于基本数据类型,也适用于所有对象,但是对象使用 ==
来判断只能是比较引用,而非比较对象的内容,如果要比较对象内容,你只能用equals方法,if-else
循环结构 for,foreach,while, do…while,
do…while则是至少执行一次
其中增强for循环,运用于数组,和任何Iterable对象
break是跳出本层循环,而continue则是跳出本次循环,进入下一次循环,
选择语句switch case
作用:用于判断变量与一系列值中的某个值是否相等
return的作用
初始化和清理都是涉及到安全的两个话题
为什么需要初始化?
为什么需要方法重载?
方法重载的这种需求最初来源于我们需要以多种方式创建对象,但是构造器必须与类名同名,所以我们就需要至少2个同名同名的构造器,下面观点论证了方法重载的必要性
通常情况下我们不需要对所执行的动作进行明确的区分,如同样是洗,你通常会说"洗衬衫,洗车",而不会说以”洗衬衫的方式洗衬衫,以洗车的方式洗车“,
怎样重载?
重载规则
为什么要有this关键字?
this关键字加参数列表就可以调用构造器,而且为了减少冗余,可以在当前构造器调用另一个构造器
默认构造器(也叫无参构造器)
static方法就是没有this(代表当前对象)的方法,所以你不能直接调用非静态方法,(当然,你可以创建另一个对象去调用)相反,非静态方法可以直接调用静态方法
// Sup.java
public class Sup {
private Object sup = new SupAssist();
{
System.out.println("sup non-static block");
}
public static Object sup1 = new SupStaticAssist();
static {
System.out.println("sup static block");
}
public Sup() {
System.out.println("sup constructor");
}
}
class SupAssist {
public SupAssist() {
System.out.println("sup assist variable");
}
}
class SupStaticAssist {
public SupStaticAssist() {
System.out.println("sup static assist variable");
}
}
//Sub.java
public class Sub extends Sup{
static {
System.out.println("sub static block");
}
{
System.out.println("sub non-static block");
}
private Object sub=new SubAssist();
public static Object sub1=new SubStaticAssist();
public Sub() {
System.out.println("sub constructor");
}
public static void main(String[] args) {
new Sub();
}
}
class SubAssist {
public SubAssist() {
System.out.println("sub assist variable");
}
}
class SubStaticAssist {
public SubStaticAssist() {
System.out.println("sub static assist variable");
}
}
Integer[] a = {
new Integer(1),
new Integer(2),
3//autoBoxing
};
//第二种更实用,不仅可以用在定义,还可以作为参数传递
Integer[] b = new Integer[]{
new Integer(1),
new Integer(2),
3//autoBoxing
};
public static void printArray(Object... o) {
for (Object o1 : o) {
System.out.print(o1);
}
System.out.println();
}
public static void main(String[] args) {
printArray(1,2,3,4);
printArray(new Integer(1),new Integer(2),new Integer(3));
printArray(new Integer[]{1,2,3});//直接传数组也行
}
为什么需要枚举?
枚举的优势
枚举的使用
enum Spiciness {
NOT,MILD,MEDIUM,HOT,FLAMING
}
public static void main(String[] args) {
Spiciness s=Spiciness.FLAMING;
System.out.println(s);
for (Spiciness s1 : Spiciness.values()) {
System.out.println(s1+",ordinal "+s1.ordinal());
}
}
枚举可以与switch搭配,而且在switch中不需要使用类名。
对象有生有死,即对象有生命周期
关键词:栈,堆,范围,构造器
方法调用和变量生存空间:栈,其中变量是指局部变量,实例变量则是生存在对象中,
对象生存空间:堆
调用一个方法,那么这个方法就会被堆到栈顶,只有这个方法被执行完才会被释放掉(局部变量也会被释放掉)
为什么要知道栈和堆的机制?对以下知识点的理解很有用
描述对象的属性和行为,(即会有什么,会怎么做,如 会有名字,人会跑步)
对象
方法
类之间常用的关系:依赖,聚合,继承
JAVA命名特点
构造器
对象的三大特征:行为,状态(即属性),标识
创建对象的方法
对象的创建过程:声明引用-》创建对象-》连接对象与引用,
什么是不可变类?什么是可变类?取决于有没有set方法