构造方法

Java-封装-构造器

我与影子孤独终老i 提交于 2020-01-18 09:31:29
目录 封装 构造器 属性赋值的先后顺序 this使用 this的基本使用 this调用构造器 package import 封装 封装 与 隐藏是面向对象的特性之一。 程序追求的是高内聚, 低耦合。 封装的作用: 隐藏内部的复杂性;只公开简单的接口;方便调用;从而提高可用性,扩展性;通俗的说就是隐藏该隐藏的, 暴露该暴露的。这就是封装的思想。 在对象的属性赋值的时候, 除了属性的数据类型,存储范围之外, 实际中还需要加上别的限制条件,但是又不能在声明属性的时候设置, 需要通过方法进行限制条件的添加。比如,setNama() 这样的方法 进行设置。 避免用户使用对象.属性的方式设置属性, 需要将属性设置修饰权限, private等方式。 这就体现了封装性。 封装性的体现: 将属性XXX私有化,设置为private,再通过公共的方法(public)获取(getXXX)该属性和设置(setXXX)该属性。 不对外暴露私有的方法 单例模式 封装性的体现需要权限修饰符。 权限修饰符是置于类成员属性之前的,用于限制对象对成员属性的访问权限。 4种权限可以修饰属性,方法, 构造器,内部类。 修饰符 类内部 同一个包 不同包的子类 同一个工程 private 可用 缺省(default) 可用 可用 protected 可用 可用 可用 public 可用 可用 可用 可用

Java 代码块与代码加载顺序

荒凉一梦 提交于 2020-01-18 07:22:45
本文首先介绍几个基本的名次,然后介绍了三种代码块的特性和使用方法。 在面试大型公司时,如果遇到大型国企或者大的互联网私企,笔试中经常遇到代码块和代码加载顺序的笔试题。这里做一个总结,也方便各位小伙伴飙车不会飘。 名词解释 代码块 由 { } 包起来的代码,称为代码块 静态代码块 由 static { } 包起来的代码,称为静态代码块。 不同类型变量定义示例: class Demo{ String x;// 非静态成员变量,又称为属性,对该类不同的对象来说,属性互不相同 static int y = 32;// 类变量,一个类中只有一个该变量,该类不同的对象共享同一个静态成员变量 public static void main(String[] args){ int z = 0;// 局部变量,只在方法内部可见,在方法结束后由垃圾收集器自动回收 } } 局部代码块 位置:局部位置(方法内部)。 作用:限定变量的生命周期,尽早释放,节约内存。 调用:调用其所在的方法时执行。 方法中的局部代码块一般进行一次性地调用,调用完立刻释放空间,避免在接下来的调用过程中占用栈空间。栈空间内存有限,方法调用可能会生成很多局部变量导致栈内存不足,使用局部代码块可以避免此缺陷。 public class 局部代码块 {    public static void go() { // 局部代码块 {

小白架构师成长之路11-IOC容器设计概念和源码分析

与世无争的帅哥 提交于 2020-01-18 02:11:18
IOC核心理论回顾 大家如果不想自己写可以从gitHub下载下来自己看一下 地址:https://github.com/JolyouLu/Spring-study.git 代码在Spring-IOC下 IOC理论概要 在没有ioc之前我们的调用对象之前我们都需要对对象进行创建,创建对象的方式有以下几种 类别 描述 时间点 构造方法传入 创建引用对象时 外部传入 属性设置传入 设置对象状态时 运行时做为参数传入 调用时 属性中直接创建 创建引用对象时 内部创建 初始化方法创建 创建引用对象时 运行时动态创建 调用时 假设我们现在用A、B两个对来解释以上6种 构造方法传入:创建A对象时,把B对象传入 属性设置传入:给A对象设置一个属性,为B对象 运行时做为参数传入:调用A的某一个方法时把B对象传进去 属性中直接创建:直接在A对象的属性中new一个B对象 初始化方法创建:在构造方法中new一个B对象 运行时动态创建:调用方法时new一个B对象 以上就是一些创建对象的方法,如果B对象是一个非常普通的对象,那我们new的时候并且不会觉得他很复杂,但是如果你要创建的的是一个有复杂依赖的service对象,这时你需要在不同的时机插件不同的对象,引用会变的很复杂,我们管理起来也会很麻烦,刚刚好spring的IOC就为我们做好了这些工作

IO流

北城以北 提交于 2020-01-17 13:32:45
一、概念介绍 1、什么是IO流? I: InputStream,输入,读取,从硬盘到内存,读进来 O: Output,输出,写入,从内存到硬盘,写出去 2、IO流的分类 (1)按照流的方向: 输入流:字节输入流/字符输入流 输出流:字节输出流/字符输出流 (2)按照流中的内容 字节流:计算机中的一切都是字节,可以一次操作一个/多个字节,可以操作任意类型的文件。 字符流:只能操作纯文本文件,用记事本打开,可以看得懂的文件。 (PS:.java、.txt、.html、.css 是纯文本文件;.doc、.xls不是纯文本文件) 3、文件的续写与换行 (1)文件的续写 构造方法: FileOutputStream(File path, boolean append) FileOutputStream(String path, boolean append) 其中, 参数一:String/File类型的文件路径; 参数二:boolean append(true就是追加写入,继续写;false就是重新写,覆盖写。不写默认为false)。 (2)换行 \r\n 适用于Windows系统,每行结尾是“回车+换行”; \n 适用于Unix系统里,每行结尾只有“换行”; \r 适用于Mac系统,每行结尾是“回车”,即 “\r” 。从 Mac OS X 开始与Linux统一。 二、IO流 1、字节流 1

构造方法调用和内存图解

半城伤御伤魂 提交于 2020-01-17 12:08:46
构造方法是怎么执行的呢?在创建对象的时候是如何初始化的呢? 构造方法是专门用来创建对象的,也就是在new对象时要调用构造方法。现在来看看如何调用构造方法。 class Person { // Person 的成员属性 age 和 name private int age ; private String name ; // Person 的构造方法,拥有参数列表 public Person( int a, String nm) { // 接受到创建对象时传递进来的值,将值赋给成员属性 age = a; name = nm; } public void speak() { System. out .println( "name=" + name + ",age=" + age ); } } class PersonDemo { public static void main(String[] args) { // 创建 Person 对象,并明确对象的年龄和姓名 Person p2 = new Person(23, " 张三 " ); p2.speak(); } } 上述代码演示了创建对象时构造方法的调用。即在创建对象时,会调用与参数列表对应的构造方法。 上述代码的图解: 图解说明: 首先会将main方法压入栈中,执行main方法中的 new Person(23," 张三 ");

《Java技术》第二次作业

别说谁变了你拦得住时间么 提交于 2020-01-17 09:25:26
(一)学习总结 1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么? public class Test { public static void main(String args[]) { Foo obj = new Foo(); } } class Foo{ int value; public Foo(int intValue){ value = intValue; } } 构造方法是一个与类名相同且没有返回值类型的方法,对象的创建都是通过构造方法完成的,主要功能是完成对象的初始化。构造方法的重载就是方法名相同,而参数个数和类型不同,调用时,会自动相应的构造方法。不能通过编译,因为程序中是有一个参数的构造方法,主方法中调用的是无参的构造方法,所以不能实现。一个类中必定存在构造方法,如果没有明确的声明时,系统会自动生成一个无参的构造方法,如果已经明确的声明了一个构造方法,那么程序在编译时就不会再生成默认的构造方法。 2.运行下列程序,结果是什么?分析原因,应如何修改。 public class Test { public static void main(String[] args) { MyClass[] arr=new MyClass[3]; arr[1].value=100; } } class MyClass{ public int value

《Java技术》第二次作业--面向对象基础

梦想与她 提交于 2020-01-17 09:25:10
(一)学习总结 1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么? public class Test { public static void main(String args[]) { Foo obj = new Foo(); } } class Foo{ int value; public Foo(int intValue){ value = intValue; } } 构造方法:没有返回值,名字与类名相同,当创建对象时会调用构造方法(如果没有写构造方法,那么编译器会自动添加无参构造方法); 构造方法的重载:当有多个构造方法时(无参,有参,以及参数不同的多种构造方法)会用到构造方法的重载; 该程序不能通过编译。因为定义了有参的构造方法,在编译时编译器不会再自动创建无参构造方法,而在调用构造方法时却又想调用无参构造方法; 解决办法:手动创建无参构造方法。 2.运行下列程序,结果是什么?分析原因,应如何修改。 public class Test { public static void main(String[] args) { MyClass[] arr=new MyClass[3]; arr[1].value=100; } } class MyClass{ public int value=1; } 结果:运行错误; 原因

@Inject 注解初识

被刻印的时光 ゝ 提交于 2020-01-16 20:20:23
注解以前学习Java的时候也学过,是在学习Spring的时候,但是@Inject 注解还真是头一次见乘着休息时间赶紧学习一下。正好手里有有本书《Java程序员修炼之道》,书中对@Inject 注解讲解的比较清楚,所以来和大家分享一下。 @Inject 注解可以出现在三种类成员之前,表示该成员需要注入依赖项。按运行时的处理顺序这三种成员类型是: (1)构造方法 (2)方法 (3)属性 在构造方法上使用 @Inject 时,其参数在运行时由配置好的IoC容器提供。比如,在下面的代码中,运行时调用MurmurMessage类的构造方法时,IoC 容器会注入其参数 Header 和Content 对象。 @Inject public MurmurMessage(Header header, Content content) { this.headr = header; this.content = content; } 规范中规定向构造方法注入的参数数量是0个或多个,所以在不含参数的构造方法上使用 @Inject 注解也是合法的。(注意:因为JRE无法决定构造方法注入的优先级,所以规范中规定类中只能有一个构造方法带@Inject注解) 也可以用@Inject注解方法,与构造方法一样,运行时可注入的参数数量为0个或多个。但使用参数注入的方法不能声明为抽象方法也不能声明其自身的类型参数

深入理解 Java 方法

主宰稳场 提交于 2020-01-16 15:22:29
目录   1. 方法的使用   2. 方法参数   3. 方法修饰符   4. 特殊方法   5. 覆写和重载   6. 小结   7. 参考资料 方法(有的人喜欢叫函数)是一段可重用的代码段。 📓 本文已归档到:「 javacore 」 🔁 本文中的示例代码已归档到:「 javacore 」 1. 方法的使用 1.1. 方法定义 方法定义语法格式: [修饰符] 返回值类型 方法名([参数类型 参数名]){ ... 方法体 ... return 返回值; } 示例: public static void main(String[] args) { System.out.println("Hello World"); } 方法包含一个方法头和一个方法体。下面是一个方法的所有部分: 修饰符 - 修饰符是可选的,它告诉编译器如何调用该方法。定义了该方法的访问类型。 返回值类型 - 返回值类型表示方法执行结束后,返回结果的数据类型。如果没有返回值,应设为 void。 方法名 - 是方法的实际名称。方法名和参数表共同构成方法签名。 参数类型 - 参数像是一个占位符。当方法被调用时,传递值给参数。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。 方法体 - 方法体包含具体的语句,定义该方法的功能。 return - 必须返回声明方法时返回值类型相同的数据类型

this关键字的简单使用

跟風遠走 提交于 2020-01-16 09:27:13
在Java中this可以完成三件事情: 表示本类属性、表示本类方法、当前对象 。 1.表示本类属性 public class Student{ String name; //成员变量 public void getName(String name){ this.name=name; //将传进来的形参name赋值给成员变量name } } this.name代表的就是对象中的成员变量,而后面的name则是方法的形式参数(局部变量),this.name=name就是将形式参数的值传递给成员变量。 class Person { private String name ; private int age ; public Person(String n,int a) { name = n ; //此时形参名字和成员变量名字不同,但初始化成员变量,传进来的形参 age = a ; //名字最好是与成员变量一致(直观) } public String getInfo() { return "姓名:" + name + ",年龄:" + age ; } } public class TestDemo { public static void main(String args[]) { Person per = new Person("张三",20) ; System.out.println