类的定义
在Java中,定义在类中的变量被称为成员变量,定义在方法中的变量被称为局部变量。如果在一个方法中定义的局部变量与成员变量同名,这种情况是允许的,此时方法中通过变量访问到的是局部变量,而非成员变量。
类的封装
用private修饰的数学只能在类中被放娃娃,无法在方法中被访问,如果外界想要访问,需要提供public的公有方法,其中包括get()和set()方法。
构造方法
如果想要在实例化对象的同事就为这个对象的属性进行赋值,可以调用构造方法。
注意:在方法中不能使用return语句返回一个值,但是可以单独写return语句来作为方法的结束。
在java中每个类至少有一个构造方法,如果没有定义的化,系统会自动为这个类创建一个默认的构造方法。
class Person{
}
与
class Person{
public Person(){
}
}
效果是完全一样的
一旦为该类定义了构造方法,系统就不再提供默认的构造方法。
class Person{
int age;
public Person(int x){
age=x;
}
}
该构造方法有一个参数,这时系统就不再提供默认的构造方法。
在调用new
Person()创建Person类的的实例对象时,需要调用无参的构造方法,而Person类中只定义了一个有参的构造方法,系统会提示错误,所以在一个类中如果定义了一个有参的构造方法,最好再定义一个无参的构造方法。
this关键字
java中提供了关键字this来指代当前对象,用于在方法中访问对象的其他成员。
通过this关键字可以明确地访问一个类的成员变量(定义在里类中的变量),解决与局部变量的冲突
class Person(){
int age;
public Person(int age){
this.age=age;
}
public int getAge(){
return this.age();
}
}
在构造方法中如果使用的是“age”访问的是局部变量,但是如果是"this.age"则是访问成员变量。
调用成员方法时可以省略this关键字。
构造方法可以使用“this([参数 1,参数2…])”的形式来调用其他的构造方法。
public class Controller {
public Controller() {
System.out.println("无参的构造方法被调用了");
}
public Controller(String name) {
this();
System.out.println("有参的构造方法别调用了");
}
public static void main(String[] args) {
Controller c = new Controller("ji");
}
}
在使用this调用类的构造方法时,应注意以下几点:
-
只能在构造方法中使用this调用气的构造方法,不能再成员方法中使用。
-
在构造方法中,使用this调用构造方法的语句必须位于第一位,且只能出现一次。
构造方法也可以重载
static 关键字
··开发人员会希望某些特定的数据在内存中只用一份,而且能够被一个类的所有实例对象所共享。
- 静态变量被所有实例共享。
- 设为static,可以在其他类中被使用。
- static只能修饰成员变量,不能修饰局部变量,否则会编译报错。
静态方法:开发人员有时候希望在不创建对象的情况下就可以调用某个方法。
例如:
public class Person {
static int v=20;//static 只能用于修饰成员变量
int f=10;
public static void person() {
System.out.println("年龄是:"+v);//可以直接访问成员变量
//static int b=10;//static 不能用于修饰局部变量
Person p =new Person();//需要创建一个对象来访问成员变量
System.out.println("年龄是:"+p.f);
}
public static void main(String[] args) {
person();
Person p =new Person();
p.person();
}
}//Output:
年龄是:20
年龄是:10
年龄是:20
年龄是:10
在一个静态方法中,只能访问用static修饰的成员啊,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在别调用时可以不创建任何对象。
静态代码块
当类被加载时,静态代码块也会指向,由于类只加载一次,因此静态代码块只执行一次。
static{
System.out.println("测试类的静态代码块执行了");
}
public static void main(String [] args){
Person p1 = new Person();
Person p2 = new Person();
}
class Person{
static{
System.out.println("Person类中的静态代码 块执行了");
}
}
成员内部类
在java中允许一个类的内部定义类,这样的类称作内部类,这个类所在的类称作外部类,根据内部类的位置、修饰符和定义的方式可以分为成员内部类、静态内部类、方法内部类。
class Outer {
private int num=4;//定义类成员变量
//定义一个成员方法,方法中访问内部类
public void test() {
Inner inner = new Inner();
inner.show();
}
//定义了一个成员内部类
public class Inner{
void show() {
//在成员内部类的方法中访问外部类的成员变量
System.out.println("num="+num);
}
}
}
public class Example {
public static void main(String[] args) {
Outer outer = new Outer();
outer.test();
}
}//OutPut:
num=4
内部类可以在外部类中使用,并能访问外部类的成员