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);
巨大进步:将代码(重写函数)变成了数据(一个实例)
相关文章推荐
- Java开发学习笔记之二:一个简单的Servlet
- XML技术学习(一):DTD语法概述及简单应用举例
- 关于java打印功能的最简单实现的学习笔记
- java:log4j学习(4)-转帖:Log4j 简单配置及问答
- JAVA学习提高之----简单克隆与深度克隆的思考
- 实例详细学习PHP的简单语法
- JAVA学习中应该注意的一些简单问题?
- 从最简单的开始学习JAVA【HelloWorld】...
- Java反射学习简单应用
- [转]CoreJava学习笔记_Java语法基础
- jQuery 语法简单介绍和入门学习
- jQuery 语法简单介绍和入门学习
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- 一个用Java编写的简单聊天室 用来学习Socket编程
- Java学习备忘录(二)基础语法和数组(原创)
- jQuery 语法简单介绍和入门学习
- Java开发学习笔记之十二:JSP语法
- Java学习1-使用java mail包发送简单邮件
- Jdk1.5的新语法和一些java学习的小知识点
- CG学习(2)——CG的基本语法及核心函数的面向对象简单封装