java基础
- Java程序都是由类所组成的。
- 基本程序示例:
//公有的类:Hello 整个程序都可以访问
//注意文件名此时必须为Hello.java,因此一个文件只能有一个public类
public class Hello
{
static int a = 1;//定义一个成员变量,类内可以使用
//main()是程序的起点,一个java文件只能有一个
public static void main(String[] args)
{
int num = 3;
System.out.println("我有"+num+"本书!");
}
}
- 基础知识和C语言相差无几,需要注意的是数据类型、数组(含有API)。
类
1. 类的基本使用
class Person
{
String name;
int age;
void talk()
{
System.out.println("我是:"+name+,"今年:"+age+"岁");
}
}
public class TestPerson
{
public static void main(String[] args)
{
Person p = new Person();
p.name = "张三";
p.age = 25;
p.talk();
}
}
2. 类的属性组使用
public class Test
{
static String a="string:a";
static String b;
String c="string:c";
String d;
static //静态代码块,生成实例时最先执行,其次才是构造方法
{
printStatic("before static");
b="string:b";
printStatic("after static");
}
public static void printStatic(String title)
{
System.out.println("-----"+title+"-----");
System.out.println("a = \""+a+"\"");
System.out.println("b = \""+b+"\"");
}
public Test()
{
print("before constructor");
d="string:d";
print("after constructor");
}
public void print(String title)
{
System.out.println("-----"+title+"-----");
System.out.println("a = \""+a+"\"");
System.out.println("b = \""+b+"\"");
System.out.println("c = \""+c+"\"");
System.out.println("d = \""+d+"\"");
}
public static void main(String[] args)
{
new Test();
}
}
输出结果:
3.方法的定义
3.1 方法的基本使用
public void times(int i,int j)
{
System.out.println(i*j);
}
3.2 构造方法的使用
class Person
{
//public:在程序的任何地方被调用,private:只能在类内调用
//和类的名称相同,没有返回值,生成实例对象时自动调用
public Person()
{
System.out.println("public Person()");
}
}
注意:无构造方法也可以正常运行,但:明确声明了构造方法后,默认的构造方法就不会自动生成。
3.3 构造方法的重载
class Person
{
private String name;
private int age;
public Person(String n,int a)
{
name = n;
age = a;
System.out.println("public Person(String n,int a)");
}
public String talk()
{
return "我是:"+name+",今年:"+age+"岁";
}
}
public class TestConstruct
{
public static void main(String[] args)
{
Person p = new Person("张三",25);
System.out.println(p.talk());
}
}
4.类的继承
- 格式:class 子类 extends 父类
- Java中只允许单继承,但允许多层继承。
- super(“张三”,25);用于调用父类中的构造方法,且只能放在子类构造函数的第一行。
- super.父类中的属性
- super.父类中的方法();
5.类的多态
- 继承了父类,可以覆写父类的方法。
- 仍需注意子类与父类的转换问题。
6.抽象类
- 格式:abstract class Person{} 注:C++中为virtual关键词
- 示例:
abstract class Person
{
String name;
int age;
String occupation;
//声明一抽象方法talk()
public abstract String talk();
}
- 抽象类也可以有构造方法,但在子类的构造方法中必须调用。(使用super())
7.接口
- 它的结构和抽象类非常相似,但有不同:
- 接口里的数据成员必须初始化,且均为常量。
- 接口里的方法都为abstract,全是抽象方法,但abstract 可以省略。(抽象类中可以保有一般的方法)
- 接口示例:
interface Person
{
String name = "张三";
int age = 25;
String occupation = "学生";
public abstract String talk();
}
class Student implements Person //接口的实现
{
public String talk()
{
return "姓名:"+this.name+",年龄:"+this.age+",职业:"+this.occupation;
}
}
- 注意:接口是Java实现多继承的一种机制;一个类可以实现多个接口;一个接口可以继承多个接口。
- 接口的继承使用
interface A
{
int i=10;
public void sayI();
}
interface E
{
int i=40;
public void sayE();
}
interface B extends A,E //B接口继承了A、E两个接口
{
int j=20;
public void sayJ();
}
class C implements B //C类继承B接口,也就是要实现A、B、E三个接口的抽象方法
{
public void sayI(){}
public void sayE(){}
public void sayJ(){}
}
8.关于类的一些
- Object类是所有类的父类,Object类中的方法都适用于所有类。
- 对象的比较:(equals()方法通常需要覆写)
- “==”比较内存地址。
- equals()比较对象内容。
- 对象属性的定义
- 静态内部类可以定义非静态和静态方法、非静态和静态属性、非静态和静态内部类。
- 非静态内部类不可以定义静态方法、静态属性、静态内部类。
- 类内部(成为外部类)再定义另一个类,称为内部类。但外部类无法找到内部类中所声明的属性,而内部类可访问外部类的属性。
- 类的外部访问内部类:
public static void main(String[] args)
{
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner(); //创建内部类的实例
inner.display();
}
- 内部类不仅可以在类中定义,也可以在方法中定义。在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用fanal定义的局部变量相当于常量,生命周期超出方法运行的生命周期。
- static可以修饰内部类,用static修饰的内部类变成了外部类,但不能访问非static的外部类属性。
- 类变量和成员变量的区别:类变量就是static修饰的变量,被类的实例所共享;成员变量是实例私有的。
- static类型的属性,可以在非static和static类型的方法使用,但不能用static类型的方法调用非static类型的属性。
- 匿名内部类,直接在外部类的方法形参处传一个不知名的类进去?
- final关键字:
- final标记的类不能被继承
- final标记的方法不能被子类覆写
- final标记的变量(成员变量或局部变量)即为常量,只能赋值一次。
- instanceof关键字:用于判断一个类是否实现了某个接口,也可以用于判断一个实例对象是否属于一个类。格式:[返回布尔类型] 对象 instanceof 类(或接口)