黑马程序员-----java基础加强(一)_java怎么加强写好的方法-程序员宅基地

技术标签: 黑马程序员  java  string  constructor  integer  class  object  

---------------------- android培训java培训、期待与您交流!

 

     听张孝祥老师的课觉得他是一个为人和蔼,知识面丰富,不愧是软件行业的大哥!

 

Eclipse的使用技巧

1,MyEclipse 是Eclipse的插件,扩展了功能。

   软件运行时:javaw进程运行

 2.名词简写:

Java EE (Java Platform,Enterprise Edition) 企业级应用程序    ide(integrity development environment)集成开发环境

 jmsJava Message Service)Java消息服务    jmx( Java Management Extensions)Java管理扩展    

 jndiJava Naming and Directory Interface)Java命名和目录接口

3.workspace 工作间包含多个Project,

工作间的设置改变,工程也随之改变,工程也可以单独设置

4.Perspective (透视图)与view

Perspective:视图的集合

View:小窗口.通过windowàshow view显示

5.设置整个工程workspace的javac与java

Javac  PreferencesàCompiler

Java   PreferencesàInstalled jres

设置单个工程的javac与java

选择工程右击Preferences

6.快捷键:如:PreferencesàGeneral àKey: Content Assist内容提示

                     添加注释:ctrl+shift+/

 7.代码模版:设置:选中代码右击surround with

                添加:PreferencesàjavaàEditoràTemplates

 8.Jar包导入:选中项目右击Build path

 

静态导入:

import static 导入的是一个类中的某个静态方法或所有静态方法

 如:import static java.lang.Math.*;

 

override 重写(如果父类的方法是私有的,子类就不能重写这个方法)

 

可变参数与for循环增强

可变参数如:如:method(int x,int … args);

1,  只能出现在参数列表的最后

2,  …位于变量类型和变量名之间,前后有无空格都可以

3,  调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数

for循环增强

for(type 变量名:集合变量名){  … }

注意:1,迭代变量必须在()中定义

         2,集合变量可以是数组或实现了Iterable接口的集合类

 

基本数据类型的自动拆箱与装箱

自动装箱:Integer num1 = 12;

自动拆箱:System.out.println(num1 + 12);

基本数据类型的对象缓存:

Integer num1 = 12;

Integer num2 = 12;

System.out.println(num1 == num2);

 

Integer num3 = 129;

Integer num4 = 129;

System.out.println(num3 == num4);

 

Integer num5 = Integer.valueOf(12);

Integer num6 = Integer.valueOf(12);

System.out.println(num5 == num6);

 

享元设计模式 flyweight

有很多的小的对象,有相同的对象变成一个对象,不同对象的变成外部属性作为方法的参数传入

 

枚举

1,为什么要有枚举
问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
 
2,用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。
Ø私有的构造方法
Ø每个元素分别用一个公有的静态成员变量表示
Ø可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
 
3,枚举的基本应用
Ø举例:定义一个Weekday的枚举。
Ø扩展:枚举类的values,valueOf,name,toString,ordinal等方法(记住,讲课时要先于自定义方法前介绍,讲课更流畅)
Ø总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()。
 
4,枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
 
5,枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
 
6,带构造方法的枚举
Ø构造方法必须定义成私有的
Ø如果有多个构造方法,该如何选择哪个构造方法?
Ø枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
 
7,带方法的枚举
Ø定义枚举TrafficLamp
Ø实现普通的next方法
Ø实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
Ø增加上表示时间的构造方法
 
8,枚举只有一个成员时,就可以作为一种单例的实现方式。

 

反射

Class类 Java程序中的各个Java类属于同一类事物,描述这类事物的Java类就是Class类

Class类代表Java类,它的各个实例对象分别对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等。

一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来表示
 
得到各个字节码对应的实例对象(Class类型)
1,类名.class,例如,System.class
2,对象.getClass(),例如,new Date().getClass()
3,Class.forName("类名"),例如,Class.forName("java.util.Date");
 
九个预定义Class实例对象:
Class.isPrimitive方法中显示的:Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE
Int.class == Integer.TYPE
 
数组类型的Class实例对象
Class.isArray()
 
总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int[],void…
 
反射就是把Java类中的各种成分映射成相应的java类
表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field、Method、Contructor、Package等等。

 

Constructor类代表某个类中的一个构造方法
得到某个类所有的构造方法:
如:Constructor [] constructors= Class.forName("java.lang.String").getConstructors();
得到某一个构造方法:
如:     Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);
创建实例对象:
1,通常方式:String str = new String(new StringBuffer("abc"));
2,反射方式: String str = (String)constructor.newInstance(new StringBuffer("abc"));
//调用获得的方法时要用到上面相同类型的实例对象
Class.newInstance()方法:
如:String obj = (String)Class.forName("java.lang.String").newInstance();
Ø该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
Ø该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。

 

Field类代表某个类中的一个成员变量
示例代码:
ReflectPoint point = new ReflectPoint(1,7);
Field y = Class.forName("cn.itcast.corejava.ReflectPoint").getField("y");
System.out.println(y.get(point));
//Field x = Class.forName("cn.itcast.corejava.ReflectPoint").getField("x");
Field x = Class.forName("cn.itcast.corejava.ReflectPoint").getDeclaredField("x");
x.setAccessible(true);
System.out.println(x.get(point));

 

示例:将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的"b"改成"a"。  
class Xxx
{
	String name="abc";
	String email="abd";
	int x = 5;
}
func(Object obj)
{
Field [] fields = obj.getClass().getDeclaredFields();
for(Field field : fields)
{
	if(field.getType()==java.lang.String.class)
	{
		field.setAccesible(true);
		String original = (String)field.get(obj);
		field.set(obj,original.replaceAll("b","a");
	}
}
}


Method类代表某个类中的一个成员方法

得到类中的某一个方法:
如: Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);
调用方法:
1,通常方式:System.out.println(str.charAt(1));
2,反射方式: System.out.println(charAt.invoke(str, 1));
•如果传递给Method对象的invoke()方法的第一个参数为null,这有着什么样的意义呢?说明该Method对象对应的是一个静态方法!
ljdk1.4和jdk1.5的invoke方法的区别:
ØJdk1.5:public Object invoke(Object obj,Object... args)
ØJdk1.4:public Object invoke(Object obj,Object[] args),即按jdk1.4的语法,需要将一个数组作为参数传递给invoke方法时,数组中的每个元素分别对应被调用方法中的一个参数,所以,调用charAt方法的代码也可以用Jdk1.4改写为 charAt.invoke(“str”, new Object[]{1})形式。

 

数组的反射

1,具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。
2,代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class。
3,基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用。
4,Arrays.asList()方法处理int[]和String[]时的差异。
5,Array工具类用于完成对数组的反射操作。

 

JavaBean

1,JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
2,JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。
3,一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。
ØsetId()的属性名:id
ØisLast()的属性名:last
ØsetCPU的属性名:CPU
ØgetUPS的属性名是:UPS
 
内省(IntroSpector)JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省
在程序中把一个类当作JavaBean来看,就是调用IntroSpector.getBeanInfo方法, 得到的BeanInfo对象封装了把这个类当作JavaBean看的结果信息。

 

Beanutils工具包:操作javaBean的工具包
用eclipse先引入beanutils包,再引入logging包。

 

 

-------------------------------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Heima_aria/article/details/7760369

智能推荐

winform实现翻书效果_华创科技-AR立体翻书-程序员宅基地

文章浏览阅读152次。AR立体翻书AR立体翻书系统就是在增现实识别技术大行其道的时代,有效的将电子翻书和增强现实识别技术在应用上进行技术融合,从而创新性的打造出一种全新的翻书体验,观众一页一页的翻动面前的书本,书页上显示的平面图形就会在上方的液晶电视里面展示出立体结构图像。将书360°旋转,参观者可以看到显示器里面3D立体结构图像同时也进行360°的旋转。真实翻书与虚拟内容相结合,使观众在感受新奇互动效果的同时观看到多..._c#摄像头翻书

mybatis详解 oracle,Mybatis调用Oracle存储过程方法讲解-程序员宅基地

文章浏览阅读602次。这篇文章主要介绍了Mybatis调用Oracle存储过程的方法介绍,需要的朋友可以参考下1:调用无参数的存储过程。创建存储过程:Mapper.xml 配置:经测试其他标签(update、insert、select)也可以。Mapper.javaMapperTest.java 测试2:有参数的存储过程调用:2.1存储过程的创建:2.2Mapper.xml 的配置:2.3Mapper.java2.4M..._mybtis oracle

判断浏览器类型,微信,QQ_微信 获取浏览器类型-程序员宅基地

文章浏览阅读3.9k次。在移动端网页开发中,我们经常需要判断浏览器类型,是在微信内置浏览器,还是QQ内置浏览器,或者是其他浏览器打开。function is_weixn_qq(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger/i)=="micromessenger") { re..._微信 获取浏览器类型

Fabric release-1.1 部署安装记录_go: fabric-release-1.1/core/ledger/ledgerstorage i-程序员宅基地

文章浏览阅读1.4k次。一、操作系统OS: CentOS Linux release 7.5.1804 (Core)二、部署节点192.168.1.188 orderer.nx.com192.168.1.188 tlsca.org1.nx.com192.168.1.211 peer0.org1.nx.com192.168.1.232 peer0.org2.nx.com三、安装软件1.安装Go..._go: fabric-release-1.1/core/ledger/ledgerstorage imports

java HashMap学习-程序员宅基地

文章浏览阅读116次。首先 HashMap 继承了AbstractMap ,实现了Cloneable Serializable 和Map 接口。 /** * The default initial capacity - MUST be a power of two. */ //设置map初始长度 static final int DEFAULT_INITIAL_...

微信小程序实时日志wx.getRealtimeLogManager——远程监控小程序日志-程序员宅基地

文章浏览阅读3.2k次。微信官方文档实时日志实时日志封装const log = wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : nullexport default { debug() { if (!log) return log.debug.apply(log, arguments) }, info() { if (!log) return log.info.apply(_wx.getrealtimelogmanager

随便推点

用vs.net2002(vc7.0)开发ObjectARX2004应该注意的地方_caduibasedialog::findcontexthelpfullpath-程序员宅基地

文章浏览阅读2.3k次。用vs.net2002(vc7.0)开发ObjectARX2004应该注意的地方 1.CODE:Q为何用VC7开发ObjectARX2004程序总是出错?请问哪位高手:我以前用VC6在ObjectARX2000开发的程序一切正常,现在移植到Microsoft Visual Studio .NET 2003的VC7,使用ObjectARX2004,版本不兼容的地方都修改了,可是在编译连接时始终出错,_caduibasedialog::findcontexthelpfullpath

【React-native】react-native + react-navigation 实现更换皮肤完全教程_react native主题切换-程序员宅基地

文章浏览阅读1.4k次。想实现一个更换 app 整体色调(导航头,tabBar 以及按钮)的功能,比如在晚上可以换成黑色保护眼睛,亦或者选用户自己喜欢的颜色。先放具体的实现效果图:整体思路在 App.js 中,添加一个全局变量 screenProps,把颜色变量放在其中,然后再添加监听,当颜色改变时,触发监听,修改 state 中的颜色值,达到颜色重新渲染。 在 router 配置文件中,配置颜色从 s..._react native主题切换

face_recogniton解决办法_卸载face_recognition多个版本-程序员宅基地

文章浏览阅读692次。Install this module from pypi using pip3 (or pip2 for Python 2):pip3 install face_recognitionIMPORTANT NOTE: It’s very likely that you will run into problems whenpip tries to compilethe dlib_卸载face_recognition多个版本

python 全栈开发,Day76(Django组件-cookie,session)-程序员宅基地

文章浏览阅读133次。python 全栈开发,Day76(Django组件-cookie,session) 昨日内容回顾1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON...._04 python11day76 set_cookie

【干货】无源滤波器设计讲解,工作原理+设计步骤-程序员宅基地

文章浏览阅读1.4k次,点赞37次,收藏18次。砖一四分钟带你了解无源滤波器设计讲解,工作原理+设计步骤,希望对你有用~

Spark执行流程图_spark 执行流程图-程序员宅基地

文章浏览阅读1.1k次,点赞4次,收藏8次。Spark最全面执行流程,废话不多说,直接上图! 如果有错误或者不足,希望大家指出来,谢谢!_spark 执行流程图

推荐文章

热门文章

相关标签