一个Java程序是一系列对象的集合,这些对象通过调用彼此的方法来协同工作。
*对象:对象就是类的实例,有状态和行为。
*类:类是一个模板,它描述一类对象的行为(方法)和状态(属性)。
*方法:方法就是行为。
*实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
1.Java运行原理
2.变量的声明
声明语法: 数据类型 变量名;
赋值:变量名=值;
1 int a;//声明变量 2 a=123;//变量赋值
3.标识符
(1)标识符是用于类名、变量名、方法名、对象名、数组名等的命名;
(2)可以使用英文、数字、下划线_、$符号;
(3)不能以数字开头;
(4)不能使用Java关键字或保留字(指在高级语言中已经定义过的字);
(5)区分大小写;
4.注意事项
(1)当声明的类使用public关键字修饰时,源文件名必须跟该类名保持一致;
(2)一个.java源文件中可以声明多个类,但是只能有一个用public修饰的类;
(3)内中声明的类,称为内部类;
5.注释
(1)单行注释: //一行注释
(2)多行注释: /*
*多行注释
*/
(3)文档注释:(这个很重要,养成习惯写)
/**
*@author
*/
6.运算符
*1.算数运算符
*2.关系原算符(条件运算)
*3.赋值运算
*4.逻辑运算符
&&当且仅当两个操作数为真,条件为真
||任意一个为真,条件为真
!非运算
*5.位运算
*6.条件运算符
7.Java修饰符
(子类继承父类的public、protected方法,不继承父类的private方法,其继承过来的方法的访问修饰符不能小于父类的访问修饰符)
Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:
*访问控制修饰符:default,public,protected,private
类(接口): public 默认(default)
变量/方法/对象: private protected public
**私有的访问修饰符-private:
被声明为private的方法、变量、和构造函数只能被所属类访问。
声明为private的变量只能通过类中的公共的方法getter()方法被外部类访问。
private主要用来隐藏类的实现细节和保护类的数据。
class A{ private int a; private A(){ } public void setA(int a){ this.a=a; } public int getA(){ return this.a; } private void ha(){ } //私有的只能在类中使用,变量可以通过get set来访问 }
**公有访问修饰符-public:
被声明为public的类,方法,构造方法和接口能够被任何其他类访问。
1 public class A{ 2 public int a; 3 4 public A(){ 5 } 6 7 public void ha(){ 8 } 9 } 10 11 public interface A{ 12 13 }
**受保护的访问修饰符-protected:
1.子类于基类在同一包中:被声明为protected的变量、方法和构造器能被同一个包中任何
其他类访问;
2.子类与基类不在同一个包中:那么在子类中,子类实例可以访问其从基类继承而来的
protected方法,而不能访问基类实例的protected方法。
*非访问控制修饰符:final,abstract,static,synchronized,volatile
static:修饰类方法和类变量。
*静态变量:static用来声明类变量,无论类实例了多少对象,它的静态变量只有一份拷贝。局部变量不能被声明为static变量。
*静态方法:static用来声明类方法,静态方法不能使用类的非静态变量。
final:修饰类、方法、变量,final修饰的类不能被继承,修饰的方法不能被继承类重定义,修饰的变量为常量,是不可修改的。
*final变量:变量一旦赋值,就不能重新赋值。eg:final int VALUE=10;
final和static一起来创建类常量:public static final int VALUE2=66;
*final方法:类中的final方法可以被子类继承,但是不能被子类修改。
声明final方法的主要目的防止该方法的内容被修改。
*final类:final类不能被继承。
abstract:用来创建抽象类和抽象方法。
*抽象类:抽象类不能实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类不能同时被abstract和final修饰。一个类包含抽象方法,该类一定是抽象类。
*抽象方法:抽象方法是一种没有任何实现的方法,该方法的具体实现由子类提供。抽象
方法不能声明成final和static。子类必须实现父类的所有抽象方法,除非子类也是抽象方法
synchronized和volatile:用于线程。
synchronized声明的方法同一时间只能被一个线程访问。
transient:序列化的对象包含被transient修饰的实例变量时,Java虚拟机跳过该特定的变量。
volatile:volatile修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员
变量的值。而且,当成员变量发生改变时,会强制线程将变化值回写到共享内存。
这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
Java数组
数组是存储在堆上的对象,可以保存多个同类型变量。
int[] arr1={1,2,3,4,5};
int[] arr2=new int[10];
int[] arr3=new int[]{1,2,3,4,5};
Java枚举
Java5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的bug。
例如,我们写一个果汁类,它限制了果汁的大杯、中杯、小杯。这就意味着它不允许顾客点除了这三种以外尺寸的果汁。
实例:
1 class FreshJuice { 2 enum FreshJuiceSize{ SMALL, MEDIUM , LARGE } 3 FreshJuiceSize size; 4 } 5 6 public class FreshJuiceTest { 7 public static void main(String []args){ 8 FreshJuice juice = new FreshJuice(); 9 juice.size = FreshJuice.FreshJuiceSize.MEDIUM ; 10 } 11 }
Java关键字--不能用于标识符的名称
可以分类
继承
在Java中,一个类可以由其他类派生。
利用继承的方法,可以重用已有类的方法和属性,不用重写代码。
接口
在Java中,接口可以理解为对象间相互通信的协议。接口在继承中扮演很重要的角色。
接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。