面向过程: 1.把冰箱打开 2. 把大象放入 3. 冰箱关起来
面向对象: 打开冰箱,储存,关闭都是对冰箱的操作,是冰箱的行为。
冰箱就是一个对象,所以只要操作冰箱所具备的功能,都要定义在冰箱中。
不知以上解释可否满意呢?
面向对象设计把握一个重要的经验:谁拥有数据,谁对外提供操作这些数据(私有)的方法!(被动的一方是数据的拥有者,主动的一方是执行者)
开发时:找对象,建对象,用对象,并维护对象之间的关系。 以后学习过程当中,我们会就这三点进行深入学习。
说了那么多该来点实际操作了
我先拿来一串代码。
class Person {
public int age;//成员属性 实例变量
public String name;
public String sex;
public void eat() {
//成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
}
我们要知道。以上代码就是类的创建,创建类的关键字就是class; Person 也就是我们C语言说的结构体(比结构体要牛)也就是自定义类型, public 叫做访问修饰符,也就是我们所说的权限,public 就是公有的,大家都能使用的。那么什么又是实例化类呢?
Person person = new Person();
那么这个就是实例化Person类,
这就是 类的创建和实例化了。
使用 . 来访问对象中的属性和方法.
下面看代码。
class Person {
public int age;//成员属性 实例变量
public String name;
public String sex;
public void eat() {
//成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
}
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.name = "WeiRan";
person.sex = "男";
person.age = 19; //因为类中 age为int型。所以person.age也是整型,因为我们是用过对象访问的年龄。
System.out.println(person.name);
System.out.println(person.sex);
System.out.println(person.age);
}
}
代码有点长,但我相信很好理解。毕竟我在中间也加了注释呢。在这里我们发现可以直接赋值,,简单嘛?简单的很啊,下面我说一下注意事项
Person person = new Person();
Person person1 = new Person();
Person person2 = new Person();
Person person3 = new Person();
Person person4 = new Person();
我们可以用这样的方式实现代码,每次new一个便可以在堆区创建一块空间,在这里我要给大家扩展一点
1 在代码:Person person = new Person(); 中,person在栈区存储 它身上存着一块地址。比如我运行一下。
你们看,运行结果是类名+字符@+地址。当然我们如何解决这个问题呢。比如我们如果想要输出类内的元素
我说下步骤:
这个结果便是我们想要的了。当然有点小知识:new再堆区开空间,有默认值的,大家可以看我之前写的博客 在这里我就说一下,引用类型默认为null
null 在 Java 中为 “空引用”, 表示不引用任何对象. 类似于 C 语言中的空指针. 如果对 null 进行 . 操作就会引发异常.
其实我们再类内定义的变量 就被成为 字段,属性,成员变量 我们不强制叫做什么,比如我就喊他元素。
什么是就地初始化呢,就是在类内对字段进行初始化。
class Person {
public String name = "张三";
public int age = 18; }
这就叫就地初始化 当然 我们这样初始化可以理解为在方法内使用时,我们如果是初始化这个类,那么name,age字段就有了初始值
方法就是类内使用方法。大家可以看代码!其实这个知识点特别简单哦
class Person {
public int age;//成员属性 实例变量
public String name = "Weiran";
public String sex;
public void eat() {
//成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
}
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.eat();
}
}
看这个代码,。其实就是调用类里面的函数,就完了,好了。以上就是 类的基础了。下一个模块就要变的难咯。建议大家看到这里先去练练手,把类吃明白了,再继续看
由上文我相信大家可以知道 属性,字段,成员变量是一个东西。也就是我们类里面的变量。一个类如果是一个集合的话。那么属性/字段就是元素。下面看一遍代码吧,在下将用代码解释所有
class Person{
public static int count;
public int n;
}
定义方法很简单咯。就是将count定义成静态的整型变量,权限为公开。下面我让你看看他的不同之处在哪里吧
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
p1.count++;
p1.n++;
System.out.println(p1.count);
System.out.println(p1.n);
p2.count++;
p2.n++;
System.out.println(p2.n);
System.out.println(p2.count);
}
这串代码便是直接使用的上图中的类。大家运行可以发现。静态变量 : p1.count++ 第一次执行的时候从0变成了1 第二次执行则是再 1 的基础上再加。而非静态变量呢。定义一次初始化一次。看到这里 再联想之前的知识。我们就可以发现,在类中普通变量在使用时。则是在不同堆区进行改变。 而 new p2 是 count 使用的还是原来那块空间。当然在这里我就不让大家思考了。我直接说原因了
如果在任何方法上应用 static 关键字,此方法称为静态方法
看到上面这句话 我们应该就知道上面时静态方法了 下面我给大家介绍几点重点吧
public static void show(){
System.out.println("Hello World!!!");
count = 10;
}
public void exitInt(){
count = 20;
}
小编建议大家将这一步放到编译器上,交换顺序看打印结果。,我们会发现,count始终等于10;
当然在这里 静态变量不能调用非静态变量的值,
还有一点大家一定要避坑。就是非静态方法不能改变静态变量的值,但是访问并不报错。所以以后如果在这里写错 可是会很头疼的哦!!!
下面我们开始介绍封装,什么叫封装呢?封装就是将数据保存起来,提高java数据的安全型,不让别人看见,
<<代码大全>> 开篇就在讨论一个问题: 软件开发的本质就是对程序复杂程度的管理. 如果一个软件代码复杂程
度太高, 那么就无法继续维护. 如何管理复杂程度? 封装就是最基本的方法.
在我们写代码的时候经常会涉及两种角色: 类的实现者和类的调用者.
封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了.
这样就降低了类使用者的学习和使用成本, 从而降低了复杂程度
class Person {
private String name = "张三";
private int age = 18;
public void show() {
System.out.println("我叫" + name + ", 今年" + age + "岁");
}
}
class Test {
public static void main(String[] args) {
Person person = new Person();
person.show();
}
}
这个代码可以看出。我们的private 修饰完名字和年龄后,再主方法里并不能访问名字和年龄了。只能通过类内的方法进行访问。这样就提高了java语言的安全程度。
这一块我不怎么建议大家使用,因为有很多逻辑上的问题,尤其是对于初学者,这些省事的方法不好,下面我就简单介绍一下省事的方法把。还是alt+ins键之后选择 getter或者setter 然后选择你需要对外使用的接口即可。—再次强调,不建议使用
首先我们知道,不用static便需要在main 执行前对main进行开辟空间。而main又是程序首先执行的,我们想想都矛盾啊。是不是,
this有三种方法,下面我介绍一种:看一下代码
class Person{
public String name;
public void setName(String name){
name = name;
}
}
public class Test{
public static void main(String[] args) {
Person p = new Person();
p.setName("Weiran");
System.out.println(p.name);
}
大家猜猜这一块代码的执行结果是多少呀!! 毫无疑问,是Weiran。哎!!其实没有疑问归没有疑问,对不对看运行结果把!
哇哦最后的结果居然是null 为什么呢? 听我解释把,。是因为局部变量优先。那么我们如何杜绝这个呢?我们在第一个name前面加一个this.即可
大家看 这样就没问题了。在这里,我就不说this的用法了,我相信,只要你比我聪明你就能理解this的用法了。
1.如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
2.若类中定义了构造方法,则默认的无参构造将不再生成.
3.构造方法支持重载. 规则和普通方法的重载一致
以上三点给大家介绍,系统会自带一个构造函数,但是,构造函数内什么都没有。而第二点定义构造函数的方法是什么呢?
看到没有,构造函数的使用,实在类实例化的时候就已经执行了滴!!
当然 构造方法也是方法也有参数。那么他就支持重载 这里无需多言。
普通代码块是定义在方法种的
public class Main{
public static void main(String[] args) {
{
int x = 10 ;
System.out.println("x1 = " +x);
}
int x = 100 ;
System.out.println("x2 = " +x);
}
}
直接{}的代码那一块就是普通代码块 这种方法很少用,因为用了和没用并没啥区别啊。
构造代码块是在类中,不是构造方法,也叫实例代码块
class Person{
private String name;//实例成员变量
private int age;
private String sex;
public Person() {
System.out.println("I am Person init()!");
}
//实例代码块
{
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.show();
}
}
在方法里 构造函数的那一块就是构造代码块。
注意事项: 实例代码块优先于构造函数执行。
static {
count = 10;//只能访问静态数据成员
System.out.println("I am static init()!");
}
就像这样 直接使用static 定义的代码块就是静态代码块!!
静态代码块优先于 实例代码块
其实通过上面的介绍,我相信大家对类与方法这一部分都能有非常深入的理解
匿名只是表示没有名字的对象
注意事项有三点
class Person {
private String name;
private int age;
public Person(String name,int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.println("name:"+name+" " + "age:"+age);
}
}
public class Main {
public static void main(String[] args) {
new Person("caocao",19).show();//通过匿名对象调用方法
}
}
这就是使用了,配上上面的内容我相信大家都能很容易的理解了,
小编是一名正在奋斗的大一小骚年,希望能与大家一起学习哦。在编程的路上也希望能有朋友一起学习!!!这篇博客 是小编自己理解的写的,所以,有些地方可能有所不足,忘大家给予指点,错的越多后期越吃香。
小编qq号:2206730228
希望能与大家一起学习哦!!!!!!