类
类的定义
Java中,类是基本组成单位
类由属性和行为组成
利用class关键字对类进行定义
public class Phone{
//成员变量
String brand;
int price;
//成员方法
public void call(){
System.out.println("打电话");
}
}
对象的创建与使用
有了类就可以基于这个类来创建对象,创建方法和php的很像,使用new关键字
类名 对象名 = new 类名()
使用对象
对象的时候分为成员变量的访问和成员方法的调用
对象名.变量名
对象名.方法名
权限修饰符
修饰符 | 本类 | 同包的类或子类 | 其他包 |
---|---|---|---|
private | 可以 | 不可以 | 不可以 |
protected | 可以 | 可以 | 不可以 |
public | 可以 | 可以 | 可以 |
局部变量
定义:在成员方法中定义的变量叫做局部变量
局部变量在方法被执行的时候调用,在方法执行结束的时候销毁
局部变量的作用范围
局部变量的有效范围从该变量的声明开始到该变量的结束为止
在互不嵌套的作用域里面可以同时声明两个同名的变量
this关键字
和php中一样,this关键字用来代替本类对象,在类的内部来调用类内部的属性或方法
如下面的例子,添加this关键字来明确引用的是类成员还是局部变量还是方法的参数
private void setName(Sting name){
this.name = name
this还可以作为返回值,将对象返回
类的构造方法
特点:
- 没有返回值
- 构造方法的名称要与本类的名称相同
构造方法的时候可以为成员变量赋值,这样实例化一个对象的时候成员变量也会被初始化
如果类没有构造方法,编译器会自动创建一个不带参数的构造方法
public class AnyThing{
public AnyThing(){
//传入参数的时候自动调用了有参数的构造方法
this("调用有参的构造方法");
System.out.println("无参数构造方法")'
}
public AnyThing(String name){
System.out.println("有参数的构造方法")
}
}
静态变量,常量和方法
static关键字
由static修饰的变量,常量,方法被称作静态变量,常量,方法
静态变量的作用
有时候,两个类在同一个内存区域想共享一个数据,可以把这个数据设成静态的,这样本类和其他类都可以调用这个静态成员,
根据类名来访问静态成员的时候与对象无关,只与类有关
语法:
类名.静态类成员
例:
public class StaticTest{
final static double PI = 3.14;
static int id;
}
public static void method1(){
//do something
}
public void method2(){
System.out.println(StaticTest.PI);//调用静态常量
System.out.println(StaticTest.PI);//调用静态变量
StaticTest.method1();//调用静态方法
}
}
静态变量同样遵循public,protected,private 修饰符的限定
注意:
- 静态方法中不能使用this关键字
- 静态方法中不能直接调用非静态方法(可以
对象.方法
调用)
直接调用指的是:
public static Test(){
mathod();//mathod是静态方法
}
这样就会报错
类的主方法
之前一直使用的main方法,现在来解析一下
public static void main(String[],args){
//方法体
}
- 主方法是静态的,如果要直接调用主类中的其他的方法,也必须是静态(static)
- 没有返回值(void)
- 主方法的形参是数组,args[0]~args[n]分别代表程序的第一个参数到第n个参数
对象
对象的创建
前面说了,每实例化一个对象就会自动调用一次构造方法,实际上这就是创建对象的过程
语法:
Test mytest = new Test();
类名 对象名 = new 构造方法();
所以说前面的Test是类名,后面的Test()就是构造方法的方法名,与类名相同
访问对象的属性和方法
public class Visit {
int i = 10;
public void call() {
System.out.println("调用call()方法");
}
public Visit() {
} //构造方法
public static void main(String[] args) {
Visit n1 = new Visit();
Visit n2 = new Visit(); //实例化两对象
n2.i = 20;
//使用n1来调用成员方法和函数
System.out.println("n1中i的值是:"+n1.i);
n1.call();
//使用n2来调用成员方法和函数
System.out.println("n2中的i的值是:"+n2.i);
n2.call();
}
}
观察到两次i的值不一样,一次是20,一次是10,说明两个对象的产生是独立的,改变了n2的i的值,n1的i的值不会受到影响
如果不希望成员变量被任何一个对象所改变,可以使用静态变量,加上static关键字
对象的引用
引用只是存放一个对象的内存地址,不是存放一个对象
语法:
类名 对象引用名
Book book;
对象的比较
java中有两个比较对象的方式
- “==”
- equals()方法
区别:
"=="是比较地址
equals()是比较值
public class Compare {
public static void main(String[] args) {
String c1 = new String("abc"); // 创建两个String型对象引用
String c2 = new String("abc");
String c3 = c1; // 将c1对象引用赋予c3
// 使用“==”运算符比较c2与c3
System.out.println("c2==c3的运算结果为:" + (c2 == c3));
// 使用equals()方法比较c2与c3
System.out.println("c2.equals(c3)的运算结果为:" + (c2.equals(c3)));
}
}