您的位置:首页 > 编程语言 > Java开发

Java学习--简单java语法

2017-10-28 11:59 246 查看

简单java语法

1. application与applet:

application:应用程序有main入口
applet:需要嵌在网页中,不可以单独执行


2. javac和java:

javac:编译器(汇编链接)->可执行文件
java:必须靠执行器执行可执行文件
工作时首先确认path,classpath是否正确,其次调用java执行程序时要写带package的类全名


3. 变量:

char:**2**个字节,*unicode*编码
1. 只有基本变量才是存值的,没有unsigned的修饰
引用变量都指向实体


int a=4;
int b=a;//新的实体
String sa="aa";
String sb=sa;//产生的引用类型sb,引用了同一块实体
sa="bb";//sa引用了新的实体


2. 做参数时:
基本类型有形参实参之分
引用类型操作了实际对象实体


4. 没有指针:

引用代替了指针,可以随时改变所指向的实体
类的成员是引用类型时,不同的实例引用同一个实体时要注意变化的发生。


5. 基本类型的包装型:语法糖

Integer I=10;//Integer.valueOf(10);
int i=I;//I.intValue();
<!-- 集合中 -->
Object[] ary={1,"aaa"};//自动把1变成对象


6. 不定长度参数…:语法糖,实质上一个数组

一个函数最多有一个不定参数类型,且要放在最后位置

public static void test(String... args) {
System.out.println(args.getClass());
for (String arg : args) {
System.out.println(arg);
}
}


7. ==比较:

因为java的两种变量类型导致了

1. 基本:==比较值的不同

2. 引用:==比较引用的实体是否是同一个

例外:

1. 浮点数:不用==,用差值

2. NAN:不是一个数,Double.NAN==Double.NAN//false

3. 装箱Integer:-128-127时虽然是对象,因为缓存,==返回true

4. 枚举:直接用==,引用了唯一的实例化

5. 对象:重写equals(),判断内容相等。(同时重写hashcode())

6. String与常量”hello”:jvm会自动引用到同一个常量上去,可以用==比较

String hello="hello", lo="lo";
hello=="hello";//true
hello==other.hello;//true,自动引用到同一个"hello"
hello=="hel"+"lo";//true,常量计算后
hello=="hel"+lo;//false,变量
hello==new String("hello");//false,新new的变量
hello==("hel"+lo).intern();//true,内部化成了常量


8. 算术运算符:

无符号右移:a>>>b
+:字符串连接


9. 表达式:

10. 注释:

/** */:doc注释


11. 控制语句:

switch(a) {case:}:a可以是string
break/continue:加标记控制跳出或继续哪重循环。


12. 数组:

int [5] a;//非法:数组是一个引用类型,需要new,在堆里
length:自带函数返回长度
Arrays.sort(a):自带排序
增强for:只读的


int[] ages=new int[5];
//for(type of item:array)
for(int age:ages){

}


Array.Copy(from,start,to,start,len):自带拷贝函数


// 二维数组:数组的数组
int[][] a=new int[4][];//new数组一定要确定其长度,长度/行为4,类型是int[]
int[][] a=new int[][4];//非法,和cpp不同


13. 接口:所有方法都自动是public abstract

与类的继承关系无关
通过对接口的引用来new具体实例


public interface interface1{}
interface1 my=new concreteclass();


14. 枚举:enum,语法糖是一种特殊的class类型

实际上每个元素都是一个枚举类的实例


15. 注解:语法糖,附加信息给编译器,所有的注解也是一个类

@Override
@Deprecated
@SuppressWarnings


16. 多态:

1. 编译时多态:重载overload
2. 运行时多态(虚方法调用):重写(覆盖)override
需要向上造型(new时、传参时),且子类要覆盖父类方法
类型确定:instanceof
3. 不是虚方法的情况
1. static:跟实例无关
2. private:无法覆盖
3. final:无法覆盖


17. 构造方法:

任何类都要有构造方法,可以为空。
抽象类也要有,虽然不能被new
基本顺序:
static() ->super()-> {}和定义初始化顺序 ->构造器内其他
1. this,super:最先执行
2. 实例初始化:先于构造器中除了thissuper外执行


class a{
int ia=10;
{
ia=11;
}
}


3. 静态初始化:类加载时执行


class a{
int ia=10;
static{
ia=11;
}
}


18. 垃圾回收:

由java虚拟机(jvm)的垃圾回收线程来完成

引用计数:回收时自动调用finalize()

try-with-resources:代替做资源的释放

try(Scanner in=new Scanner(System.in)){

}
//<!-- 等价 -->
finally{
in.close();
}


19. 内部类和匿名类

内部类:定义在类内部

//<!-- 内部类 -->
public class out{
private class inner{

}
}
//<!-- 静态的嵌套类 -->
public class out2{
static class inner2{

}
}
main{
out a=new out();//a引用一个实例
out.inner b=a.new inner();//内部类是实例a的类
out2 aa=new out2();
out2.inner bb=new out2.inner2();//static和具体实例无关了,只是要
//告诉inner2的全名
}


局部类:定义在成员函数内部
匿名类:一次性使用的类,定义时即new的局部类,没有名字也就没有构造方法


//<!-- 事件监听器 -->
//<!-- 直接使用父类或接口来new,注意语法格式父类后加(){} -->
btnN.addActinListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent event){
//...
}
})
//<!-- 匿名类:做方法的参数:接口的实例 -->


20. Lambda表达式:匿名类的一个实例,减少重复代码

//参数->表达式形式 重写了匿名类的函数
//()->{} 无参数,返回值是语句
//x->x*x 参数x,返回值x*x
//<!-- 要求接口只能有一个抽象函数 -->
btn.addActionListener(e->{});
//<!-- 例子Comparator -->
Person[] people=new Person[100];
Comparator<Person> compareAge=
(p1,p2)->p1.age-p2.age;
Arrays.sort(people,compareAge);


巨大进步:将代码(重写函数)变成了数据(一个实例)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: