Java SE
Java 的特点 (一)简单易学
1、java的风格类似于C++
2、java摒弃了C/C++中容易引发程序错误并难以掌握的一些特性,如指针、结构、以及内存管理等
3、Java提供了丰富的类库,可以帮助我们很方便的开发java程序 4、Java是完全面向对象的语言 (二)安全性高
1、java是一种强类型的语言,其类型检查比C/C++还要严格。类型检查帮助我们检查出许多开发早期出现的错误
2、Java提供了垃圾回收机制,有效的避免了C/C++中最头疼的内存泄漏问题 3、Java禁止非法内存访问,在没有授权的情况下是不能访问内存的。所有这些措施,使java程序员不用担心内存的崩溃
总结:java去掉C和C++中影响程序健壮性的部分,使程序更安全,例如指针、内存申请和释放
(三)跨平台
Java作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有java运行系统的机器都能执行这种中间代码。Java源程序被编译成一种与机器无关的字节码格式,在java虚拟机上运行
Java源代码和字节码是与机器无关的,但JVM是与机器有关的。装有不同操作系统的机器上,需要有专门为该操作系统开发的JVM,JVM是与机器有关的 (四)多线程的
Java语言的一个重要特性就是在语言级支持多线程的程序设计。使得一个程序能够同时执行多个任务
运行时注意的问题 javac Test.java java A
不能写java Test,编译时必须写文件名,运行时写的是文件中的类名
Java语言的基本元素——标识符
标识符:程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier),包括:类名、变量名、常量名、方法名、...
Java语言中,标识符是以字母、下划线、美元符($)开始的一个字符序列,后面可以跟字母、下划线、美元符、数字。
什么是类
把一类事物的静态属性和动态可以执行的操作组合在一起所得的这个概念就是类 什么是对象 类的一个个体
(如果将对象比作汽车,那么类就是汽车的设计图纸) 类的定义
class Person {
int age; void shout() {
System.out.println(“oh,my god!I am”+age); } }
age是类的属性,也叫类数据成员,也叫字段,也叫域 shout是方法,也叫类的成员函数
shout方法可以直接访问同一个类中的age变量
class A {
int i; int j; }
class TestMemo {
public static void main(String[] args) {
A aa = new A();//(A *) malloc (sizaof(A));
//new A();在堆中动态分配一块区域,被当做了A对象 //aa本身的内存是在栈中分配的 //堆中内存的地址付给了aa
//aa指向堆中的内存,aa代表了堆中的内存 //aa.i 代表:aa这个静态指针变量所指向的动态内存中的A对象的 i这个成员变量 //aa.j 代表:aa这个静态指针变量所指向的动态内存中的A对象的 j这个成员变量
aa.i = 10; aa.j = 20; } }
类的访问控制符
类的访问控制符有四种 :public protect 默认【即不加任何修饰符】 private
在一个类的内部,所有的成员可以相互访问,访问控制符是透明的;访问控制符是针对外部访问而言的
在一个类的外部:通过(类对象名 . 私有成员名)的方式是无法访问该对象中的私有成员的,这样写编译时会出错
外部访问包括两种方式:通过类名访问类内部的成员、通过类对象名访问类内部成员
函数的重载:
同名的函数通过不同的形参做类似的事情,这就叫函数的重载 函数重载的要求: 函数的形参个数 函数的形参顺序 函数的形参数据类型
这三个至少有一个是不一样的
如果两个函数只是函数的返回值不一样,其他都一样,这构不成函数的重载,并且编译时会报错
Static
A类的多个对象公用一个static属性
static属性i是属于类本身,或者讲:没有对象,我们仍然可以直接通过类名的方式访问该类内部的static属性
static属性和方法虽然属于类本身,虽然可以通过类名的方式访问,但是static属性和方法很明显也属于类对象,当然也可以通过类对象名的方式访问
只有非private的static成员才可以通过类名的方式访问,static只是表明了该成员具有了可以通过类名访问的潜在特征。但是否可以通过类名访问,还必须满足一个条件:该成员必须是非private
静态方法不能访问非静态成员,非静态方法可以访问静态成员
class A {
private int i;
Private static int cnt = 0;
Public A() {
++cnt; }
Public A(int i) {
This.i=i; ++cnt; }
Public static int getCnt() {
Return cnt; } }
Public class TestStatic_1
{
Public static void main(String[] args) {
System.out.printf(“当前时刻A对象的个数是:”,A.getCnt); A aa1 = new A();
System.out.printf(“当前时刻A对象的个数是:”,A.getCnt); A aa2 = new A();
System.out.printf(“当前时刻A对象的个数是:”,A.getCnt);
} }
一个类的属性可以是个类对象 Class A {
Public int i = 20;
Private static A aa = new A();
Private A() { }
Public static A getA() //static一定不能省略 {
Return aa; } }
Public class TestStatic_2 {
Public static void main(String[] args) {
A aa1 = A.getA(); A aa2 = A.getA(); aa.1=99;
System.out.printf(“%d\\n”,aa2.i); } } 继承
什么叫继承:一个新类从已有的类那里获得其已有的属性和方法,这种现象叫类的继承 这个新类被称为子类,也叫派生类。已有的那个类叫做父类,也叫做基类
继承的好处:代码得到极大的重用;形成一种类的层次体系结构;为多态创造条件 继承的实现方式:
class SubClass extends SuperClass
{ }
同包继承权限问题
1、子类内部可以访问父类非私有的成员,私有成员无法被子类方法访问 2、通过子类对象名只能访问从父类继承过来的非私有成员
总结:私有不能被继承(私有物理上已经被继承过来,只不过逻辑上程序员不能去访问它,因此继承必须慎重,否则会浪费内存) 继承的原则
何时选择继承?一个很好的经验:“B是一个A吗?”如果是则让B做A的子类 Java只支持单继承,不允许多重继承 单继承就是一个类只能有一个父类 多继承就是一个类可以有多个父类
可以有多层继承,即一个类可以继承某一个类的子类,如类B继承了类A,类C又可以继承类B,那么类C也间接继承了类A
子类可以继承父类所有的成员变量和成员方法,但子类永远无法继承父类的构造方法。在子类的构造方法中可使用语句super(参数列表)调用父类的构造方法
子类访问父类成员的三种方式:在子类内部访问父类成员;通过子类对象名访问父类成员;通过子类的类名访问父类成员。经验证,子类通过上述三种方式的任何一种都无法访问父类私有成员,因此,我们可以得出结果:私有成员无法被子类继承
Super
1、每个子类构造方法的第一条语句,都是隐含地调用super( ),如果父类没有这种构造函数,那么编译的时候就会报错
2、如果显示的写出super( )语句,则必须保证该语句是第一条语句,否则会出错
3、Super()如果不写,则编译器会自动添加,所以此时如果父类没有无参的构造函数就会出错
4、既可以显示写super( ),前提是父类必须有无参的构造函数 也可以显示写super(实参),前提是父类必须有带参的构造函数
5、调用父类的构造函数的语句必须借助于super,不能直接写父类的类名 6、一个构造函数中不能写多个super(实数列表)语句 方法重写
什么叫方法重写:指在子类中重新定义父类中已有的方法
重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型
子类中不允许出现与父类同名同参但不同返回类型的方法,如果出现了,编译时会出错 重写方法时,不能使用比父类中被覆盖的方法更严格的访问权限
Class Human {
Private String name; Private int age;
Public Human() {