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 程 ...
随机推荐
- log4j2动态修改日志级别及拓展性使用
一.供参考的完整日志配置 <?xml version="1.0" encoding="UTF-8"?> <!-- 配置LoggerConfig ...
- Java基础反射(二)
原文地址http://blog.csdn.net/sinat_38259539/article/details/71799078 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Cla ...
- 牛客国庆集训派对Day5 Solution
A 璀璨光滑 留坑. B 电音之王 蒙特马利大数乘模运算 #include <bits/stdc++.h> using namespace std; typedef long ...
- 【4】Python对象
本章主题 Python对象 内建类型 标准类型操作符 值的比较 对象身份比较 布尔类型 标准类型内建函数 标准类型总览 各种类型 不支持的类型 Python对象 Python使用 ...
- 2017-2018-2 20165207 实验三《敏捷开发与XP实践》实验报告
java 实验三 实验报告 实验内容 代码规范 不规范的代码可能妨碍阅读,在粘贴下来老师在云班课中设置的提交点一的代码之后,我首先使用了IDEA中Code选项卡的Reformat Code功能规范代码 ...
- windows 系统相关配置
1. 外接显示器分辨率调节:连接上外接下显示器,在本机空白处,右键,分辨率.然后选择显示器,设置显示相关配置. 详见:http://zhidao.baidu.com/question/13494806 ...
- 20155201 实验二《Java面向对象程序设计》实验报告
20155201 实验二<Java面向对象程序设计>实验报告 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. ...
- [微信开发] - weixin4j获取网页授权后的code进而获取用户信息
weixin4j封装好的SnsComponent组件中的方法可以执行该步骤 WeixinUserInfoController : package com.baigehuidi.demo.control ...
- Redis之hash数据结构实现
参考 https://www.cnblogs.com/ourroad/p/4891648.html https://blog.csdn.net/hjkl950217/article/details/7 ...
- PHP中__autoload()与spl_autoload_register()函数的用法与区别
_autoload() 函数在PHP文档中的解释是试图使用尚未被定义的类时自动调用.通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类. 如何理解这句话,我们首先看下面一个简单 ...