java基础第7天
Javabean的特点 私人成员变量 公共的成员方法 利用get/set成员方法对私人变量进行取值/赋值 构造方法(构造器) 构造方法(也叫构造器)是一种特殊的方法,定义的位置是在类中,成员方法外,和成员变量,成员方法是平级关系,定义构造方法和定义一般的成员方法很像,它的特点是与类同名,但是没有返回值,其语法格式如下:
修饰符构造方法名(形参列表)
例如:
自定义学生类,其中有一个空参的构造方法
class Student{
public Student(){
System.out.println("这是学生类的空参构造方法");
}
}
构造方法的重载
class Person{
private int id;
public Person(){} //空参构造方法
public Person(int a){ //重载构造方法,有一个int型参数
id = a; //在构造方法中对实例变量赋值
System.out.println("这是带有一个参数的构造方法");
}
public Person(int a,int b){
System.out.println("这是带有两个参数的构造方法");
}
}
构造方法需要注意的事项
方法名与类名相同 没有返回值 也不能使用void 默认的构造方法 定义一个类时,如果没有显示的定义构造方法,这时系统会默认给这个类加上一个无参的构造方法,并且构造方法里面没有任何语句。但一旦定义了构造方法,系统将不会默认再给类添加任何构造方法。
构造方法的使用 在程序中使用new关键字创建一个类的实例化对象的时候,就是去调用该类的相应的构造方法,此时应注意,根据构造方法的形参列表的不同来调用不同的构造方法,调用不存在的构造方法肯定编译报错
class TestDemo{
//Demo d = new Demo(); //error,没有这样的构造方法
Demo d = new Demo(10); //调用的是自定义的,有一个参数的构造方法
}
标准的Javabean练习
定义一个员工类,自己分析出几个成员,然后给出成员变量,构造方法,getXxx()/setXxx()方法,以及一个显示所有成员信息的方法。并测试。
public class Employee {
private String name;
private int age;
private String employeeId;
//构造空参
public Employee(){
System.out.println("this is a constructor");
}
//通过set/get方法获取成员变量并赋值
public void setName(String name){
this.name= name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
public void setEmployeeId(String employeeId){
this.employeeId=employeeId;
}
public String getEmployeeId(){
return employeeId;
}
//构造实参
public Employee(String name,int age,String employeeId){
this.name=name;
this.age=age;
this.employeeId=employeeId;
}
//定义展示方法
public void show(){
System.out.println(name +" "+age +" " + employeeId);
}
}
测试类
public class EmploeeTest {
public static void main(String[] args) {
Employee emp1 = new Employee();//调用空参对象
Employee emp = new Employee("Tom",24,"25663");//调用实参对象,传参
emp.show(); //打印结果
}
}
this关键字 在构造方法中引用该构造方法正在初始化的对象 在方法中引用正在调用该方法的对象 this关键字是用来指代当前对象的,而从上面的例子可以看到,在构造方法中可以使用this关键字,说明:构造方法被调用的时候,其实对象在堆内存中已经被创建出来了,而构造方法的主要功能就是对实例对象的变量进行初始化的。
static关键字 static的真正作用就是用于区分成员变量,方法,内部类,初始化块这四种成员是属于类本身还是属于这个类的实例。
在类定义中,static相当于一个标志,有static修饰的成员属于类本身,没有static修饰的成员属于该类的实例对象。
为了区分这两种不同的成员变量,凡是有static修饰的成员变量/成员方法,称为类变量/类方法,没有static修饰的成员变量/成员方法称为实例变量/实例方法(构造方法不属于实例方法)
static修饰类的成员变量和成员方法(即:类变量,类方法)
静态成员变量(类变量)属于类,可用类名或对象名两种方式进行访问
静态成员方法(类方法)属于类,可用类名或对象名两种方式进行访问
被static关键字修饰的部分,有如下特点
随着类的加载而加载
优先于对象存在(因为类的加载优先于对象的创建)
被类的所有实例对象共享(存在于方法区中的静态区,如果是一个类变量的话,任何一个对象对该变量进行修改,都会在其他对象中得到体现),这也是我们在定义一个类时,判断是否使用静态关键字的标准
可以通过类名访问(类名.静态变量名/类名.静态方法名),也可以使用对象名来访问,推荐使用类名调用,因为静态变量/方法是属于类的
什么时候使用static关键字?使用static关键字的标准
当一个变量或者方法属于一个类,而不是属于这个类的实例对象时,就可以使用static来修饰,这样就可以使用类名.成员(变量/方法)的方式访问这个static变量/方法。 所有这个类的实例对象都能看到对静态变量(类变量)的更改
static方法重点注意事项
静态方法(类方法)中不能使用this关键字,this关键字代表的是当前对象的引用,但是static关键字修饰的方法是属于类的,随着类的加载而存在,但当类进行加载时,此时实例对象还没有被创建出来,这时是无法使用this关键字的 静态方法只能访问静态成员变量和静态成员方法 静态变量和实例变量的区别
所属
内存位置
出现时间
调用
静态变量
类
方法区的静态区
随类加载而加载
类名调用,对象名调用
实例变量
对象
堆内存
随对象创建而存在
对象名调用
实例变量和局部变量的区别
声明位置
内存位置
生命周期
初始值
局部变量
方法内,形参上
栈内存
随方法调用而存在
必须先定义,赋值再使用
实例变量
类内,方法外
堆内存
随对象创建而存在
有默认初始值
main方法是静态的 public static void main(String[] args) {} public 被jvm调用,访问权限足够大。 static 被jvm调用,不用创建对象,直接类名访问 void被jvm调用,不需要给jvm返回值 main 一个通用的名称,虽然不是关键字,但是被jvm识别 String[] args 以前用于接收键盘录入的 练习案例
猜数字小游戏(数据在1-100之间) 分析: A:程序产生一个随机数。(被猜的) B:键盘录入数据。(你猜的) C:把你猜的和被猜的进行比较 a:大了 b:小了 c:猜中了 D:给出多次猜的机会,猜中就结束。
import java.util.Scanner;
public class RandoTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int b = (int)(Math.random()*100-1);
while(true){
System.out.println("请输入一个数字");
int a = input.nextInt();
if(a > b){
System.out.println("大了");
}else if(a < b){
System.out.println("小了");
}else if(a > 100 && a < 1){
System.out.println("输入错误");
}else{
System.out.println("猜对了");
break;
}
}
}
}
代码块 代码块 在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块
局部代码块 在方法中出现,直接用{}括起来的部分,就是局部代码块 作用:限定变量生命周期,及早释放,提高内存利用率
构造代码块(也叫初始化块) 在类中,方法外出现;多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行,若多个构造代码块,则他们之间是顺序执行 作用:抽取构造方法中相同的部分,提高利用率
静态代码块 在类中,方法外出现,加了static修饰的{},或者可以理解成,加了static修饰的构造代码块 作用:给类进行初始化(类变量的初始化),在加载的时候就执行,并且只执行一次
代码块的作用
静态代码块是对类进行初始化的(主要是对类变量/静态变量进行初始化) 构造代码块和构造方法主要是对实例对象进行初始化的 局部代码块是用来规定变量的作用范围,提高内存使用效率,节省空间的 面试题 看代码说结果
java基础第7天的更多相关文章
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- 【JAVA面试题系列一】面试题总汇--JAVA基础部分
JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...
- 最适合作为Java基础面试题之Singleton模式
看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...
- java基础练习 字符串,控制流,日历,日期等
1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...
- Java基础知识【下】( 转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- Java基础知识【上】(转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- java基础学习03(java基础程序设计)
java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...
- Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)
线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
随机推荐
- 201-React顶级API
一.概述 React是React库的入口点.如果您从<script>标记加载React,则这些顶级API可在React全局中使用.如果你使用npm的ES6,你可以写:import Reac ...
- PAT 1060 Are They Equal[难][科学记数法]
1060 Are They Equal(25 分) If a machine can save only 3 significant digits, the float numbers 12300 a ...
- Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, ...
使用oracle数据库一个多月依赖这问题一直都得不到解决,最近任务不是很忙了,所以决定把这问题解决掉.写一篇文章做记录. 以上错误主要是net程序oracle数据库使用了Microsoft Enter ...
- Kylo 入坑记
一.概述 Kylo,作为一个基于 Spark 和 NiFi 的开源数据湖编排框架,解决对数据湖获取.治理.感知和技术支持等诸多问题.Kylo 将数据湖的很多功能自动化,包括数据接入.准备.分析发现.P ...
- 解决margin重叠的问题
margin重叠有两种情况: 1.兄弟级的垂直块之间,margin这个属性上下边距,会发生重叠的情况 解决办法:float浮动或display:inline-block 2 .父子级的块之间,子级的上 ...
- Net Quartz使用
安装Quartz 已经先安装了2.5版本,现在换成2.4 程序包管理器控制台: PM> Install-Package Quartz -Version 2.4 正在尝试收集与目标为“.NETFr ...
- Asp.net下拉树实现(Easy UI ComboTree)
场景描述:某个公司有多个部门并且部门存在子部门,通过一个下拉框选取多个部门,但是如果某个部门的子部门被全部选择,则只取该部门,而忽略子部门.(叶子节点全被选中时,只取父节点) 知识点:ComboTre ...
- Python学习札记(二十七) 函数式编程8 偏函数
偏函数 NOTE 1.int()函数提供额外的base参数,默认值为10.如果传入base参数,就可以做N进制的转换: #!/usr/bin/env python3 import functools ...
- 利用HTML中map标签实现整张图片带有可点击区域的图像映射:
实现效果说明:一整张背景图片,实现图标区域出现链接,可点击跳转到指定页面. <div class="brand"> <img src="images/b ...
- Yii关键概念
basic/ 应用根目录 composer.json Composer 配置文件, 描述包信息 config/ 包含应用配置及其它配置 console.php 控制台应用配置信息 web.php We ...