参考 http://www.runoob.com/java/java-modifier-types.html
一个Java程序可以认为是一系列对象的集
运行 编译:
> javac xxx.java
,运行:> java xxx
类 类名首字母大写
方法 方法名首字母小写
源文件名 和类名相同
主方法入口
public static void main(String []args)
标识符
- 开头: A-Z,a-z,$,_
修饰符
- 访问控制修饰符:default, public, protected, private
- 非访问控制修饰符:final, abstract, strictfp
对象与类
对象 :类的实例
- 状态
- 行为
类 模版,一类对象的状态和行为
public class Dog{
//public 对子类可见, private在该类可见
String breed;//实例变量
int age;
String color;
static int all=0;//类变量
//方法
void barking(){}
void hungry(){}
void sleeping(){}
public void setage(int dogage){
age = dogage;
}
public int getage(){
System.out.println("age is "+age);
}
//构造方法
public Dog(){}
public Dog(String name){
System.out.println("Dog's name is "+ name);
}
//main
public static void main(String []args){
//创建对象
Dog mydog = new Dog("tommy");
mydog.setage(2);
mydog.getage();
}
}
创建对象
声明对象名称、类型
实例化:用new创建一个对象
初始化:new 创建时调用构造方法初始化
Dog mydog = new Dog("tommy")
访问实例变量和方法
变量类型
type identifier [ = value][, identifier [= value] ...] ;
- 类变量:独立于方法之外的变量,用static修饰,静态变量
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
- 静态变量在程序开始时创建,在程序结束时销毁。
- 静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。
- 静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
- 实例变量:独立于方法之外的变量,没有static修饰
- 实例变量属于该类的对象,必须产生该类对象,才能调用实例变量。
- 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量
- 局部变量:类方法中变量
Java 修饰符
访问控制修饰符
- 默认的,default,在同一包内可见,不使用任何修饰符。
- 私有的, private ,在同一类内可见。
- 共有的, public ,对所有类可见。
- 受保护的, protected ,对同一包内的类和所有子类可见。protected 访问修饰符不能修饰类和接口
非访问控制修饰符
- static
- final
- 能被显式地初始化并且只能初始化一次。
- 被声明为 final 的对象的引用不能指向不同的对象。
- 值可以改变
- abstract
- 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
- 如果一个类包含抽象方法,那么该类一定要声明为抽象类。
- 抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。
- 任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
public abstract class SuperClass{
abstract viod m();//abstract function
}
class SubCass extends SuperClass{
void m(){
....
}
}
- synchronized 同一时间只能被一个线程访问
- transient 序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
- volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
结构
循环
while
for
do…while
do{ ... }while(布尔表达式) //即使不满足条件也至少执行一次
用于数组的 增强for
String [] names ={"James", "Larry", "Tom", "Lacy"};
for( String name : names ) { //声明语句:表达式
System.out.print( name );
System.out.print(",");
}
- break
- continue
Java 流(stream),File, IO
控制台输入
Java 的控制台输入由 System.in 完成。
创建 BufferedReader:BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Java 接口
- 接口可以被实现,无法被实例化
- 一个接口可以有多个方法。
- 接口文件保存在 .java 结尾的文件中,文件名使用接口名。
- 接口的字节码文件保存在 .class 结尾的文件中。
- 接口相应的字节码文件必须在与包名称相匹配的目录结构中。
- 接口中所有的方法必须是抽象方法。
- 接口不是被类继承了,而是要被类实现。
声明
[可见度] interface 接口名称 [extends 其他的类名] {
// 声明变量
// 抽象方法
}
//隐式抽象,方法公有
import java.lang.*;
//引入包
/* 文件名 : NameOfInterface.java */
public interface NameOfInterface
{
//任何类型 final, static 字段
//抽象方法
}
Java package
Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等
package pkg1[.pkg2[.pkg3…]];
一个包(package)可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能。
以下是一些 Java 中的包:
- java.lang-打包基础的类
java.io-包含输入输出功能的函数
import
import package1[.package2…].(classname|*);
自定义Java标注
- @Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
- @Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
- @SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.