/**
面向过程:以步骤为单位,一步一步完成某一个具体的事情
面向对象:以对象为单位,通过调度组合不同的对象来完成某一个事情
*/
public class Test1{
public static void main(String[] args){
}
}
面向对象是一种编程思想,是一种思考问题的思维方式。
在java中可以使用以下的语句定义一个类:
class 类名称{
属性名称;
返回值类型 方法名称(){}
}
对象的定义:一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:
类名称 对象名称=new 类名称();
按照以上的格式就可以产生对象了
public class Test1{
public static void main(String[] args){
//int i=0;
Horse h=null;//声明一个类的变量(除了八种基本数据类型以外,都是引用数据类型,包括数组)
//创建一个Horse类型的对象,实例对象,
h=new Horse();
//有了对象,我们就可以调用对象的属性和方法
h.name="赤兔马";
h.age=350;
h.run();//调用方法,那么方法就会被执行
h.eat();
//匿名对象:只能使用一次,用完后,该对象就会被释放
new Horse().eat();
h=null;//把对象释放
}
}
//自定一个类(类型)
class Horse{
//在类中定义属性(特征)
String name;
int age;
public void run(){
System.out.println("我是"+name+"我"+age+"岁了,我还日行千里");
public void eat(){
System.out.println("我吃仙草,还吃得多");}
}}
1.new关键字表示创建一个对象
2.new关键字表示实例化对象
3.new关键字表示申请内存空间
注意:如果使用一个没有申请内存空间的对象,会报空指针异常:
java.lang.NullPointException





字符串是引用类型的变量,不是基本数据类型变量
封装性是面向对象三大特性之一,封装的本质是隐藏细节,仅对外提供统一访问接口,一个个封装的东西又组成了另一个东西
/**
如果属性没有封装,那么在本来之外创建对象后,可以直接访问属性
*/
//没有封装之前
public class Test2{
public static void main(String[] args){
Person p1 = new Person();
p1.name='菲菲';
p1.age=18;
}
}
class Person{
//属性的封装
String name;
int age;
}
/**
封装性
private关键字:访问权限修饰符,
public 表示公有的
private表示私有的,私有的属性或方法,只能在本类中访问
公有的属性和方法,可以被类外部的其他类访问,想要在类外部访问私有属性,我们需要提供公有的方法来间接访问
通常在一个类中,属性都私有化,并对外提供getter and setter方法
*/
public class Test2{
public static void main(String[] args){
Person p1 = new Person();
//强制赋值
//p1.name='菲菲';
//p1.age=18;
//设置方法赋值
p1.setName('菲菲');
p1.setAge(18);
}
}
class Person{
//属性的封装
private String name;
private int age;
//getter and setter
//对外提供一个对name属性设值的方法
public void setName(String name){
this.name=name;
}
//对外提供一个获取name属性的方法
public void getName(String name){
return name;
}
//对外提供一个对age属性设值的方法
public void setAge(int age){
this.age=age;
}
//对外提供一个获取age属性的方法
public void getAge(int age){
return age;
}
}
成员变量属于类,局部变量在方法,记住规则好区分
public class Test2{
public static void main(String[] args){
Person p1 = new Person();
//强制赋值
//p1.name='菲菲';
//p1.age=18;
//设置方法赋值
p1.setName('菲菲');
p1.setAge(18);
p1.run(10);
}
}
class Person{
//属性的封装
private String name;//成员变量,在类中定义
private int age;//成员变量,在类中定义
//getter and setter
//对外提供一个对name属性设值的方法
public void setName(String name){
this.name=name;
}
//对外提供一个获取name属性的方法
public void getName(String name){
return name;
}
//对外提供一个对age属性设值的方法
public void setAge(int age){
this.age=age;
}
//对外提供一个获取age属性的方法
public void getAge(int age){
return age;
}
public void run(int len){//参数也是局部变量
int m=len;//m也是局部变量
System.out.println("我跑了"+m+"米");
}
}

构造方法有别于普通方法,可以看作是一个特殊的方法,是类在创建对象时自动调用的方法,可为类的创建初始化数据用
/**
构造方法:构造方法是在类中定义的,构造方法的定义格式:方法名称与类名称相同,无返回值类型的声明。
*/
public class Test3{
public static void main(String[] args){
Dog dog=new Dog();
Dog dog1=new Dog("wangwang",5);
}
}
class Dog{
//默认构造方法,通常有其它构造方法时,要保留默认构造方法
public Dog(){
System.out.println("构造方法执行了");
}
public Dog(String name,int age){
this.name=name;
this.age=age;
System.out.println("带两个参数的构造方法执行了");}
//属性的封装
private String name;
private int age;
//getter and setter
//对外提供一个对name属性设值的方法
public void setName(String name){
this.name=name;
}
//对外提供一个获取name属性的方法
public void getName(String name){
return name;
}
//对外提供一个对age属性设值的方法
public void setAge(int age){
this.age=age;
}
//对外提供一个获取age属性的方法
public void getAge(int age){
return age;
}
}