Java基础---封装继承静态
封装&this关键字&静态
封装
封装:隐藏事物的属性和实现细节,并对外提供公开的访问方式。
属性私有化:private 可修饰的内容:成员变量、成员方法、构造方法、内部类被private修饰的内容只能在本类访问
get和set方法:属性被私有化之后,只能通过get和set方法访问,并且可以在get和set方法中对数据进行筛选。
get:获取属性的值public 数据类型 get属性名() {return 属性名;}
set:设置属性的值public void set属性名(数据类型 属性名) {this 属性名 = 属性名;}
package com.DaYu;import java.util.Scanner;public class Demo01 {public static void main(String[] args) {Person p = new Person();Scanner sc = new Scanner(System.in);System.out.println("请输入名字");String name = sc.next();System.out.println("请输入年龄");int age = sc.nextInt();p.setName(name);p.setAge(age);System.out.println(p.getName()+" "+p.getAge());}
}class Person {private String name;private int age;public Person() {}public Person(String name,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {//如果年龄在0~18则返回真实年龄,如果大于18,则返回18if(age > 18) {return 18;}else return age;}public void setAge(int age) {//数据的筛选if(age<0) {System.out.println("数据不合法");}else this.age = age;}
}
this关键字
变量的就近访问原则:访问某个变量时,会先寻找最近的该变量的定义,如果
有,那就是这个变量,如果没有,就往更远处去寻找该变量的定义。
this关键字;表示当前类型的当前对象的引用,谁调用this所在的方法,this就代表哪个对象。this.属性名称----访问类中的成员变量,用来区分成员变量与局部变量重名问题。this.方法名称----访问本类的成员方法this()----访问本类的构造方法只能用在构造发方法中,不能用在普通方法中;必须是构造方法中的第一条语句;
构造方法
又称构造器、构造函数、constructor
语法:public 方法名(形式参数列表){方法体}
用途:用于创建对象,同时给成员变量进行赋值。
特点:构造方法的方法名与类名完全一样;构造方法没有返回值类型,连void也没有;构造方法不能手动调用,只在创建对象时由jvm自动调用,并且每创建一个对象只调用一次;构造方法可以被重载;当一个类中没有定义任何构造方法时,系统会自动给这个类提供一个公开的无参构造,当系统中定义了其他构造方法时,系统不再自动给其添加无参构造,所以实际开发中需要我们把无参和有参的构造方法都写出来。 注意:在创建对象的过程中,会有三个初始化过程:默认初始化、显示初始化,构造初始化三者顺序:默认初始化、显示初始化,构造初始化
对象创建的过程
1.将要创建的对象的所属类型的字节码文件加载到方法区;
2.在栈内存中声明一个该类型的引用,用于将来存储对象的地址;
3.在堆内存中开辟空间,为成员变量分配空间;
4.为成员变量赋默认值;
5.为成员变量赋显示初始值。
6.构造方法进栈,再次为成员变量赋值(构造初始化);
7.将对象的地址赋值给栈内存中的引用。
静态 static
static
1.用来修饰成员变量,就是静态变量/类变量,不能用来修饰局部变量特点:静态变量随着类的加载而进入方法区中的静态区静态变量被所有对象所共享,有默认值访问方式:类名.静态变量名,也可以创建对象访问,但不推荐2.用来修饰成员方法特点:静态方法不能不能访问非静态成员,若非要访问,需要在静态方法中创建对象静态方法中不能出现this关键字调用方式:类名.方法名()注:静态的不能访问非静态的!!!
静态变量和成员变量的区别:
静态变量 | 成员变量 | |
---|---|---|
所属 | 类 | 对象 |
内存空间 | 方法区中的静态区 | 堆内存 |
生命周期 | 随着类加载而存在,类消失而消失 | 随着对象创建而存在,对象消失而消失 |
访问方式 | 类名.静态变量名 / 对象名.静态变量名 | 对象名.变量名 |
package com.DaYu;public class Demo02 {public static void main(String[] args) {//类名.调用静态成员Num.m2(); int b = Num.b;System.out.println(b);Num num2 = new Num();Num num3 = new Num();num2.a++;num2.b++;//b的值被改变了,会影响到后面的输出System.out.println(num2.a+" "+num2.b);//11 21System.out.println(num3.a+" "+num3.b);//10 21 }
}class Num {int a = 10;//成员变量static int b = 20; //静态变量//普通成员方法public void m1() {System.out.println(a);System.out.println(b);}//静态方法public static void m2() {//System.out.println(a);//不能访问非静态变量System.out.println(b);//可以通过创建对象访问非静态成员Num num = new Num();System.out.println(num.a);num.m1();}
}
Java基础---封装继承静态相关推荐
- Java基础篇--继承(inherit),多态(Polymorphism)
Java基础篇--继承(inherit),多态(Polymorphism) 1. 继承概述 1.1 什么是继承 1.2 为什么要使用继承 1.3 继承的特点 1.4 继承的优点 2. 组合设计模式 2 ...
- 第二十八节:Java基础-进阶继承,抽象类,接口
前言 Java基础 - 进阶继承,抽象类,接口 进阶继承 class Stu {int age = 1; } class Stuo extends Stu {int agee = 2; } class ...
- Java基础:继承、多态、抽象、接口
第一讲 继承 一.继承概述 1.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 2.通过extends关键字可以实现类与类的 ...
- Java 基础(继承)
继承 基础 1. 继承的特点 2. super关键字 3. 继承中变量访问特点(就近原则) 4. 继承中成员方法访问特点 5. 继承中构造访问特点 为什么子类中所有构造方法默认都会访问父类无参构造方法 ...
- Java回顾 封装 继承和多态
封装 什么是封装 封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式. 封装时的权限控制符区别如下: 封装的意义 对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象 ...
- java基础:继承的使用
一.继承的使用 1.什么是继承 2.继承的设计规范 3.继承的内存原理 test.java package Test;public class test {public static void mai ...
- (十)Core Java 面向对象(封装,继承,多态,接口) -02 (96)
目录 : 24 ). 面向对象(聚集关系) 25 ). 面向对象(子父类中变量的特点) 26 ). 面向对象(子父类中函数的特点-覆盖) 27 ). 面向对象(子父类中构造函数的特点 ...
- 11. Java基础之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- Java基础-day08-static·static静态代码块·final 关键字·多态·汽车设计综合案例·异常
day09 1.static 是java中的一个关键字 用于修饰成员(成员变量和成员) 1.static是一个关键字 2.static可以修饰成员变量和方法,被修饰的资源就是静态资源 3.静态资源优先 ...
最新文章
- 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V3 -- 远程方法调用 整合 Spring
- 独家 | 数据分析@爱可可-爱生活是否在用机器学习算法运营微博
- python简单代码hello-小白学 Python(1):开篇
- 基于visual Studio2013解决面试题之0601二叉树深度
- 巨亏的旷视科技,是AI独角兽还是物联网企业?
- java biginteger使用_java中的BigInteger的基本用法 | 学步园
- 从服务器上传和下载文件方法
- 3.1_ 1_ 内存的基础知识
- go func()和 go_Go的泛型真的要来了—如何使用以及它们是怎么工作的
- 手机的小窗口怎么弄_vivo怎么弄小窗口 vivo怎样弄小窗口
- OpenCV学习cvtColor函数
- 用Python生成人人贷借款理由词云图
- 【折腾系列—All In One主机】4、 iKuai软路由安装及配置
- 服务器支持 TLS Client-initiated 重协商攻击(CVE-2011-1473复现验证)
- excel表格打印每页都有表头_【Excel】打印超长表格,怎么才能每页都显示表头?...
- 面试专题:QTrade(苹果树)面试复盘
- 挫败、迷茫、无聊时值得一看的“有点励志的故事和语录”
- 西北乱跑娃 --- python命令行换源配置
- day1HTML常用标签
- c语言教学系统设计报告,C语言课程设计报告-范例Word版
热门文章
- 275. H-Index II 递增排序后的论文引用量
- web.xml里,classpath使用范围
- Oracle数据库只读事务和无事务的区别
- 用apache commons-pool2建立thrift连接池
- 使用 WorkflowIdentity 和版本控制
- Linux的概念与体系 7. Linux进程基础(转载)
- linux扫盲之CPU模式
- 嵌入式、快速人脸算法库Vision.Face SDK开放下载!已经商用检验
- 【TensorFlow】TensorFlow从浅入深系列之三 -- 教你如何对MNIST手写识别
- Github | 谷歌机器学习课程中文版