Java学习--简单java语法

来源:互联网 发布:java开发就业前景 编辑:程序博客网 时间:2024/05/16 15:38

简单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";//truehello==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可以是stringbreak/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. 编译时多态:重载overload2. 运行时多态(虚方法调用):重写(覆盖)override需要向上造型(new时、传参时),且子类要覆盖父类方法类型确定:instanceof3. 不是虚方法的情况    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);
巨大进步:将代码(重写函数)变成了数据(一个实例)
原创粉丝点击