封装和构造方法

类与对象的关系

产生一个对像必须new一次

类名首字母大写

面向对象的三大特征:封装 继承 多态

二,为什么java中需要封装?

数据的有效性和安全性

保护数据的有效性和安全性,所以java中需要封装

三,什么是封装?

第一层含义:对象的属性和方法是一个统一的整体,不可分割

第二层含义:封装是一种保护数据的机制

四,怎么样使用封装保护数据?

属性封装:

以前 String name;

现在 : (1)private String name;?//私有的,只有自己可以用,其他类拿不到对象的属性

(2)提供共有的set/get方法访问属性

总结:一个类的所有属性默认情况下都必须封装

方法封装:

(1)把方法的public 改为private

(2 )提供公有的方法间接的调用私有的方法

总结:一个类中只有不想暴露给别人的方法才需要封装

public class Test{

private String name;

private int age;

//set方法:给属性赋值

//get方法:获取属性值

//一个类的set方法格式:

public void set属性名(参数){

属性=参数值;

}

//一个类的get方法格式:

public 返回值类型 get属性名(){

return 属性;

}

public void setName(String name){

//区分属性 属性前面加this this.name 这个就是属性

//规则:取名字的规则

if(name.equals("王八蛋")){

System.out.println("名字无效");

}else{

this.name=name;

}

name=name;

}

public String getName(){

return name;

}

}

总结:一个类的所有属性默认情况下都必须封装

命名规则,驼峰规则

public //公开的意思 就可以被其他类访问

//如果一个行为没有必要暴露给别人 那么就可以吧这个行为

//设置为私有行为

private void f(){

}

如果外部需要访问怎么办?

提供公有的方法

public void r(int money ){

f();

}

一个类中的方法1调用方法2,只要写方法2的名字就可以了

-----------------------------------------------------------------------

一,为什么需要构造方法?

人-----------出生行为:产生人

对象---------出生行为:产生对象

人是人他妈生的 对象是对象他妈生的

对象必须通过出生的行为才能产生!!!

出生的行为-----构造行为-------构造方法

总计:就是因为我们要的对象必须通过构造才能产生,所以一个类必须要有构造方法

二、什么事构造方法

1构造方法是一个方法

2,构造方法是没有返回值类型,在new对象的时候被系统自动调用

返回值为空和没有返回值是两回事

三,为什么我们之前写类没有写构造方法,也可以new出对象?

(1)情况一:我们没有写构造方法

public class Person{

//我们不写构造方法,计算机自动帮我们添加的,也就是说写不写都存在

public Person(){}

}

这个构造方法写不写都存在,这个方法没有什么意思,只是为了描述对象产生的过程

(2)情况二:我们写了构造方法

public class Person{

//我们写了构造方法,系统不会再自动添加构造方法,就用我们自己定义的构造方法

public Person(){

System.out.println("对象产生了");

}

public class Test{

public staic void main(String[] args){

Person person=new Person();//自动调用无参数构造方法

}

}

}

四、怎么样写构造方法------一个类可以有多个构造方法

public 类型(参数){//参数可以有多个

//方法体-----描述对象产生的过程

}

当类有多个构造方法 是通过构造方法的参数来决定调用哪一个构造方法

构造方法,一个对象只会调用以个构造方法

五、构造方法的意义?

1、构造方法是用来描述对象出生的过程的

2、初始化对象(给属性赋值的过程就叫对象初始化)

(set方法是不是也可以对对象进行初始化)

两者有什么区别?

构造方法初始化特点:

1、构造方法只能给属性赋值 不能改变属性值

Person person=new Person("张三");

//能不能通过构造方法改变属性值?李四

//下面不是改变属性值 是产生新的对象 名字叫李四

//person =new Person(“李四”);

非法字符报错,一定是你的代码里面出现了中文

2、构造方法可以一次性给多个属性赋值

set 方法的特定:

1、一次只能给一个属性赋值

2、set方法赋值可以不断改变属性值

----------------------------------------

数据类型:基本类型和引用类型

基本类型: 8种

byte(1)short(2)int(4)long(8)

double(8),float(4),char(2), boolean(1)

基本类型就是指天生就有的 最基本的

开辟空间:定义的时候开辟内存空间 定义变量的时候

释放内存:超出变量的作用范围就会立即释放内存空间

java中内存划分为5个区域:方法区 java栈区 本地方法栈

堆区 程序计数器

1、基本类型:只会在栈中开空间

int a;

a=5;

方法中的变量为局部变量

类的属性为全局变量

变量的作用范围只会在大括号里面有效,在大括号结束后无效了

2 引用类型:除了8种基本类型 其他都是引用类型

String Scanner Random Arrays 自定义类 数组

Person person= new Person();

引用 对象

引用类型即会在堆中开空间,也会在栈中开空间

引用类型开辟内存:是在new对象的时候开辟内存空间

释放内存:当我们的引用不再指向任何的对象的时候,垃圾回收程序会在适当的时间释放内存空间

垃圾回收程序:主要用来释放栈空间

1、内存快满的时候,会执行垃圾回收程序

2、空闲的时候

person之前叫变量,现在叫引用

new Person()叫对象

什么是引用,引用什么意思

引用就是对象地址

引用类型:既会在栈中开空间也会在堆中开空间

Person person= new Person();//对象的属性是有默认值的

对象创建在堆内存中,开辟的内存空间名字是16进制的,例子0x0101

为什么名字是16进制,因为堆内存中的地址是由系统管理的,系统命名的

名字和内存地址是一个意思

三char的两重身份:本身和编码(AscII码)

AscII码:计算机专家没事干,为每一个字符设置一个编号 这个编号就叫AscII码

char c=‘a‘;

System.out.println(c);‘a‘

char c=97;

System.out.println(c);‘a‘

char c=‘a‘+3;

System.out.println(c);‘d‘//字符类型适和加法,也适合减法,除法,乘法,适合算术运算

葵花宝典:

‘A’ 65 怒我

‘a‘ 97 就去

‘0’ 48 死吧

五 ,默认值?

1、变量? 没有默认值-----定义在方法中的

int a;

System.out.println(a); 报错

2、属性?有默认值 ------定义在类中的 类中的变量叫属性,方法中的变量

int o

String null

double 0.0

char AscII码为0的字符

3,数组? 有默认值

int[] 0 double[] 0.0 String[] null

int[] arr=new int[4]

System.out.println(arr[1]);输出0

六 局部变量:指一个变量只有有限的范围内有效超出这个范围就相当于没有

情况1:

int a=100;全局变量

if(1<2){

int a=99;局部变量

}

运行:报错

原因:因为全局变量的作用范围:从他产生开始到大括号结束

这个名字为a的变量还是存在的,再去内存中定义一个相同名字的变量就会报错

情况2:

if(1<2){

int a=99;局部变量

}

int a=100;全局变量

运行:正确,

因为局部变量的无效了,即内存释放掉了,才能再创建一个名字一模一样的变量

如果一个方法变量a的还是有效的,再去定义一个变量a就会程序报错,因为一但能创建java不知道a对应的是那个内存

总结:也就说变量的有效无效本质指的是内存空间还在不在

情况3:

for(int i ; i<100;i++){

}

System.out.println(i);报错

打印a的属性:a为对象,且a类中有toString()方法

System.out.println(a); //自动调用toString方法

System.out.println(a.toString());两句代码是等价的,是一个意思

a类中没有写toString()方法,程序就会打印哈希code码,如上图

补充:

Person p=new Person();

System.out.println(p);//自动调用toString();

如果Person类中写了toString方法,就是输出toString方法的内容

如果没有定义toString方法 那么输出对象的地址的整数形式(父类的toString)

时间: 2024-10-29 19:08:51

封装和构造方法的相关文章

面向对象,封装,构造方法,this关键字,main,继承,接口,多态阶段性小结

一.局部变量和成员变量 成员变量:  定义在类中变量 局部变量:  定义在方法中变量 1成员变量与局部变量的区别: 应用范围 成员变量在整个类内都有效 局部变量只在其声明的方法内有效 生命周期   成员变量: 它属于对象,它随着对象的创建而创建,随着对象的消失而消失 局部变量: 使用完马上释放空间. 存储位置  成员变量属于对象,它存储在堆内,堆内的实体,当没有引用指向其时,才垃圾回收清理 局部变量存在栈内存中,当不在使用时,马上就会被释放. 初始值 成员变量它存储在堆中,如果没有赋初值,它有默

面向对象(类,封装,this,构造方法)

无论面向对象还是面向过程, 这俩都是解决问题的思路而已, 只是角度不同. 面向过程: 强调解决问题的每一个步骤都亲力亲为,每一个细节都自己手动实现. 面向对象: 使用特定功能对象去解决特定的问题, 每一个细节不需要关注,只需要创建对应的对象即可. 面向对象是基于面向过程的 类和对象及他们的关系 类: 具有相同特征和行为(功能)的事物的统称 , 是一个抽象概念 对象: 这类事物中某个确定的个体 类和对象的关系 一个类可以创建多个对象 , 类是对象的抽象, 对象是类的实例. 描述一个事物---->

封装、构造方法、private、Static与this关键字、main()_Day07

1:成员变量和局部变量的区别(理解) (1)定义位置区别:      成员变量:定义在类中,方法外.    局部变量:定义在方法中,或者方法声明上.    (2)初始化值的区别:   成员变量:都有默认初始化值. 局部变量:没有默认初始化值.要想使用,必须先赋值. (3)存储位置区别: 成员变量:存储在堆中. 局部变量:存储在栈中. (4)生命周期区别:   成员变量:随着对象的创建而存在.随着对象的消失而消失. 局部变量:随着方法的调用而存在,随着方法调用完毕而消失.更严谨地说当局部变量的作用

java封装、构造方法、this

一.封装 特性:安全.将变化隔离.便于使用.提供重复性 例子 [[email protected] java]# cat EmployeeDemo.java  class Employee {     private String id;     private String name;     private String gender;       //提供公有的set和get方法     //public 成员修饰符,公共的,谁都可以访问     //private 成员修饰符,私有的,只

java第2天:类,对象,封装和构造方法

1 面向对象简述 将 {1,3,45,56,78,90}转化为[1,3,45,56,78,90] 1-2 方法1:面向过程 代码块 public class test { public static void main(String[] args) { int[] array = {1,3,45,56,78,90}; // 打印成[1,3,45,56,78,90] System.out.print("["); for (int i = 0; i < array.length; i

阶段1 语言基础+高级_1-2 -面向对象和封装_17构造方法

新建一个学生类   新建demo02Student 在用new创建类的时候,后面的类名称其实就是构造方法 new对象就是在调用构造方法 写上return 就会报错.构造方法中,不能产生返回值 定义了成员变量name和age 这两个.在构造函数内赋值 全参,两个成员变量都包含了.这样省的去调用setXX方法了.直接在构造函数内就可以给成员变量进行赋值 给成员变量加上get和set的方法 这样的话,set不就是白写了吗.直接在构造函数内就可以赋值了. 原文地址:https://www.cnblogs

面向对象(初级)个人总结 第二部分 封装

面向对象 3 部分(封装) 构造方法:public class dx(){ public dx(string n,int a){ this.name=n;this.age=a; } } 2.重载:概念:同名不同参例:publ dx();{ }3.构造方法和普通方法在定义上有区别:首先构造方法没有返回值,并且名字要与类名保持一致.连 void 都不能有返回构造方法可以用来完成,成员属性的初始化工作.每个类至少有一个构造方法,如果没有,系统会提供一个默认的无参构造.只能在new 创建对象时调用 创建

【JavaScript 封装库】BETA 2.0 测试版发布!

1 /* 2 源码作者: 石不易(Louis Shi) 3 联系方式: http://www.shibuyi.net 4 =================================================================================================== 5 程序名称: JavaScript 封装库 BETA 2.0 版 6 迭代版本: BETA 1.0 7 功能总数: 50 个 8 新增总数: 6 个 9 删除总数: 0 个 1

【JavaScript 封装库】Prototype 原型版发布!

1 /* 2 源码作者: 石不易(Louis Shi) 3 联系方式: http://www.shibuyi.net 4 =================================================================================================== 5 程序名称: JavaScript 封装库 Prototype 版 6 迭代版本: 无 7 功能总数: 14 个 8 功能介绍: 9 1. 实现代码连缀 10 2. id /