Java的核心就是面向对象编程
属性+方法=类
什么是面向对象
package com.oop;
//引用传递:对象,本质还是值传递
//对象,内存之后弄明白了这里才看得明白
public class Demo05 {
public static void main(String[] args) {
Student1 student1 = new Student1();
System.out.println(student1.name);//null
Demo05.change(student1);
System.out.println(student1.name);//fuyi
}
public static void change(Student1 student1){
//sudent1是一个对象:指向的---->Student1 student1=new Student();这是一个具体的人,可以改变属性!
student1.name="fuyi";
}
}
//定义一个Student1类,有一个属性name
class Student1{
String name;//默认值为null
}
类和对象的关系
一个项目应该只存在一个main方法
创建与初始化对象
package com.oop.demo02;
//学生类
public class Student {
//属性:字段
String name;
int age;
//方法
public void study(){
System.out.println(this.name+"在学习");
}
}
package com.oop.demo02;
//一个项目应该只存在一个main方法
public class Application {
public static void main(String[] args) {
//类:抽象的,应该实例化
//类实例化后会返回一个自己的对象!
//student对象就是Student类的实例
Student student = new Student();
Student xiaohong = new Student();
xiaohong.name="小红";
xiaohong.age=4;
student.name="小明";
student.age=5;
System.out.println(xiaohong.name);
System.out.println(student.name);
}
}
构造器详解
package com.oop.demo02;
import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;
//java--->class
public class Person {
//一个类即使什么都不写,也会存在一个方法
//显示的定义构造器
String name;
//实例化初始值
//构造器核心功能:
//1.使用new关键字,本质是在调用构造器
//2.用来初始化值
/*
//无参构造
public Person(){
this.name="fuyi";
}
//有参构造,一旦定义了有参构造,无参必须显示定义
public Person(String name){
this.name=name;
}
*/
//alt+insert Constructor+ok:默认生成有参,前面定义
//String name;如果再定义int age;快捷键里也会多一个age的选项
public Person(String name) {
this.name = name;
}
//alt+insert Constructor+select none:默认生成无参
public Person() {
}
}
/*
/new 实例化了一个对象
Person person = new Person();
System.out.println(person.name);//默认是null
}
构造器:
1.和类名相同
2.没有返回值
作用:
1.new本质在调用构造器
2.初始化对象值
注意点:
定义了有参构造之后,如果像使用无参构造,
显示的定义一个无参的构造
this. 代表这个类
*/
package com.oop.demo03;
public class Pet {
public String name;
public int age;
//无参构造
public void shout(){
System.out.println("叫了一声");
}
}
/*
public static void main(String[] args) {
Pet dog = new Pet();
dog.name="wangcai";
dog.age=3;
dog.shout();
System.out.println(dog.name);
System.out.println(dog.age);
}
*/
小节
面向对象三大特性:封装
package com.oop.demo04;
/*
1.提高程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口
4.系统可维护性增加了
*/
//类 private:私有
public class Student {
//属性私有
//名字
public String name;
//学号
private int id;
//性别
private char sex;
//提供一些可以操作这个属性的方法
//提供一些public的get set方法
//get获得这个数据
public String getName(){
return this.name;
}
//set 给这个数据设置值
public void setName(String mz){
this.name=mz;
}
//alt+insert
public int getId() {
return id;
}
public void setId(int id) {
if(id>100||id<0){
this.id=3;
}else {
this.id = id;
}
}
}
/*
public static void main(String[] args) {
Student s1 = new Student;
s1.name="";
s1.sex=""; //报错
s1.setName("fuyi");
}
public static void main(String[] args) {
Student s1 = new Student();
s1.setName(" fy");
System.out.println(s1.getName());
s1.setId(111);
System.out.println(s1.getId());
}
*/