class好比是人类,instance好比是指定的某个人
person类型,类似于C语言中的结构体
class
可以包含多个field
(field即为领域,private私有域,protected保护域,public公共域,publicstatic公共静态域)field
容易造成逻辑混乱,我们可以用private
修饰field
,拒绝外部访问,但是可以、使用方法(method)来让外部代码可以间接修改field:public方法
public class Main {
public static void main(String[] args) {
Person ming = new Person();
ming.setName("Xiao Ming"); // 设置name
ming.setAge(12); // 设置age
System.out.println(ming.getName() + ", " + ming.getAge());
}
}
class Person {
private String name;
private int age;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
if (age < 0 || age > 100) {
throw new IllegalArgumentException("invalid age value");
}
this.age = age;
}
}
setName()
和setAge()
来间接修改private
字段,方法返回值通过return
语句实现,如果没有返回值,返回类型设置为void
,可以省略return
。private方法
public class Main {
public static void main(String[] args) {
Person ming = new Person();
ming.setBirth(2008);
System.out.println(ming.getAge());
}
}
class Person {
private String name;
private int birth;
public void setBirth(int birth) {
this.birth = birth;
}
public int getAge() {
return calcAge(2019); // 调用private方法
}
// private方法:
private int calcAge(int currentYear) {
return currentYear - this.birth;
}
}
calcAge()
是一个private
方法,外部代码无法调用,但是,内部方法getAge()
可以调用它Person
类只定义了birth
字段,没有定义age
字段,获取age
时,通过方法getAge()
返回的是一个实时计算的值,并非存储在某个字段的值this
,它始终指向当前实例,通过this.field
就可以访问当前实例的字段,如果没有命名冲突,可以省略this
class Person {
...
public void setNameAndAge(String name, int age) {
...
}
}
setNameAndAge()
方法时,必须有两个参数,且第一个参数必须为String
,第二个参数必须为int
类型...
定义,可变参数相当于数组类型class Group {
private String[] names;
public void setNames(String... names) {
this.names = names;
}
}
String[]
类型(需要自己先构造)class Group {
private String[] names;
public void setNames(String[] names) {
this.names = names;
}
}
class Person {
public Person() {
}
}
null
,数值类型的字段用默认值,int
类型默认值是0
,布尔类型默认值是false
:在Java中,创建对象实例的时候,按照如下顺序进行初始化
class Person {
private String name = "Unamed";
private int age = 10;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
int age = 10;
表示字段初始化为10
,double salary;
表示字段默认初始化为0
,String name;
表示引用类型字段默认初始化为null
;class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(String name) {
this.name = name;
this.age = 12;
}
public Person() {
}
}
new Person("Xiao Ming", 20);
,会自动匹配到构造方法public Person(String, int)
。new Person("Xiao Ming");
,会自动匹配到构造方法public Person(String)
。new Person();
,会自动匹配到构造方法public Person()
。class Hello {
public void hello() {
System.out.println("Hello, world!");
}
public void hello(String name) {
System.out.println("Hello, " + name + "!");
}
public void hello(String name, int age) {
if (age < 18) {
System.out.println("Hi, " + name + "!");
} else {
System.out.println("Hello, " + name + "!");
}
}
}
Overload
原文:https://www.cnblogs.com/b1356436060/p/13377573.html