类
面向对象实现对客观实体的直接映射,抽象出同一类实体共有的行为特征就是类。而类体主要包含两大部分:成员变量和成员方法。
类也可以嵌套,嵌套在另一个类定义中的类是内部类,而含有内部类的类是外部类
成员变量
类的成员变量就是类的属性,它描述了类的特征
而成员变量有两种形式:类变量和实例变量
前者是静态的(static),后者是非静态的
成员属性
出现在类体中,方法之外的就是成员属性
而成员属性和成员变量的区别是什么呢
类的成员变量:定义在方法外可以被类方法访问的是成员变量。按照java的编码规范,成员变量一般被定义成private权限。
类的属性:类的成员变量中,外界可以通过set方法和get方法对成员变量进行操作,那么这个成员变量就是类的属性。
不同对象的属性类型是一样的 ,只是属性的值不一样,所以我们说类是模板而对象是实例
要有具体的对象才能有具体的值,给成员属性赋值时,应该发生在对象生成以后
引用所保存的的是对象的首地址 ,如果没有生成对象 ,则保存的是null
会造成空指针异常
若类中有未赋值的成员属性,系统默认给赋初值
int – 0 string – null 只要是引用数据类型都为null
听课自己照着模板敲代码
public class Name
{
public static void main(String[] args)
{
Person p = new Person();
p.name = "tx";
p.age = 19;
System.out.println(p.name);
System.out.println(p.age);
}
}
然后调试发现
D:\ediplus>javac Name.java
Name.java:5: 错误: 找不到符号
Person p = new Person();
^
符号: 类 Person
位置: 类 Name
Name.java:5: 错误: 找不到符号
Person p = new Person();
^
符号: 类 Person
位置: 类 Name
2 个错误
光顾着抄,没发现new的对象都不是根据类来的,因此会报错
然后自己改了代码
public class Person
{
public static void main(String[] args)
{
Person p = new Person();
p.name = "tx";
p.age = 19;
System.out.println(p.name);
System.out.println(p.age);
}
}
但仍然报错
D:\ediplus>javac Person.java
Person.java:6: 错误: 找不到符号
p.name = "tx";
^
符号: 变量 name
位置: 类型为Person的变量 p
Person.java:7: 错误: 找不到符号
p.age = 19;
^
符号: 变量 age
位置: 类型为Person的变量 p
Person.java:8: 错误: 找不到符号
System.out.println(p.name);
^
符号: 变量 name
位置: 类型为Person的变量 p
Person.java:9: 错误: 找不到符号
System.out.println(p.age);
^
符号: 变量 age
位置: 类型为Person的变量 p
4 个错误
最后
public class Person
{
String name;
int age;
public static void main(String[] args)
{
Person p = new Person();
p.name = "tx";
p.age = 19;
System.out.println(p.name);
System.out.println(p.age);
}
}
才通过
直接访问成员属性是很危险的行为,这样别人很很轻易地改变成员属性的值
成员属性是要有private修饰的,这样才不会被通过对象来直接访问类中直接定义的方法都叫做成员方法。类中的方法是行为,它是对象的具体的行为方式,这些东西要能够让对象去操作。方法一般为public的,是对外公开的。我们往往通过公开给外界的方法去访问和操作对象私有的成员属性。这也叫作接口,对外提供接口,用以操作和访问对象的成员属性
如何操作成员属性
对于私有的成员属性,我们有两个操作。数据是不是就只有两个操作:
1. 设置值 set() set的时候,一般情况下不用返回值
2. 获取值 get() get的时候,要根据所要获得的数据类型来确定返回值类型,一定要对应
自己有尝试这么用
public class Person
{
private int id;
private String name;
public static void setId(int pid)
{
id = pid;
}
public int getId(){
return id;
}
public static setname(String pName)
{
name=pName;
}
public String getName()
{
return name;
}
}
class Test
{
public static void main(String[] args)
{
Person p = new Person();
p.setId(20);
int pId = p.getId();
System.out.println(pId);
p.setName("某欣");
String pName = p.getName();
System.out.println(pName);
}
}
报错
^
符号: 方法 setName(String)
位置: 类型为Person的变量 p
Test.java:10: 错误: 找不到符号
String pName = p.getNAme();
^
符号: 方法 getNAme()
位置: 类型为Person的变量 p
.\Person.java:6: 错误: 找不到符号
p.name = "tx";
^
符号: 变量 name
位置: 类型为Person的变量 p
.\Person.java:7: 错误: 找不到符号
p.age = 19;
^
符号: 变量 age
位置: 类型为Person的变量 p
.\Person.java:8: 错误: 找不到符号
System.out.println(p.name);
^
符号: 变量 name
位置: 类型为Person的变量 p
.\Person.java:9: 错误: 找不到符号
System.out.println(p.age);
^
符号: 变量 age
位置: 类型为Person的变量 p
8 个错误
public class Person
{
private int id;
private String name;
public void setId(int pid)
{
id = pid;
}
public int getId(){
return id;
}
public void setName(String pName)
{
name=pName;
}
public String getName()
{
return name;
}
}
class Test
{
public static void main(String[] args)
{
Person p = new Person();
p.setId(20);
int pId = p.getId();
System.out.println(pId);
p.setName("某欣");
String pName = p.getName();
System.out.println(pName);
}
}
这样就可以了,将static去掉,不然无法找到name、id