走进Java
先百度下学习方案。
在线文档
http://tool.oschina.net/apidocs/apidoc?api=jdk_7u4
http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
菜鸟教程
http://www.runoob.com/java/java-tutorial.html
跟它学吧。。
javac
java
编译、运行,第一课必然是这点,但不用链接吗?现在还不知道。
javac编译出的文件是.class,似乎不是最终的可执行程序,但可以用java命令执行,难度java的输出文件是.class?这似乎是类的obj吧。
JavaSE
JavaEE
JavaME
标准版、企业版、移动版。
特性:
1. 简单
没有操作符重载、多继承、自动的强制类型转换、指针。托管内存。
2. 面向对象、使用接口
接口支持多继承,类不支持。
Java支持全面的动态绑定,不懂。
3. 网络支持, java net
URL, URLConnection, Socket,ServerSocket, RMI(远程方法激活)
4. 健壮
强类型、异常、内存托管。处处与C++对比。
5. 安全
网络环境下的 ClassLoader , SecurityManager。
6. 中立,无非就是虚拟机机制的跨平台特性。
7. 移植,同上。
8. 解释性语言,类似.net
9. 高性能,C++笑了。
10. 多线程。
这大概是我在C++里的一个痛点了。
synchronized 线程同步机制
11. 动态
Java类的动态加载。
有些明白为什么编译出来是.class了,这就是编译出来的文件,好像java还有包的概念,这就是它的结构吗?
注释和C++一样。 // /* */
对象、类、方法、实例变量
类名首字母大写
方法名首字母小写
源文件名与类名相同
入口 public static void main(String args[])
标识符 没什么特别
修饰符
default
是switch的默认分支?那应该是在关键字部分的作用而不是修饰符。那是默认构造函数?像C++11那样?
strictfp
变量 :
类变量(静态变量)
按Java的规则,没有全局变量,只能是静态变量了。
数组
枚举与c#没什么区别
不对,Java中可以在枚举中构造方法、变量、构造函数,也即枚举也是一个类型。
关键字
boolen, 不是bool 需记一下
break
跳出循环或者label代码段,label代码段,比较陌生const 未使用。那怎么定义常量呢?
extends 表示一个类是另一个类的子类,怎么用呢?
final
表示一个值在初始化之后就不能再改变了
表示方法不能被重写,或者一个类不能有子类。这个解释我懂,什么叫一个值初始化之后就不能再改变了呢?常量?
goto 未使用,即没有goto 那也就是说没有const了,还是怎么定义常量呢
implements
表示一个类实现了接口import
导入类instanceof
测试一个对象是否是某个类的实例,类似 iskindof 吧interface
接口,一种抽象的类型,仅有方法和常量的定义。定义方法我明白,常量也可以在接口中定义?native
表示方法用非java代码实现,什么鬼?调用C++什么的非托管方法?package
一系列相关类组成一个包,不懂。strictfp
浮点数比较使用严格的规则,不懂。synchronized
表示同一时间只能由一个线程访问的代码块,线程同步,概念懂。throws
定义方法可能抛出的异常。概念知道。transient
修饰不要序列化的字段,不懂。volatile
标记字段可能会被多个线程同时访问,而不做同步,公共数据嘛。
刚LOL了一把,继续。
JAVA特性:
多态、继承、封装、抽象、类、对象、实例、方法、消息解析。
一个源文件只能有一个public类,可以有多个类。源文件名与public类相同。
如果一个类定义在某个包内, 则首行语句为 package 包名
import 在package之后,类定义之前。
package和import对整个文件中的类生效。
包: 给类分类,看定义类似名称空间。
测试代码:
package Employ; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ import java.io.*; /** * * @author y */ public class Employee { String name; int age; String designation; double salary; // 构造函数,java里叫构造器 public Employee(String name) { this.name = name; } // 设置age public void empAge(int empAge){ this.age = empAge; } // 设置designation public void empDesignation(String empDesig){ this.designation = empDesig; } // 设置salary public void empSalary(double empSalary){ salary = empSalary; } // 打印 public void printEmployee() { System.out.println("Name:" + name); System.out.println("Age:" + age); System.out.println("Designation:" + designation); System.out.println("Salary:" + salary); } }
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package Employ; import Employ.Employee; /** * * @author y */ public class EmployeeTest { public static void main(String args[]){ // 构造两个employee Employee empOne = new Employee("小杨"); Employee empTwo = new Employee("大杨"); // 分别调用 empOne.empAge(2); empOne.empDesignation("小杨小杨"); empOne.empSalary(1000); empOne.printEmployee(); empTwo.empAge(30); empTwo.empDesignation("大杨大杨"); empTwo.empSalary(400); empTwo.printEmployee(); } }
顺便测试了运行配置,可以在同一个项目里选择启动的入口类。一个项目中可以有多个main()。c++就不行了。
数据类型
java好像没有unsignd 类型?
所有数字类型有 SIZE MAX_VALUE MIN_VALUE三个静态变量,定义了类型的位数、最大值、最小值。
有void类型,无法操作。java.long.Void
果然没猜错,java使用final定义常量。
这里的转义,以后会很有用:
http://www.runoob.com/java/java-basic-datatypes.html
访问修饰符,
default,默认,包内可见类似c#的internal
private,public,
protected,与c++和c#不同的是,对包内的类和所有子类都可见。
接口,接口里的变量默认为 public static final, 方法默认为public
类和接口不能声明为private
Java的main()必须是公有的, public static 。
protected也不能声明类和接口。声明的成员可以被包内的类可见。接口的成员和方法也不能声明为protected
父类public,子类必须public
父类protected, 子类可以public, protected。
父类默认,子类可以private
final , 类不能被继承,方法不能被重新定义,变量为常量。
final修饰的引用,不能指向其他对象,但可以被修改。即,这相当于指针常量而不是常量指针。
抽象方法必须在抽象类中,抽象类可以不包含抽象方法。
使用extends继承类, implement实现接口,略感别扭。
序列化的对象包含被transient修饰的实例变量时,java虚拟机(JVM)跳过该特定的变量
今天到此,
学习了 基础语法,对象和类,数据类型、变量、修饰符。
明天到运算符处。