构造方法,this关键字,static关键字,封装,静态变量
1.构造方法
构造方法是一种特殊的方法,是专门用于创建/实例化对象的方法。
构造方法根据是否有参数分为两类:1.无参构造方法 2.有参构造方法
1.1无参构造方法
无参构造方法就是构造方法中没有参数。构造方法在创建对象(new Dog())时使用.无参构造方法一般用于给属性赋默认值。如果开发中没有定义无参构造方法,jvm默认给类分配一个无参构造方法。格式如下
[修饰符] 类名(){ }
1.2有参构造方法
当构造/实例化一个对象的时候,可以向构造方法中传递参数,这样的构造方法叫做有参构造方法。有参构造方法格式如下
[修饰符] 类名(type arg1,type arg2,...){
//初始化代码
}
有参构造和无参构造是方法重载的关系。
2.1局部变量和成员变量的优先级
在一个代码块(作用域)中,局部变量和成员变量同名,局部变量的优先级高于成员变量。
2.2有参构造常见问题
在一个类中,当定义了有参构造的时候,jvm不再默认分配无参构造。但是在一些情况下我们仍然需要用到无参构造方法,如反射,只能用无参构造,不能用有参构造。所以,一般情况下,我们在定义有参构造的时候,同时也会定义无参构造。
3this关键字(上)
this关键字一般指向对象本身。this关键字用于访问成员属性,可解决局部变量和成员变量同名时优先级的问题。如下
public Dog2(String name,int health,int love,String strain){
System.out.println("this:"+this);
this.name = name;
this.health = health;
this.love = love;
this.strain = strain;
}
public class Test04{
public static void main(String[] args){ Dog2 dog = new Dog2("二狗",100,0,"土狗");
System.out.println("dog:"+dog);
dog.showInfo();
}
}
通过打印this的地址,和dog类的地址。可以发现他们都指向同一个地址。由此可知,this指向对象本身。
4static关键字
4.1静态变量
static关键字,表示静态的,可以修饰变量,也可以修饰方法。
static修饰的变量称为静态变量,形式如下:
static type 变量名 [=初始值]
静态变量,也叫类变量,归类所有。存放在方法区(共享区)中的静态区中,可以被类的对象共享访问。
静态变量的访问方式:
类名.静态变量(推荐)
对象名.静态变量
通过以下需求加深理解:
需求:统计汽车工厂成产了多少台汽车?
public class Car{
String brand;
String type;
float price; static int count = 0; public Car(){
Car.count++;
} public Car(String brand,String type,float price){
this.brand = brand;
this.type = type;
this.price = price;
Car.count++;
} public void showInfo(){
System.out.println("车辆信息:");
System.out.println("品牌:"+this.brand);
System.out.println("型号:"+this.type);
System.out.println("价格:"+this.price);
System.out.println("我是第"+Car.count+"辆车");
} }
public class Test01{
public static void main(String[] args){
Car car1 = new Car("奔驰","漏油GL300",66);
car1.showInfo(); Car car2 = new Car("奔驰","漏油GL400",66);
car2.showInfo(); System.out.println(Car.count);
System.out.println(car1.count);
System.out.println(car2.count); }
}
类中包含静态成员(静态属性,静态方法)和实例成员(实例变量,实例方法)。
4.2静态方法
static修饰的方法称为静态方法,形式如下:
[修饰符] static 返回值类型 方法名(arg..){ }
静态方法归类所有,调用方式:
类名.方法名()(推荐)
对象名.方法名()
需注意的是:实例方法可以访问静态成员。
静态方法不能访问非静态成员。
5封装
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的步骤:[1]属性私有化
[2]提供公共的设置器和访问器
[3]在设置器和访问器中添加业务校验逻辑
例子如下:
public class Dog{ // 【1】private 私有的,对外不可见
private String name;
private int health;
private int love;
private String strain; // 【2】提供公共的设置器(setter)和访问器(getter)
public void setName(String name){
// 【3】逻辑校验
if(name.equals("")){
System.out.println("姓名不能为空.");
}else{
this.name = name;
}
}
public String getName(){
return this.name;
} public void setHealth(int health){
if(health < 0){
System.out.println("健康值不合法.");
this.health = 0;
}else{
this.health = health;
}
}
public int getHealth(){
return this.health;
} public void setLove(int love){
if(love < 0){
System.out.println("亲密度不合法.");
this.love = 0;
}else{
this.love = love;
}
}
public int getLove(){
return this.love;
} public void setStrain(String strain){
if(strain.equals("")){
System.out.println("品种不能为空.");
}else{
this.strain = strain;
}
}
public String getStrain(){
return this.strain;
} public Dog(){ } public Dog(String name,int health,int love,String strain){
this.setName(name);
this.setHealth(health);
this.setLove(love);
this.setStrain(strain);
} public void showInfo(){
System.out.print("我的名字叫"+this.name);
System.out.print(",健康值"+this.health);
System.out.print(",亲密度"+this.love);
System.out.println(",我是一只"+this.strain);
}
}
6.this关键字(下)
this表示对象本身。
[1]this调用属性
[2]this调用方法
[3]this调用本类的构造方法。形式如下:
this(arg1,arg2,...)
通过下面练习加深理解
public Dog(){ } public Dog(String name,int health,int love){
this.setName(name);
this.setHealth(health);
this.setLove(love);
} public Dog(String name,int health,int love,String strain){
//this.setName(name);
//this.setHealth(health);
//this.setLove(love); // this调用本类的其他构造方法
// System.out.println("test");
this(name,health,love);
this.setStrain(strain); // showInfo();
//this.showInfo();
}
注意:this调用其它构造方法时,只能放在构造方法的第一行
7.静态常量
在程序运行过程中,如果有一个量的值不发生改变,可以把该量声明成一个静态常量,用static final修饰。
构造方法,this关键字,static关键字,封装,静态变量的更多相关文章
- Java中Static关键字详解以及静态变量和成员变量的区别
一.static关键字的特点 (1)修饰成员变量.成员方法(2)随着类的加载而加载(3)优先于对象存在(4)被所有对象共享(5)可以通过类名调用 它本身也可以通过对象名调用 例如:main()方法由j ...
- 总结 接口 final关键字 abstract关键字 static 关键字
final关键字: * final 修饰的方法能被继承 不能被重写 * final修饰的类不能被继承 * final 修饰的变量(基本类型)不能被修改 * final 修饰的成员变量必须初始化 局部变 ...
- static 使用,静态变量
由static修饰,属于整个类,被类对象共享, 可以由类名,对象名访问 static可以修饰变量,方法,代码块 public class HelloWorld { static String clas ...
- Java 中的 static 使用之静态变量
大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 static 大显身手的时候了!! Java 中 ...
- 公司新来的小姐姐不懂java中的static关键字,这样给她描述不香吗?
前言 static关键字是摆在刚入行编程语言的小白们面前的一道难题,为什么要用static?使用它有什么好处?修饰方法和修饰变量有什么区别?本文将就java中static关键字的使用方法及注意事项进行 ...
- java:构造方法:无参构造/有参构造 this static关键字 静态变量 静态方法 代码块 封装 静态常量。
/*构造方法是一种特殊的方法,专门用于构造/实例化对象,形式:[修饰符] 类名(){ }构造方法根据是否有参数分为无参构造和有参构造*/public class Dog { ...
- C:static 关键字、静态变量、跨类访问数据
static 在OC中的使用 参考1 参考2 参考3 参保4 参考5 跨类访问成员 参考 +号方法就是类方法(静态方法),说明不用创建对象,可以直接通过类型去直接调用这个方法,在OC ...
- java——方法重载与重写、构造方法、this关键字、static关键字、strictfp关键字、类的导入
Java SE5新增加@Override注解,它并不是关键字,但是可以把它当作关键字使用.当你想要覆写(重写)某个方法时,可以选择添加这个注解,在你不留心重载而并非覆写了该方法时,编译器就会生成一条错 ...
- this关键字、static关键字、block块、封装类以及继承、import、修饰符的初步了解
this关键字 定义 在类的方法定义中使用this关键字代表使用该方法的引用. this即"自己",代表对象本身,谁调用代表谁.在成员方法中或构造器中隐式的传递. this的两种用 ...
- 你真的了解JAVA中对象和类、this、super和static关键字吗
作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 目录 Java对象究竟是什么? 创建对象的过程 ...
随机推荐
- 使用Selenium+ChromeDriver登录微博并且获取cookie
using OpenQA.Selenium;using OpenQA.Selenium.Chrome; public class GetSinaCookie { private static stri ...
- Jmeter性能测试之进阶Java request的使用
在IDE中引用Jmeter的安装目录lib/ext中两个文件ApacheJMeter_core.jar和ApacheJMeter_java.jar Java request的类需要继承Abstract ...
- C#学习-接口的成员
在接口中定义方法不能添加任何访问修饰符,因为接口中的方法是默认为public,如果显式地指定了修饰符,则会出现编译时错误. 定义玩接口之后,如果有类想继承该接口,则它必须显示接口中定义的所有方法. 在 ...
- Valgrind与内存问题
1 简介 "Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具.Valgrind这个名字取自北欧神话中英灵殿的入口. Valgrind的最初作者是Julian Sew ...
- SQL反模式学习笔记22 伪键洁癖,整理数据
目标:整理数据,使不连续的主键Id数据记录变的连续. 反模式:填充断档的数据空缺. 1.不按照顺序分配编号 在插入新行时,通过遍历表,找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键 ...
- Java线程池实现原理之自定义线程池(一)
1.队列的概念 谈到多线程先讲下队列的概念,之后的多线程学习会用到此类知识. 队列分为:阻塞式队列(有界).非阻塞式队列(无界),遵循着先进先出.后进后出的原则.阻塞队列与非阻塞队列区别: 1.非阻塞 ...
- 在VS2010上安装MVC4(webApi)
我们安装的VS2010上是没有MVC4或者WebApi的,要想加入这些功能只能自己在网上下载安装. 要安装MVC4,首先得安装VS10sp(Service Package)1,然后再安装MVC4.安装 ...
- 最优装载—dp
最优装载—dp 动态规划 一 问题描述 二 问题分析 三 代码实现 package dp_Loading; import java.io.BufferedWriter; import java.io. ...
- [Caffe]Win10+VS2015+CUDA8.0+cudnn5.1环境配置
百度:win10 caffe vs2015 编译caffe.sln工程参见->这里 caffe训练参见->这里 参见->这里 Windows+VS2013爆详细Caffe编译安装教程
- 项目部署到tomcat
准备工作 第一步 准备项目部署文件 准备项目中使用的数据库.sql文件. 准备项目程序(整个项目的war包文件) 第二步 安装运行环境 依次安装JDK.TOMCAT.MYSQL NAVICAT需要注意 ...