类与对象的基本定义
/*
class 类名称{
数据类型 属性;
方法;
}
类名称 对象名称 = new 类名称();
*/
class book{
String title;//书名
double price;//书的价格
public void getinfo(){ //方法
System.out.print("book name:" + title + "price:" + price);
}
}
public class Text{
public static void main(String args[]){
book b1 = new book();
b1.title = "java";
b1.price = 86.4;
b1.getinfo();
}
}
内存空间概念
- 堆内存:保存每一个对象的属性内容,堆内存需要使用关键字new才可以开辟,如果一个对象没有对应的堆内存指向,将无法使用,称之为垃圾,保存的是对象正真数据。
- 栈内存:保存的是一块堆内存地址数值,每一块栈内存只能保留一块堆内存地址。
使用private关键字封装属性
使用了private关键修饰属性后,只能在book类中被访问,而其他类不能直接访问。
定义原则:类中所有属性都要使用private声明,如果属性需要被外部所使用,那么定义相应的setter、getter方法。
class book{
private String title;
private double price;
public void getinfo(){
System.out.print("book name:" + title + "price:" + price);
}
}
public class Text{
public static void main(String args[]){
book b1 = new book();
b1.title = "java"; //无法从外部进行赋值
b1.price = 86.4;
b1.getinfo();
/*
The field book.title is not visible
The field book.price is not visible
*/
}
}
使用setter和getter
class book{
private String title;
private double price;
public void setTitle(String t){
title = t;
}
public String getTitle(){
return title;
}
public void setPrice(double d){
price = d;
}
public Double getPrice(){
return price;
}
public void getinfo(){
System.out.print("book name:" + title + "\n price:" + price);
}
}
public class Text{
public static void main(String args[]){
book b1 = new book();
b1.setTitle("JAVA");
b1.setPrice(86.4);
b1.getinfo();
}
}
在实际开发中,属性使用private封装后,必须定义相应的setter、getter方法,不管是否需要使用。
构造方法
可通过构造方法为对象实例化时进行一些初始化准备工作,构造方法本身是一种特殊的方法,它只在新对象实例化时调用
定义原则:方法名称和类名称相同,没有返回值类型声明,当然,构造方法也可以重载。
class book{
public book(){
System.out.print("对象实例化时我才被调用");
}
}
public class Text{
public static void main(String args[]){
book b1 = new book(); //输出 对象实例化时我才被调用
}
}
构造方法与普通方法的区别:构造方法没有定义返回值类型,而普通方法必须定义返回值类型,如果没有返回,也必须用void使用。
使用构造方法初始化属性值
class book{
private String title;
private Double price;
public book(String s,Double d){
title = s;
price = d;
}
public String getInfo(){
return "title:" + title + "\n price:" + price;
}
}
public class Text{
public static void main(String args[]){
book b1 = new book("JAVA",86.5);
System.out.print(b1.getInfo());
}
}
构造方法重载
class book{
private String title;
private Double price;
public book(){
return "无参构造方法,即默认构造方法";
}
public book(String s,Double d){
title = s;
price = d;
}
public String getInfo(){
return "title:" + title + "\n price:" + price;
}
}
public class Text{
public static void main(String args[]){
book b1 = new book("JAVA",86.5);
System.out.print(b1.getInfo());
}
}
匿名对象
没有栈内存指向堆内存的对象就是匿名对象
class book{
private String title;
private Double price;
public book(String s,Double d){
title = s;
price = d;
}
public void getInfo(){
System.out.print("title:" + title + "\n price:" + price);
}
}
public class Text{
public static void main(String args[]){
new book("JAVA",86.5).getInfo(); //匿名对象
}
}
简单Java类
简单Java类是一种在实际开发中使用最多的类定义形式,有如下要求:
- 类名称必须有意义
- 类中所有属性必须private封装,封装后的属性必须提供setter、getter
- 类中可以提供任意多个构造方法,但是必须保留一个无参即默认构造方法
- 类中不允许出现任何输出语句,所有信息输出必须交给被调用处嗲用
- 类中需要提供一个取得对象完整信息的方法,如getInfo()方法,且返回类似为String
class Book{
private String title;
private Double price;
public void setTitle(String s){
title = s;
}
public String getTitle(){
return title;
}
public void setPrice(Double d){
price = d;
}
public Double getPrice(){
return price;
}
public Book(){}
public Book(String s,Double b){
title = s;
price = b;
}
public String getInfo(){
return "title:" + title + "\n price:" + price;
}
}
public class Text{
public static void main(String args[]){
Book b1 = new Book();
b1.setTitle("JAVA");
b1.setPrice(86.3);
System.out.println(b1.getInfo());
Book b2 = new Book("python",56.1);
System.out.println(b2.getInfo());
}
}