黑马程序员---Java基础---面向对象:类的组成部分
来源:互联网 发布:山西东华软件 编辑:程序博客网 时间:2024/06/06 07:51
面向对象相对于面向过程而言,面向过程强调的是功能行为,面向对象将功能封装进对象,强调的是具备了功能的对象。换句话说,面向过程强调的是一个主体,程序的实现是主体去完成各种功能;面向对象强调的是具备功能的个体,程序的实现是主体使用具有功能的个体去完成。
2.面向对象的特点
(1)将复杂的事情简单化
(2)面向对象,将以前的执行者变成了指挥者
(3)对象就是将函数等一些功能属性进行了封装。
1.类与对象的关系
三、封装
1.封装的概念
是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
2.封装原则
将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其进行访问,以保证属性的安全性。
类是一个封装体,而函数是java中最小的一个封装体。
四、private权限修饰符
1.封装的一种表现形式;
2.并且它也是权限修饰符中的一种,用于修饰类中的成员(成员变量和成员函数);
3.私有成员只在本类中有效;
4.由于外部类是没办法直接访问此成员变量的,所以必须提供一种公共的方法来访问它(即get和set方法)。
作用:
提高了此成员变量的安全性,防止非法的赋值情况出现。
例子:这就是对私有成员变量的访问方法。
class Person { //定义一个私有变量 private int age; //下面提供公共的方法来访问 public void setAge(int age) { //此处还可以写上判断条件,来判断给的age值是否合法,从而来保证此成员变量的安全性。 if (age>0) { this.age=age; } else { System.out.println("输入的age值是非法值"); } } //得到此私有变量的值 public int getAge() { return age; } }五、构造函数
1.作用
给对象进行初始化,对象一建立就执行对应的构造函数。
2.特点
(1)函数名和类名相同;
(2)不用定义返回值类型;
(3)不可以写return语句;
(4)当一个类中没有定义构造方法时,系统会默认给该类加入一个空参数的构造函数。
当一个类中定义了构造方法之后,默认的构造函数就没有了。
(5)当一个类中有多个构造方法时,此时这些构造方法有重载的特性。
3.构造函数与一般函数的不同
1> 写法不同
2> 构造函数只在对象建立的时候执行,给对象进行初始化。
一般函数是在对象调用时执行,是对象的功能
3> 一个对象建立,构造函数只执行一次
一般函数可以被对象多次调用
4.例子
class Person{private int age;private String name;//以下两个构造函数即为重载Person(){System.out.println("age="+age+"name="+name);}Person(int age,String name){this.age=age;this.name=name;System.out.println("age="+age+"name="+name);}}六、构造代码块
1.格式
{
执行语句;
}
2.作用
给此类的所有对象进行初始化,对象一建立就运行,而且优先于构造函数执行。
3.与构造函数的区别
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象进行初始化。
4.示例
class ConstructorCode { int age=10; String name="lili"; //构造函数ConstructorCode(){System.out.println("age="+age+"---name="+name);}ConstructorCode(int age,String name){System.out.println("age="+age+"---name="+name);}//构造代码块{System.out.println("hello 构造代码块");}}class ConstructorCodeTest{ public static void main(String[] args) { ConstructorCode c1=new ConstructorCode();//结构为:hello 构造代码块 //age=10---name=liliConstructorCode c2=new ConstructorCode(20,"wangwu");//hello 构造代码块 //age=20---name=wangwu }}七、this关键字
this代表其所在函数所属对象的引用,即this代表本类对象的引用。
当在函数内需要用到调用该函数的对象时,就用this。
另外this还可以用来在构造函数中,调用本类的其他构造函数。
示例
class Student{String name;int age;Student(String name){this.name = name;}Student(String name, int age){this(name); //调用上面的构造函数this.age = age; }//比较两个学生年龄的大小public boolean compareAge(Student student){//this.age的this代表调用该函数的Student对象return (this.age > student.age)? true : false;}}八、static修饰符
1.作用
用于修饰成员(成员变量和成员函数)
2.被修饰的成员具有以下特点
(1)静态修饰的内容被对象所共享;
(2)当成员被静态所修饰之后,又多了一种调用方式,除了可以被对象调用之外,还可以被类名直接调用。
(3)它存放在方法区或者叫共享区中;
(4)随着类的加载而加载,随着类的消失而消失,它的生命周期最长;
(5)优先于对象存在。
3.实例变量和类变量的区别
静态变量又称为类变量,而成员变量(即未被static修饰的)又称为实例变量。
1> 存放位置:
类变量随着类的加载而存在于方法区中
实例变量随着对象的建立存在于堆内存中
2> 生命周期
类变量生命周期最长,随着类的消失而消失
实例变量生命周期随着对象的消失而消失
4.静态使用注意事项
1> 静态方法只能访问静态成员(方法和变量)
非静态方法及尅访问静态成员也可以访问非静态成员
2>静态方法中不可以出现this、super关键字
因为静态优先于对象存在
3>主函数main()是静态的
5.静态的利弊
利:对对象的共享数据进行单独空间的存储,节省内存空间
可以直接被类名调用
弊:生命周期过长
访问出现局限性,静态方法只能访问静态成员
6.示例class Person{ String name; //成员变量又称为实例变量 static String country = "CN"; //静态成员变量又称为类变量 public static void show() {// System.out.println(name); //静态方法不可以访问实例变量 System.out.println(country); //静态方法访问静态变量 }}class Test{public static void main(String[] args){//静态成员可以直接被类名调用System.out.println(Person.country);System.out.println(Person.country);}}
7.静态代码块
存在于类中,用于给类变量进行初始化
格式:
static
{
静态代码块中的执行语句;
}
特点:
随着类的加载而执行,只执行一次,并优先本类的主函数执行。
注意:
静态代码块是给类进行初始化,构造代码块是给对象的共性数据进行初始化,构造函数是给对象的特性数据进行初始化。
九、静态代码块、构造代码快、构造函数的执行顺序
<span style="font-size:18px;">class CompCodeTest {public static void main(String[] args) {new CompCode();new CompCode(3);}}class CompCode{private int x;//定义此类的构造函数CompCode(){System.out.println("hello 无参的构造函数--");}//有参的构造函数CompCode(int x){this.x=x;System.out.println("hello 有参的构造函数--------"+x);}//构造代码块{System.out.println("hello 构造代码块---");}//静态代码块static{System.out.println("hello 静态代码块");}}结果为:hello 静态代码块 hello 构造代码块--- hello 无参的构造函数-- hello 构造代码块--- hello 有参的构造函数--------3</span><span style="font-size:24px;"><strong>即表示静态代码块优先于构造代码块,构造代码块优先于构造函数。</strong></span>
- 黑马程序员---Java基础---面向对象:类的组成部分
- 黑马程序员-java基础第5、6天-面向对象(类的组成部分分析)
- 黑马程序员--Java基础--面向对象基础
- 黑马程序员-----java基础(面向对象基础)
- 【黑马程序员】java编程基础,面向对象
- 黑马程序员 Java基础 ---> 面向对象(上)
- 黑马程序员 Java基础 ---> 面向对象(下)
- 黑马程序员----JAVA基础之面向对象
- 黑马程序员JAVA基础-面向对象
- 黑马程序员 java基础<—>--->面向对象
- 黑马程序员Java基础__面向对象
- 黑马程序员 Java基础<三>--->面向对象
- 黑马程序员---java基础---2面向对象
- 黑马程序员----java基础之面向对象
- 黑马程序员----Java基础之面向对象
- 黑马程序员--Java基础--01面向对象
- 黑马程序员--Java基础总结--面向对象
- 黑马程序员-java基础-面向对象-继承
- No such property: nexusUsername for class: org.gradle.api.publication.maven.internal.ant.DefaultGroo
- Android开发-Listview中显示不同的视图布局
- NSAttributedString
- C++中的异常处理
- [Unity3D]Unity3D游戏开发之从Unity3D到Eclipse
- 黑马程序员---Java基础---面向对象:类的组成部分
- 解决centos7命令行中文乱码
- BZOJ 1116 [POI2008]CLO 并查集
- JavaScript 事件
- Leftmost Digit
- unicode码的分布情况
- [Unity3D]Unity3D游戏开发之在Android视图中嵌入Unity视图
- Oracle学习笔记20150915常见循环语句以及goto语句
- TCP协议三次握手