构造方法

什么是反射机制?

删除回忆录丶 提交于 2020-01-23 13:30:09
定义 反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许其对内部成员进行操作。由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的灵活性,但是不恰当地使用反射机制,也会严重影响系统的性能。 具体而言,反射机制的主要功能主要有:①得到一个对象所属的类,②获取一个类的所有成员变量和方法,③在运行时创建对象,调用对象的方法。 反射机制的作用: 1,反编译:.class–>.java 2,通过反射机制访问java对象的属性,方法,构造方法等; 先看一下sun为我们提供了那些反射机制中的类: java.lang.Class; java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier; 很多反射中的方法,属性等操作我们可以从这四个类中查询。还是哪句话要学着不断的查询API,那才是我们最好的老师。 Class c=Class.forName(“Employee”); Object o=c.newInstance(); 调用了Employee的无参数构造方法 方法关键字 getDeclareMethods() 获得所有的方法 getReturnType() 获得方法的返回类型

Java Day10 小结

和自甴很熟 提交于 2020-01-23 05:55:02
Java Day10 小结 查漏补缺: 1.形式参数的研究对象: 数组,类(具体类),借口 2.局部变量和成员变量的区别: 1)内存位置不同; 局部变量:堆 成员变量:栈 2)生命周期不同; 局部变量:随方法的调用存在/消失 成员变量:随对象的创建存在/消失 3)位置不同: 局部变量:定义在方法上或者方法中 成员变量:定义在方法外 4)初始化不同: 局部变量:使用前必须初始化 成员变量:系统会默认初始化,可以不赋值 3.封装:将属性的细节隐藏(私有化),堆外提供公共的访问方法 今日内容: 一.构造 1.概念:a)方法名和类名一致 b)没有具体返回值 c)连void也没有 2.作用:给有参数/无参数 对象进行赋值 重点:3.创建一个对象做了那些事: Student s = new Student(); 做了哪些事情?(前三点即可) 1)在栈内存中开辟空间 2)在堆内存中申请空间 3)系统对数据进行默认初始化 4)数据的显示初始化 5)构造方法进行数据的初始化 6)初始化完毕,在堆内存空间产生一个地址值 7)将地址值赋值给栈内存,从而指向堆内存空间 重点–注:没提供无参构造方法,系统会默认提供,建议写在标准类的时候,永远给出无参构造 二.标准类 1.成员:成员变量,构造方法,成员方法 Eg:class Teather { private String name; private int

单例设计模式

二次信任 提交于 2020-01-23 05:01:24
对所有的Java开发者而言,所有项目中最为常见的三个设计模式:工厂设计模式、代理设计模式、单例设计模式。 单例设计模式: 如果一个类中定义有普通方法,那么这些普通方法一定要通过本类的实例化对象你才可以调用。 传统调用: class Single{ public void print(){ System.out.println("单身"); }}class TestDemo{ public static void main(String arg[]){ Single single = new Single(); single.print(); }}运行结果:单身 在本程序中Single是一个普通的类,由于本类并没有进行任何构造方法的定义,所以这个类中会自动生成一个无参的、什么都不做的的构造方法,正是因为如此,我们可以在外部进行无参构造的调用。 但现在相对Single 类做一个修改: class Single{ private Single(){} public void print(){ System.out.println("单身"); }}class TestDemo{ public static void main(String arg[]){ Single single= null; single = new Single(); single.print(); }} 运行结果

《JavaEE》第七周day3学习笔记-IO流2

别说谁变了你拦得住时间么 提交于 2020-01-23 03:24:15
一、缓冲流 是字节流和字符流的增强类,包含BufferedInputStream、BufferedOutputStream 、BufferedReader、BufferedWriter,相比于原始流,缓冲流增加了缓冲区的概念,通过将文件部分加载至内存缓冲区,达到减少文件I/O的目的,提高程序效率。 Tip (JDK1.7+)IO流语句可以放置于try(){}catch(){}的try括弧中,在try语句块结束后自动关闭流。 (一)字节缓冲流 缓冲区大小:private static int DEFAULT_BUFFER_SIZE = 8192; public BufferedInputStream ( InputStream in ) 创建字节输入缓冲流 public BufferedOutputStream ( OutputStream out ) 创建字节输出缓冲流 (二)字符缓冲流 public BufferedReader ( Reader in ) 创建字符输入缓冲流 public BufferedWriter ( Writer out ) 创建字符输出缓冲流 特殊方法 BufferedReader: public String readLine ( ) 读取一行字符串 BufferedWriter: public void newLine ( ) 写入换行符号 二

javaweb-codereview 学习记录-4

有些话、适合烂在心里 提交于 2020-01-23 00:22:55
反射java.lang.Runtime 之前在p牛的知识星球中也学过反射机制调用Runtime来执行命令时需要用getruntime来返回Runtime类的实例,因为Runtime类设计是单例模式,并且该类的构造方法是私有的,因此无法直接通过newinstance来实例化该类,因此除了通过getRuntime来返回类的实例来调用该类的方法外,还可以通过反射直接获取该类的构造方法并且设置访问属性来实例化该类。 import sun.misc.IOUtils; import java.io.InputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class reflect_runtime { private static Object cmd="calc"; public static void main (String args[]) throws Exception { // 获取Runtime类对象 Class runtimeClass1 = Class.forName("java.lang.Runtime"); // 获取构造方法 Constructor constructor = runtimeClass1.getDeclaredConstructor

java继承

末鹿安然 提交于 2020-01-23 00:08:52
继承是面向对象的第二大主要特性,而继承性要解决的就是代码重用的问题,利用继承性可以从已有的类继续派生出新的子类,也可以利用子类扩展出更多的操作功能 继承问题的引出 通过以上两段代码的比较,如果按照之前所学习到的概念进行开发的话,那么程序之中就会出现重复代码,而通过分析也可以发现,从现实生活来讲,学生本来就属于人,但是学生所表示的范围要比人表示的范围更小,也更加的具。所以要想解决类似的问题,就只能依靠继承的概念来完成了 继承的实现 继承性严格来讲就是指扩充一个类已有的功能,可以使用如下的语法完成 Ø class 子类 extends 父类{} 对于以上格式有以下几点说明: Ø 对于extends而言,应该翻译为扩充,但是为了理解方便,统一称为继承; Ø 子类又被称为派生类; Ø 父类又被称为超类(Super Class)。 继承的基本实现 程序运行结果:姓名:张三,年龄:19 子类也可以扩总自己的方法 继承的限制 Ø 限制一:Java不允许多重继承,但是允许多层继承 Ø class A {} Ø class B {} Ø class C extends A,B {} // 一个子类继承了两个父类 Ø class A {} Ø class B extends A {} //B类继承A类 Ø class C extends B {} //C类继承B类 限制二

Java-类

帅比萌擦擦* 提交于 2020-01-22 16:33:46
类,对象 类中可以包含: 所有对象所共有的属性/特征--------成员变量 所有对象所共有的行为-------------方法 一个类可以创建多个对象 同一类型所创建的对象,结构相同,数据不同 类是对象的模板,对象是类的具体的实例 补充 同一个文件中可以包含多个类 public修饰的类只能有一个 public修饰的类的名称必须与文件名相同 类的构造方法 给成员变量赋初值 与类同名,没有返回值类型 在创建(new)对象时被自动调用 若自己没有定义构造方法,则默认一个无参构造方法; 若自己定义了构造方法,则不再默认提供 构造方法可以重载 class Student { String name ; //成员变量 int age ; String address ; Student ( ) { this ( "无名氏" , 1 , "未知" ) ; } Student ( String name ) { this ( name , 1 , "未知" ) ; //调用下面的构造方法 } Student ( String name , int age , String address ) { this . name = name ; this . age = age ; this . address = address ; } void study ( ) { System . out .

设计模式------单例模式

醉酒当歌 提交于 2020-01-22 12:45:38
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。 namespace DesignMode { class Singleton { private static Singleton instance; //私有化构造方法,防止外界通过new创建实例 private Singleton() { } public static Singleton GetInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } } 来源: CSDN 作者: 傻子是小傲娇 链接: https://blog.csdn.net/love_phoebe/article/details/104064684

对象的反序列化流_ObjectInputStream

此生再无相见时 提交于 2020-01-21 04:31:45
package com.learn.demo04.ObjectStream; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; /* java.io.ObjectInputStream extends InputStream ObjectInputStream:对象的反序列化流 作用:把文件中保存的对象,以流的方式读取出来使用 构造方法: ObjectInputStream(InputStream in) 创建从指定 InputStream 读取的 ObjectInputStream。 参数: InputStream in:字节输入流 特有的成员方法: Object readObject() 从 ObjectInputStream 读取对象。 使用步骤: 1.创建ObjectInputStream对象,构造方法中传递字节输入流 2.使用ObjectInputStream对象中的方法readObject读取保存对象的文件 3.释放资源 4.使用读取出来的对象(打印) readObject方法声明抛出了ClassNotFoundException(class文件找不到异常) 当不存在对象的class文件时抛出此异常 反序列化的前提: 1

Java基础学习总结07——封装

南笙酒味 提交于 2020-01-20 19:04:32
目录 为什么使用封装 封装的概念 什么是封装 封装的实现步骤 封装的具体实现 private关键字 四种访问权限修饰符 构造方法 为什么需要构造方法 构造方法的概念 this关键字 为什么使用this关键字 this关键字概念 调用属性及方法 友情链接 为什么使用封装 编写一个学生类,要求 : 具有属性:学号,姓名 ,年龄 具有行为:个人描述 要求:学生最大年龄为 25 岁,最小年龄为 3 岁; public class Student { public int stuNo;//学号 public String stuName;//姓名 public int stuAge;//年龄 //个人介绍 public void desc(){ System.out.println("大家好,我叫:"+stuName+",今年:"+stuAge+"岁," + "我的学号是:"+stuNo); } 编写测试类,要求: 实例化学生对象,并对属性赋值 调用个人介绍方法,在控制台输出 public static void main(String[] args) { //创建对象 Student stu=new Student(); //调用属性 stu.stuNo=10001; stu.stuAge=-100;//年龄不能是负数 stu.stuName="张三"; //调用方法 stu.desc()