java 基础回顾1
整理----加自己理解------网上参考-----
java封装理念
一 概念:
隐藏对象的属性和实现细节,仅供对外提供公共访问方式。
二 好处
1) 将变量隔离
2) 便于使用
3) 提高重用性
4) 提高安全原则
三 使用原则
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,仅公共方法可访问。
四 使用实例
public class Person { private int age; public void setAge(int Age){ if(Age>0&& Age<130){ // age=age;局部变量与成员变量同名,所以这两的两个age都为局部的 //函数默认现在局部中找变量,然后再成员定义中找,,, age=Age; speck(); } else System.out.println("你输入的年龄有问题"); } public int getAge(){ return age; } public void speck(){ System.out .println("age="+age); } } public class PersonDo{ public static void main(String args[]){ Person a= new Person(); Person b= new Person(); a.setAge(20); b.setAge(-20); } } 这里age私有化后,类以外的方法将无法访问age 只能用这个类中其他共有的方法来访问它,如setAge/getAge等 值得注意的一点是;私有是封装的一种表现形式而已。 通过-20可知可以在对外提供的访问方式中进行逻辑判断,以增强程序的健壮性。
Java构造函数
特点
1函数名与类名相同
2不用定义返回值类型
3不可写return语句
(5可私有化)
4 一个类中可定义多个够构造函数(构造函数的重载)
作用
1 建立一个对象就会调用与之对应的构造函数
2 可用于对对象进行初始化
当类中定义了构造函数后默认的构造函数就没有了
注意:
当在类中遇到
{
System.out.println(“dddfdfdf”);
Speck();
}
称作构造代码块
作用:
1给对象初始化
2对象一建立就运行,优先于构造函数
与构造函数区别
给所有统一初始化
Java中的This
*可用来区分局部变量与成员变量
*当定义类的功能时,该函数内部要用到调用该函数的对象时没用this
*本类内部使用了本类对象
图,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
*构造函数调用别的构造函数,一般不允许互相调用
图-------------------------------------
如上面程序中的的age 若在传参位置定义int age 这个age若要去成员区分
可表示为this.age=age;
1 首先他表示某个对象
2 只能出现在实例方法中,不能出现在类方法中
//实例方法不加关键字static,类方法则有static
3 默认格式this.成员变量
4 实例
class A{
int x;
static int y;
void f() {
this.x=100;//this表示使用x的当前对象(上面的a对象),当有对象调用方法f时,就将100赋值给当前对象的变量x.
A.Y=200; //静态成员变量只能有类名来应用。
}
}
当一个对象调用方法时,方法中的实例成员变量就是指分配给该对象的实例成员,所以通常省略this(上述speck方法中可在age前加this,speck也可加this)
static变量则和其他对象共享 所以通常在实例方法中省略类名如这里的A
值得注意的是:当局部变量名和实例成员变量名相同时 this和类名就不能省略
另外this不能出现在类方法中是应为,类方法可以通过类名直接调用,这时可能还没有任何对象产生
***************this代表所在函数所在对象的应用************
***************即:那个对象访问this 所在的方法,this就代表那个对象*****
Static关键字
用法:用与修饰成员变量,和成员函数(称静态变量/静态方法或类变量/类方法)
一些对象所共性的值,如中国人的国籍,可以定义为static(static String contruy = “中国”;)
(反之特有的特性及一些方法随对象存储。(称实例变量/方法叫实例方法)(String name ;))
定以后除了可被对象调用外,还可直接被类名调用
静态修饰的内容被对象所共享,不用再每个对象创建时都建立一个,只创建一次被其他对象共用。并且在内存中单独有他的空间方法区中(方法区中有方法,和一些数据),而不是在随每个对象放在对应的堆内存中。
static特点总结:
1) 随着类的加载而加载
类的消失而消失
2) 优先于对象存在
3) 被所有对象所共享
4) 可直接被类名所调用
注意
1)静态方法只能访问静态成员变量,静态成员函数。且静态方法中不能出现this,super等关键字(因为静态优先与对象存在,所以不能有this(this代表..对象),)
2 )非静态方法可访问静态成员、静态方法。当然也可访问非静态成员和方法。
Static优点
3)可以发现主入口函数是静态的
对于对象间共享的数据进行单独的存储,节省空间,没有必要为每个对象都存储一份
static缺点:
生命周期过长。访问出现限制,静态只能访问静态。
Static 何时使用
1) 静态变量,上面提到的共享数据时
2) 静态方法,当方法内部没有用到类中的非静态成员时
3) 每个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用。
4) 图 密码,,,,,,,,,,,,,,
静态代码块
特点:随着类的加载而加载,用于给类进行初始化
结构
Static
{要初始化的内容}
Main主函数
是一个特殊的函数,是程序入口,被jvm(虚拟机)调用。
定义
1) public 代表访问权限最大
2) static 说明主函数随着类的加载已经存在了
3) void 主函数没有具体的返回值
4) main不是关键字 但是一个特殊的单词,可被jvm识别
5) (String [] args)函数的参数,参数类型是一个数组,数组中的元素师字符串。即字符串类型的数组。只有args可改
6) 主函数是固定类型的:被jvm识别
7) 可被重载
8) Jvm 在调用主函数时插入的是new String[0];
结构;Public static void main(String args[]){ }
单例1 饿汉式
决绝一个类在内存只存在一个对象.
那么如何确保唯一性呢
1) 为了避免其他程序过多的建立该类对象,先禁止其他程序建立该类对象。
2) 为了你他程序可以访问到该类对象,只好在本类中定义一个对象。
3) 为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
代码实现
1) 将构造函数私有化
2) 在类中创建一个本类对象
3) 提供一个方法可以获取该对象
实例
class single{
private int num;
public void setNum(int num)
{ this.num = num;}
public int getNum()
{return num;}
private single(){}//私有化构造函数
private static single s= new single();//创建本类对象
//对外提供方法,获取这个本类对象
public static single getInstance(){
return s;
}
}
class singleDo{
public static void main(String [] args) {
single s1 =single.getInstance();
single s2 =single.getinstance();
s1.setNum(39);
System.out.println(s2.getNum());
}
}
//结果:39
可见s1与s2指的是同一个对象
单例二 懒汉式
只需对上述类最如下修改
private static single s=null;
private single(){}
public static single
getInstance(){
If(s==bull)
s=nuw single();
return s;
}
二者区别 :
单例1(饿汉)
饿汉:single类一进内存,就已创建好了对象
单例2
懒汉:single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象
开发一般用单例1饿汉式(安全)
单例2 当多个程序访问时容易产生多个对象,而不是一个对象,因此存在隐患。
所以单例2 懒汉:public
static synchronized single getInstance(){}
// synchronized,保证对象唯一性,上锁,进去一个访问 就不能进第二个,
//除非第一个访问结束。
java 基础回顾1的更多相关文章
- 四、Android学习第四天——JAVA基础回顾(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...
- 【Spring学习】【Java基础回顾-数据类型】
Java基础回顾过程中,之前对于Java相关基础知识都是从这个人的博客看一些,那边的内容看一下,觉得不够系统化,决定用xmind脑图的形式,将Java基础知识回顾的作为一个系列,当前正在做的会包含: ...
- Java基础回顾_第二部分_Java流程控制
Java基础回顾_第二部分 Java流程控制 Scanner对象(扫描器,捕获输入) import java.util.Scanner; public class Demo01 { public st ...
- Java基础回顾_第一部分
Java基础回顾 基本数据类型 数值类型 什么是字节? 位(bit):是计算机中数据的最小单位 字节(byte):是计算机中数据处理的基本单位,习惯上用大写字母B来表示 1 B = 8 bit 字符: ...
- 1、java基础回顾与加强
一. 基础回顾 1 集合 1.1 集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, ...
- Java基础回顾
学习基础背景:Acmer.有C/C++基础 以[Java语言程序设计(基础篇)]第10版为参考(感谢YJJ的推荐),列出部分知识点,注意思考背后的原因和好处坏处. [14-16章——关于可视化编程的章 ...
- java基础回顾(2)
java中只有两种类型:基础类型.引用类型 8中基本类型:byte short int long float double char boolean,其中byte类型取值范围[-2^7~2^7-1] ...
- java基础回顾之IO
Java的IO 是Java运用重要部分之一,涉及到的内容也比较多,容易混淆,一段时间不用,可能就会遗忘,要时常回顾记忆一下: (图片来源于网络) Java 流在处理上分为字符流和字节流. 字符流处理的 ...
- Java基础回顾一
1.JDK和JRE的区别: JDK:java开发工具包,提供java的开发环境和运行环境 JRE:java运行环境,为java的运行提供所需要的环境 2. ==和qruals的区别: == 基本类型: ...
- 输出 n=6 的三角数字阵(JAVA基础回顾)
package itcast.feng; import java.util.Scanner; //需求:输出 n=6 的三角数字阵 //1 //2 3 //4 5 6 //7 8 9 10 //11 ...
随机推荐
- python实现字符串之间的映射
类似于凯撒密码一样的加密 # *-* coding=utf-8 *-* import string intab = string.lowercase outtab = 'qwertyuiopasdfg ...
- [TS-A1489][2013中国国家集训队第二次作业]抽奖[概率dp]
概率dp第一题,开始根本没搞懂,后来看了09年汤可因论文才基本搞懂,关键就是递推的时候做差比较一下,考虑新加入的情况对期望值的贡献,然后推推公式(好像还是不太会推qaq...) #include &l ...
- [cf 599D] Spongebob and Squares
据题意: $K=\sum\limits_{i=0}^{n-1}(n-i)*(m-i)$ $K=n^2m-(n+m)\sum{i}+\sum{i^2}$ 展开化简 $m=(6k-n+n^3)/(3n^2 ...
- Spring MVC-集成(Integration)-生成RSS源示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_rss_feed.htm 说明:示例基于Spring MVC 4.1.6. 以下示 ...
- Unique Paths I,II
题目来自于:https://leetcode.com/problems/unique-paths/ :https://leetcode.com/problems/unique-paths-ii/ A ...
- LinkedHashMap源代码阅读
LinkedHashMap LinkedHashMap内部採用了散列表和链表实现Map接口,并能够保证迭代的顺序,和HashMap不同,其内部维护一个指向全部元素的双向链表,其决定了遍历的顺序,一般是 ...
- jsp页面中使用javascript获取后台放在request或session中的值
在JSP页面中.常常使用javascript,可是要出javascript获取存储在request,session, application中的值.例如以下是获取request中的值: 如果后台中有: ...
- iOS开发网络篇之Web Service和XML数据解析
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- KMP字符匹配算法
上个假期就学了KMP,但是基本不用,所以忘干净了...这个的核心思想就是next数组,next数组学名叫最长相同前缀后缀.还不错的算法,KMP 匹配的过程中比原来的暴力匹配多了一个跳来跳去的next. ...
- 8.19noip模拟题
2017 8.19 NOIP模拟赛 by coolyangzc 共3道题目,时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c/pas ...