张孝祥

更新时间:2024-02-18 11:35:01 阅读量: 经典范文大全 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

篇一:张孝祥java高薪视频和ppt分享

高级软件人才实作培训专家

讲师:张孝祥

第一章:Eclipse使用技巧 1. Workspace与project

必须要求:会切换工作间与导入项目

2. Perspective与view 设置整个workspace的javac与java。 设置单个工程的javac与java.

高版本的java能否运行低版本的javac编译的程序?低版本的java能否运行高版本的javac编译的程序? 在应用中具体举例讲解.

3. 快捷键的绑定与代码模板利用快捷键提高工作效率.

4. 静态导入

import语句可以导入一个类或某个包 中的所有类

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

第二章:Java语法 1. 可变参数

问题:一个方法接受的参数个数不固定,例 如:

System.out.println(countScore(2,3,5));System.out.println(countScore(1,2,3,5)); 可变参数的特点:只能出现在参数列表的最后;这个要记住 ...位于变量类型和变量名之间,前后有无空格都可以; 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

2. for ( type 变量名:集合变量名 ) 迭代变量必须在( )中定义!集合变量可以是数组或实现了

Iterable接口的集合类

public static int add(int x,int ...args)

{ int sum = x; for(int arg:args) { sum += arg; } return sum; }

3. 自动装箱和自动拆箱

Integer num1 = 12;

System.out.println(num1 + 12);

Integer num1 = 12; Integer num2 = 12; 这块相等,<=127都是真的

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);

4. 枚举:

为什么要有枚举问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有 人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。 枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。用普通类如何实现枚举功能,定义一个Weekday 的类来模拟枚举功能。私有的构造方法 每个元素分别用一个公有的静态成员变量表示 可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了 一个个独立的类。

枚举的基本应用举例:

定义一个Weekday的枚举。 扩展:枚举类的values,valueOf,name,toString,ordinal等方法(记住,讲课时要先于自定义方法前介绍,讲课更流畅)总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,例如可以调用 WeekDay.SUN.getClass().getName和WeekDay.class.getName()。

枚举的高级应用

枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和 抽象方法。 枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与 其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。 带构造方法的枚举构造方法必须定义成私有的 如果有多个构造方法,该如何选择哪个构造方法? 枚举元素MON和MON()的效果一样,都是调用默认的构造方法。 定义枚举TrafficLamp 实现普通的next方法 实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。 增加上表示时间的构造方法带方法的枚举枚举只有一个成员时,就可以作为一种单例的实现方式。

第三章:反射

1. 反射的基石Class类

对比提问: Person类代表人,它的实例对象就是张三,李四这样一个个具体的 人, Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是 Class。对比提问:众多的人用一个什么类表示?众多的Java类用一个什么类表 示?人Person Java类Class. Class类代表Java类,它的各个实例对象又分别对应什么呢?对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等。 一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来 表示,这些对象显然具有相同的类型,这个类型是什么呢?如何得到各个字节码对应的实例对象( Class类型) 类名.class,例如,System.class 对象.getClass(),例如,new Date().getClass()

Class.forName("类名"),例如,Class.forName("java.util.Date");九个预定义Class实例对象: 参看Class.isPrimitive方法的帮助 Int.class == Integer.TYPE Class.isArray()

数组类型的Class实例对象总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int[],void…

1. 反射

反射就是把Java类中的各种成分映射成相应的java类。例如,一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的Java类来 表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信 息就是用相应类的实例对象来表示,它们是Field、Method、 Contructor、Package等等。一个类中的每个成员都可以用相应的反射API类的一个实例对象 来表示,通过调用Class类的方法可以得到这些实例对象后,得到这些实例对象后有什么用呢?怎么用呢?这正是学习和应用反 射的要点。

2. Constructor类

Constructor类代表某个类中的一个构造方法 得到某个类所有的构造方法:例子:

Constructor [] constructors= Class.forName("java.lang.String").getConstructors();得到某一个构造方法:Constructor constructor =

Class.forName(“java.lang.String”).getConstructor(StringBuffer.class); //获得方法时要用到类型创建实例对象:

通常方式:String str = new String(new StringBuffer("abc")); 反射方式: String str = (String)constructor.newInstance(new StringBuffer("abc"));//调用获得的方法时要用到上面相同类型的实例对象Class.newInstance()方法: 例子:String obj = (String)Class.forName("java.lang.String").newInstance(); 该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。

1. Field类

Field类代表某个类中的一个成员变量 演示用eclipse自动生成Java类的构造方法 问题:得到的Field对象是对应到类上面的成员变量,还是对应到对象上的成员变量?类只有一个,而该类的实例对象有多个,如果 是与对象关联,哪关联的是哪个对象呢?所以字段fieldX 代表的是 x的定义,而不是具体的x变量。示例代码:

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”

2. Method类

Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);调用方法:

通常方式:System.out.println(str.charAt(1));

反射方式: System.out.println(charAt.invoke(str, 1));如果传递给Method对象的invoke()方法的第一个参数为null,这有着什么样的意义呢?说明该Method对象对应的是一个静态方法!jdk1.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})形式。

3. 用反射方式执行某个类中的main方法

目标: 写一个程序,这个程序能够根据用户提供的类名,去执行该类中的main方法。用普通方式调完后,大家要明白为什么要用反射方式去调啊?

问题:

启动Java程序的main方法的参数是一个字符串数组,即public static void main(String[] args),通过反射方式来调用这个main方法时,如何为invoke方法传递参数呢?按jdk1.5的语法,整个数组是一个参数,而按jdk1.4的语法,数组中的每个元素对应一个参数,当把一个字符串数组作为参数传递给 invoke方法时,javac会到底按照哪种语法进行处理呢?jdk1.5肯定要兼容 jdk1.4的语法,会按jdk1.4的语法进行处理,即把数组打散成为若干个单独的参数。所以,在给main方法传递参数时,不能使用代码mainMethod.invoke(null,new

String[]{“xxx”}),javac只把它当作jdk1.4的语法进行 理解,而不把它当作jdk1.5的语法解释,因此会出现参数类型不对的问题. 解决办法: mainMethod.invoke(null,new

Object[]{new String[]{"xxx"}}); mainMethod.invoke(null,(Object)new String[]{"xxx"}); ,编译器会作特殊处理,编译时不把参数当作数组看待,也就不会数组打散成若干个参数了

4. 数组的反射

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

用Array反射操作数组,可以知道其长度。

5. 反射的作用实现框架功能

框架与框架要解决的核心问题

我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入进我提供的框架中。框架与工具类有区别,工具 类被用户的类调用,而框架则是调用用户提供的类.

框架要解决的核心问题

我在写框架(房子)时,你这个用户可能还在上小学,还不会写程序呢?我写的.

综合案例

框架程序怎样能调用到你以后写的类(门窗)呢? 因为在写才程序时无法知道要被调用的类名,

所以,在程序中无法直接new 某个 类的实例对象了,而要用反射方式来.

先直接用new. 语句创建ArrayList和HashSet的实例对象,演示用eclipse自动生成

ReflectPoint类的equals和hashcode方法,比较两个集合的运行结果差异。 然后改为采用配置文件加反射的方式创建ArrayList和HashSet的实例对象,比较 观察运行结果差异。 引入了elipse对资源文件的管理方式的讲解.

第四章:泛型 1. 了解泛型

ArrayList<E>类定义和ArrayList<Integer>类引用中涉及如下术语:

整个称为ArrayList<E>泛型类型 ArrayList<E>中的E称为类型变量或类型参数 整个

ArrayList<Integer>称为参数化的类型 ArrayList<Integer>中的Integer称为类型参数的实例或实际类型参数 ArrayList<Integer>中的<>念着typeof ArrayList称为原始类型 参数化类型可以引用一个原始类型的对象,编译报告警告,例如, Collection<String> c = new

Vector();//可不可以,不就是编译器一句话的事吗?原始类型可以引用一个参数化类型的对象,编译报告警告,例如, Collection c = new Vector<String>();//原来的方法接受一个集合参数,新的类型也要能传进去 Vector<String> v = new Vector<Object>(); //错误!///不写<Object>没错,写了就是明知故犯 Vector<Object> v = new Vector<String>(); //也错误 参数化类型与原始类型的兼容性

参数化类型不考虑类型参数的继承关系: 编译器不允许创建泛型变量的数组。即在创建数组实例时,数组的元素不 能使用参数化的类型,例如,下面语句有错误:

Vector<Integer> vectorList[] = new Vector<Integer>[10];

思考题:下面的代码会报错误吗

Vector v1 = new Vector<String>(); Vector<Object> v = v1;

2. 泛型中的?通配符

定义一个方法,该方法用于打印出任意参数化类型的集合中的所有数据,该方法如何定义呢?错误方式:

public static void printCollection(Collection<Object> cols)

{ for(Object obj:cols) {

System.out.println(obj); } /* cols.add("string");//没错 cols = new HashSet<Date>();//会报告错误!*/ }

正确方式:

public static void printCollection(Collection<> cols) { for(Object obj:cols)

{ System.out.println(obj); } //cols.add("string");//错误,因为它不知自己未来匹配就一定是String cols.size();//没错,

篇二:张孝祥《过洞庭》赏析

张孝祥《念奴娇·过洞庭》赏析

洞庭青草,近中秋、更无一点风色。玉鉴琼田三万顷,著我扁舟一叶。素月分辉,明河共影,表里俱澄澈。悠然心会,妙处难与君说。

应念岭表经年,孤光自照,肝胆皆冰雪。短发萧骚襟袖冷,稳泛沧溟空阔。尽挹西江,细斟北斗,万象为宾客。扣舷独啸,不知今夕何夕!

这首词上片先写洞庭湖月下的景色,突出写它的澄澈。“洞庭青草,近中秋、更无一点风色。”青草是和洞庭相连的另一个湖。这几句表现秋高气爽、玉宇澄清的景色,是纵目洞庭总的印象。“风色”二字很容易忽略过去,其实是很值得玩味的。风有方向之别、强弱之分,难道还有颜色的不同吗?也许可以说没有。但是敏感的诗人从风云变幻之中是可以感觉到风色的。李白《庐山谣》:“登高壮观天地间,大江茫茫去不还。黄云万里动风色,白波九道流雪山。”那万里黄云使风都为之变色了。张孝祥在这里说“更无一点风色”,表现洞庭湖上万里无云,水波不兴,读之冷然、洒然,令人向往不已。

“玉鉴琼田三万顷,著我扁舟一叶。”玉鉴就是玉镜。琼是美玉,琼田就是玉田。“玉鉴琼田”,形容湖水的明净光洁。“三万顷”,说明湖面的广阔。著,犹着,或释为附着。船行湖上,是飘浮着、流动着,怎么可以说附着呢?著者,安也,置也,容也。陈与义《和王东卿》:“何时著我扁舟尾,满袖西风信所之。”陆游《题斋壁》:“稽山千载翠依然,著我山前一钓船。”都是这个意思。张孝祥说:“玉鉴琼田三万顷,著我扁舟一叶。”在三万顷的湖面上,安置我的一叶扁舟,颇有自然造化全都供我所用的意味,有力地衬托出诗人的豪迈气概。

“素月分辉,明河共影,表里俱澄澈。”这三句写水天辉映一片晶莹。“素月分辉”,是说皎洁的月亮照在湖上,湖水的反光十分明亮,好象素月把自己的光辉分了一些给湖水。“明河共影”,是说天上的银河投影到湖中,十分清晰,上下两道银河同样地明亮。素月分辉,明河共影”这两句明点月华星辉,暗写波光水色,表现了上下通明的境地,仿佛是一片琉璃世界。所以接下来说:“表里俱澄澈。”这一句是全词的主旨所在。说来说去,洞庭秋色美在哪里呢?词人在这一句里点了出来,美就美在“澄澈”上。这里表里如一的美,是光洁透明的美,是最上一等的境界了。“表里俱澄澈”这五个字,描写周围的一切,从天空到湖水,洞庭湖上上下下都是透明的,没有一丝儿污浊。这已不仅仅是写景,还寄寓了深意。这五个字标示了一种极其高尚的思想境界,诸如光明磊落、胸怀坦荡、言行一致、表里如一,这些意思都包涵在里面了。杜甫有一句诗:“心迹喜

双清”(《屏迹》三首其一),心是内心,也就是里,迹是行迹,也就是表,心迹双清也就是表里澄澈。“表里俱澄澈,心迹喜双清”,恰好可以集成一联,给我们树立一个为人处世的准则,我们不妨拿来当作自己的座右铭。当张孝祥泛舟洞庭之际,一边欣赏着自然景色,同时也在大自然中寄托着他的美学理想。他笔下的美好风光,处处让我们感觉到有他自己的人格在里面。诗人的美学理想高尚,心地纯洁,他的笔墨才能这样干净。

上片最后说:“悠然心会,妙处难与君说。”洞庭湖是澄澈的,诗人的内心也是澄澈的,物境与心境悠然相会,这妙处难以用语言表达出来。悠然,闲适自得的样子,形容心与物的相会是很自然的一种状态,不是勉强得来的。妙处,表面看来似乎是指洞庭风光之妙,其实不然。洞庭风光之妙,上边已经说出来了。这难说的妙处应当是心物融合的美妙体验,只有这种美妙的体验才是难以诉诸言语的。

下片着重抒情,写自己内心的澄澈。“应念岭表经年,孤光自照,肝胆皆冰雪。”岭表,指五岭以外,今两广一带。岭表经年,指作者在广南西路任经略安抚使的时期。“应”字平常表示推度猜测的意思,这里讲的是自己当时的思想,无所谓推度猜测。这“应”字语气比较肯定,接近“因”的意思。杜甫《旅夜书怀》:“名岂文章著,官应老病休。”犹言“官因老病休”,“应”字也是肯定的语气。“应念岭表经年”,是由上片所写洞庭湖的景色,因而想起在岭南一年的生活,那是同样的光明磊落。孤光,指月光。苏轼《西江月》:“中秋谁与共孤光,把盏凄然北望。”就曾用孤光来指月光。“孤光自照”,是说以孤月为伴,引清光相照,表现了既不为人所了解,也无须别人了解的孤高心情。“肝胆皆冰雪”,冰雪都是洁白晶莹的东西,用来比喻自己襟怀的坦白。南朝诗人鲍照在《白头吟》里说:“直如朱丝绳,清如玉壶冰。”南朝另一个诗人江总《入摄山栖霞寺》说:“净心抱冰雪。”唐代诗人王昌龄《芙蓉楼送辛渐》说:“洛阳亲友如相问,一片冰心在玉壶。”这些都是以冰雪比喻心地的纯洁。张孝祥在这首词里说:“应念岭表经年,孤光自照,肝胆皆冰雪。”结合他被谗免职的经历来看,还有表示自己问心无愧的意思。在岭南的那段时间里,自问是光明磊落,肝胆照人,恰如那三万顷玉鉴琼田在素月之下表里澄澈。在诗人的这番表白里,所包含的愤慨是很容易体会的。

“短发萧骚襟袖冷,稳泛沧溟空阔。”这两句又转回来写当前。萧骚,形容头发的稀疏短少,好象秋天的草木。结合后面的“冷”字来体会,这萧骚恐怕是一种心理作用,因为夜气清冷,所以觉得头发稀疏。“短发萧骚襟袖冷”,如今被免职了,不免带有几分萧条与冷落。但诗人的气概却丝毫不减:“稳泛沧溟空阔”。不管处境如何,自己是拿得稳的。沧溟,本指海水,这里指洞庭湖水的浩淼。这句是说,自己安稳地泛舟于浩淼的洞庭之上,心神没有一点动摇。不但如此,诗人还有更加雄伟的气魄:

“尽挹西江还,细斟北斗,万象为宾客。”这是全词感情的高潮。西江,西来的长江。挹,汲取。“尽挹西江”,是说汲尽西江之水以为酒。“细斟北斗”,是说举北斗星当酒器慢慢斟酒来喝。这里暗用了《九歌?东君》:“援北斗兮酌桂浆”的意思,诗人的自我形象极其宏伟。“万象”,天地间的万物。这几句是设想自己作主人,请万象作宾客,陪伴我纵情豪饮。一个被谗罢官的人,竟有这样的气派,须是多么的自信才能做到啊!

词的最后两句更显出作者艺术手法的高超:“扣舷独啸,不知今夕何夕!”舷,船边。扣舷,敲着船舷,也就是打拍子。苏轼《赤壁赋》:“扣舷而歌之。”啸,蹙口发出长而清脆的声音。张孝祥说:“扣舷独啸”,或许有啸咏、啸歌的意思。“不知今夕何夕”,用苏轼《念奴娇?中秋》的成句:“起舞徘徊风露下,今夕不知何夕!”张孝祥稍加变化,说自己已经完全沉醉,忘记这是一个什么日子了。这两句作全词的结尾,收得很经松,很有余味。从那么博大的形象收拢来,又回到一开头“近中秋”三字所点出的时间上来。首尾呼应,结束了全词。

张孝祥在南宋前期的词坛上享有很高的地位,是伟大词人辛弃疾的先驱。他为人直率坦荡,气魄豪迈,作词时笔酣兴健,顷刻即成。他的词风最接近苏东坡的豪放,就拿这首《念奴娇》来说吧,它和苏东坡的《水调歌头》风格就很近似。《水调歌头》写于中秋之夜,一开头就问:“明月几时有?把酒问青天。不知天上宫阙,今夕是何年。”将时空观念引入词里,在抒情写景之中含有哲理意味。末尾说:“但愿人长久,千里共婵娟。”欲打破时间的局限和空间的阻隔,在人间建立起美好的生活。整首词写得豪放旷达,出神入化。张孝祥这首《念奴娇》写的是接近中秋的一个夜晚。他把自己放在澄澈空阔的湖光月色之中,那湖水与月色是透明的,自己的心地肝胆也是透明的,他觉得自己同大自然融为一体了。他以主人自居,请万象为宾客,与大自然交朋友,同样豪放旷达,出神入化。苏东坡的《水调歌头》仿佛是与明月对话,在对话中探讨着关于人生的哲理。张孝祥的《念奴娇》则是将自身化为那月光,化为那湖水,一起飞向理想的澄澈之境。两首词的写法不同,角度不同,那种豪放的精神与气概,却是很接近的。黄蓼园评此词说:“写景不能绘情,必少佳致。此题咏洞庭,若只就洞庭落想,纵写得壮观,亦觉寡味。此词开首从洞庭说至玉界琼田三万顷,题已说完,即引入扁舟一叶。以下从舟中人心迹与湖光映带写,隐现离合,不可端倪,镜花水月,是二是一。自尔神采高骞,兴会洋溢。”(《蓼园词选》)这首词在情与景的交融上的确有独到之处,天光与水色,物境与心境,昨日与今夕,全都和谐地融会在一起,光明澄澈,给人以美的感受与教育。

篇三:Java视频(张孝祥)学习笔记

Java视频(张孝祥)学习笔记

第一讲 Java开发前奏

? Java的特点:一次编译,到处运行(Java字节码解译程序)

当windows可执行程序运行时,操作系统会将可执行程序的机器码交给CPU一条一条运行。Java源程序->Java字节码文件->Java字节码解释程序(JVM)在各种操作系统上运行或者在Java CPU上运行

? Java程序开发的基本过程

JDK(Java Development Kit):开发工具,javac及基础核心类;运行环境,Java及基础核心类

J2EE(Java 2 Platform Enterprise Edition)

J2SE(Java 2 Platform Stand Edition)

J2ME(Java 2 Platform Micro Edition)

? 学习Java必须掌握的前提知识

Javac.exe 将java源程序编译成java字节码文件编译工具

Java.exe 在Windows系统上对java字节码文件进行解释执行的程序,即Java 虚拟机 Demo文件下是Sun公司提供的一些Sample。

? 环境变量

在dos中输入javac和java,若打印出详细帮助说明,则说明java虚拟机安装没问题。 操作系统的环境变量就是在操作系统中定义的变量,可以供操作系统中所有程序访问。 两种访问环境变量的方式:

1) 在dos中输入“set”查看环境变量

2) 在桌面上在“我的电脑”上单击右键>系统属性>高级>环境变量

用户环境变量:只对特定用户有效;系统环境变量:对所有用户有效。用户变量可以覆盖系统变量。

set>可查看所有环境变量

set 变量名>查看特定环境变量

set 变量名=value 可对变量进行赋值

set 变量名=空 可将变量的值变为0

追加path的内容:set path=%path%;新变量名=值

在变量名和值中,空格不被忽略,如”path “不等于”path”

在“高级”>“环境变量”中修改环境变量,需要注销后才会真正生效。 Java –verbose 会将需要装载文件的过程详细打印出来

查看文件的全路径有两种方式:一种是将文件直接拖到“运行”框中,一种是拖到dos中。 Public class 类名{} 类名和和文件名必须一致,一个java文件中可以有多个类,但只能有一个public类。

print 打印完以后不换行;println 打印完以后换行;print+\n=println

? classpath

set classpath=类所在路径,java虚拟机会沿classpath所指定的路径查找该类 set classpath=路径名;. “.”代表当前目录

classpath指定的目录中不能含有空格,不能含有中文

jad-java的反编译文件,可以将*.class”反编译为”*.java”

第二讲 Java编程基础

教程视频的配套书籍——《Java就业培训教程》

? Java基本语法

Java语言是严格区分大小写的,可以分多行书写。

语句分类:结构定义语句、功能执行语句

功能语句需要在语句后面加上”;”。

字符串不能随意分行书写,如果确实要分行,必须用”+”相连。

三种注释方式:用”//”进行行注释,用”/*” plus “*/”进行多行注释,用”/**” plus “*/”进行生成java文档的多行注释。

在”/*” plus “*/”之间不能再嵌套”/*” plus “*/”,可以嵌套”//”。

标识符:大小写字母、数字、下划线、美元符号$组成,但不能以数字开头,同时不能用关键字作为变量名。

? Java中的变量

整型变量:十进制,十六进制Ox12,八进制O12

长整型变量:13L

单精度浮点数:5.1f,2e3f 在内存中占用4个字节

双精度浮点数:5.1 在内存中占用8个字节

布尔常量:true false

字符常量:用单引号引起来,’\r’表示键盘输入,相当于按下回车键,’\n’换行,’\t’制表符,’\b’退格键,’\’’单引号,’\”’双引号,’\\’表示一个斜杠。

字符串常量:用双引号引起来

Null常量:只有一个,用null表示,表示对象的引用为空。

变量:就是系统为程序分配的一块内存单元,用来存储各种类型的数据。

变量在使用前必须先初始化。

? 数据类型

基本数据类型:数值型:整数类型(byte,short,int,long),浮点类型(float,double);字符型:char;布尔型:boolean。

引用数据类型:类:class;接口:interface;数组

变量的字节大小:byte占用1个字节,short占用2个字节,int占用4个字节,logn占用8个字节,float占用4个字节,double占用8个字节,char占用2个字节(unicode编码),Boolean占1个字节。

语句”float f=3.5;” 会报错,因为”3.5”是双精度数,正确写法应为”float f= 3.5f”。

自动类型转换(也称隐式转换)

强制类型转换(也称显式转换),有可能会存在隐患

任何类型(包括null类型)都可以转换为字符串类型

UltraEdit中,用“ctrl+G”可以定位行。

? 在dos窗口中,如果进行了标记,则停止执行其他命令。

变量要先定义,后使用,变量存在定义域,同时Java语言中不允许嵌套定义。

注:蓝色部分字体从其他地方摘抄。

为了能运行java程序,操作系统上必须有Java虚拟机即JVM(Java Virtual Machine),JVM

包含在JRE(Java Runtime Environment)中,要开发Java程序,必须取得JDK(J2SE Development Kits),JDK包括了JRE以及开发过程中所需要的一些工具程序。

安装完JDK以后,分别有JDK和公用的JRE,其中JDK比公用JRE多了个server的VM,在bin目录下。若使用server VM,会花比较长的启动时间及消耗较多的内存。

函数的返回值为void,相当于在该子程序最后加上一句”return ”,即返回空值。

Java中,函数允许重载,即在同一个类中允许同时存在一个以上的同名函数,只要他们的参数个数或类型不同即可。

? 运算符

算术运算符:其中”+”还能把非字符串转换成字符串,如对负数取模,则模数负号忽略不计 赋值运算符:赋值语句可以连在一起,x=x+3等同于x+=3,其它类推

比较运算符:“==”不能误写为“=”,切记!

逻辑运算符:“&”和“&&”的区别在于,前者无论什么时候,“&”两边的表达式都会参与计算,后者如果“&&”左边的表达式为false,则右边的表达式不再参与运算,其它类推 位运算符:右移运算,对于C语言而言,如果是最高位是1则补1,如果最高位是0则补0;对于Java语言而言,提供了右移运算“>>”和无符号右移“>>>”,前者和C语言一样,后者则无论最高位是1或者0都补0。

关系运算符:类型比较运算符 instanceof

将十进制的数转换成十六进制的数使用函数Integer.toHexString

移位运算符使用数据类型包括:byte、short、char、int、long

对于低于int型的操作数先自动转换为int型再移位

如果移位数较大,将先对移位数取模再移位,int型整数移位数对32取模,long型整数移位数对64取模。

一个数右移n位,等于这个数除以2的n次方;左移n位,等于这个数乘以2的n次方。 运算符的优先顺序不用刻意去记,可以多使用括号,因为括号的优先顺序是最高的。

有时老是把等号==写成赋值号=为了减少这种错误,我们在写程序的时候,如果要用等号时那就把常量写在前面例如 if(3==a) 这样即使错把 == 写成 = 在编译时会报错。

? 程序的流程控制

顺序结构,选择结构,循环结构

switch语句中,case后面要加break,如果不加break,一旦碰到第一次case匹配,就回顺序执行以后所有的程序代码,而不管后面的case条件是否匹配;switch语句判断条件可以接受int,byte,char,short类型,不可以接受其他类型;case后面刻意跟多个语句,这些语句刻意不用大括号括起来。

While(表达式)后面一定不要加“;”

do…while(表达式);

97-a 13-回车 10-换行符

? break语句和continue语句

break语句可以终止循环中的子语句和switch语句,一个无标号的break语句会把控制传给当前循环(while,do,switch);如果有标号,控制会被传递到当前方法中带有这一标号的语句。 continue语句只能出现在循环语句(while,do,for)的子语句块中,无标号的continue语句的作用是跳过当前循环的剩余语句块,接着执行下一次循环。

用浮点数进行判断时要谨慎,不要轻易用“==”

? 栈内存和堆内存

栈内存是堆内存对象中的地址,堆内存中的对象无法使用变成“垃圾”以后,在之后的某个时间会被回收。如x=new int[100],x占用的是栈内存,int[100]占用的是堆内存。

数组:声明数组时,不能指定其长度,否则编译时将出错。不能直接使用,必须经过初始化分配内存后才能使用

Java中并没有真正的数组,只有数组的数组,java中多维数组不一定是规则矩阵形式。 多维数组可以静态初始化,即如int[][] xx={{3,2,7},{6},{1,5}}

第三讲 面向对象(上)

? 面向过程和面向对象

面向过程:事物和属性(动作)之间的关系是动宾关系

面向对象:事物和属性(动作)之间的关系是主谓关系

面向对象的思想:将客观事物看做具有状态和行为的对象,通过抽象找出同一类对象的共同状态和行为,构成类。

面向对象的三大特征:封装、继承、多态

类是对某一类事物的描述,是抽象、概念上的定义;对象是实在的该类事物的每个个体,因此也称实例。

类成员函数可以访问同一个类中的成员变量。

Java程序启动时,先寻找main函数,main函数放在哪个类中都无所谓,都不属于类的函数。 对象的比较:“==”运算符与equeal()方法的区别,equal方法是比较对象的内容是否相等,“==”是比较对象的首地址是否相等。

类的成员声明为私有成员以后,在别的类中就不能直接进行访问了,只能通过该类的public或protect方法来对该私有成员进行访问(变量/方法)。

? 构造方法

构造函数可以为成员变量进行初始化工作

重载构造方法可以完成不同初始化的操作。

写了一个新的构造函数以后,编译器不会再调用不带参数的构造函数了。

因此写带参数的构造函数,还需要多写一个不带参数的构造函数。

构造方法不同于一般方法的特征有3点:

1.它具有与类名一样的名称

2.它不含有返回值

3.它不能用return语句返回一个值

还有一点要注意的就是:它没有返回值但也没有void;如果有void那它就不再是构造方法了。 当一个对象变成垃圾是指:引用这个对象的句柄不存在了,或它已经指向了别的对象.没有对应的句柄是对象变成垃圾的本质原因。

? this关键字

每个成员方法内部,都有一个tiis引用变量,指向调用这个方法的对象;在形参和成员变量名字不一样的时候,this可以省略;如果形参和成员变量名字一样的时候,则可以利用this关键字来区分成员变量和形参。在实际运用中,经常让类的成员变量名和对其进行赋值的成员方法的形参变量同名,同时使用this关键字,这样可以增强程序的可读性和可理解性。 当一个构造方法(较长)调用另外一个构造方法,可以使用this关键字。

注意:在java的类中,类(A)可内嵌类(B),内嵌类B编译时会产生文件A$B.class;命令执行语句(不含声明这些语句)只能在main函数中,不能在main函数以外,否则编译时会提示出错;system方法只能在public方法中调用。

在任何类中,都会有finalize()方法

? 静态方法、静态类、静态变量

在一个类中定义一个静态方法(如static main),不需创建该类的对象即可调用该静态方法。 静态变量有点类似于C语言中的全局变量,但静态变量优于其他非静态变量,而且会先初始化。如果把静态类看作一个事先(执行main函数之前)生成好的设计图纸,那么静态变量可看作一个事先生成好的零件,当然这个零件是属于某个类的。

静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能访问类中的非静态成员。这是因为,对于非静态的方法和类,需要先创建的实例对象后才可使用,而静态方法在使用前不许创建任何对象。

不能把非静态方法内部的成员声明为静态的。

静态方法不能以任何方式引用this和super关键字,因为静态方法被调用时,this所引用的对象根本就没有产生。

main方法是静态的,因此在main方法中不能在创建该类的对象后才能访问该类生成对象中的非静态成员(变量或方法)。

静态块,static+{}可以对块内的静态成员进行初始化。

类在启动(使用时)才加载。

类的单态设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。实现方法:首先将类的构造方法的访问权限设置为private,同时在类内部产生一个该类的静态final对象,再利用该类的某个静态方法返回类内部创建的对象。

静态成员类特性:

静态内部类没有了指向外部的引用。

静态内部类中可以定义任何静态和非静态的成员

静态内部类里的静态方法中:可以直接访问该类和外部类中的静态成员,访问该类和外部类中成员通过创建对象访问

静态内部类里的非静态方法中:可以直接访问该类中的所有的非静态、静态成员和直接访问外部类中的静态成员;访问外部类中成员通过创建类对象访问

像静态方法或静态字段一样,静态成员类有public/private/default权限修饰符

静态成员类约束:

静态成员类不能与外部类重名

像外部类的静态方法一样,不能直接访问外部类的实例字段和实例方法

静态成员类只能定义于外部类的顶层代码或外部类其它静态成员类的顶层代码中(嵌套定义);不能定义于外部类的某个函数中。

匿名类:

使用匿名类有两种情况:

1.对一个对象只需一次方法调用,这种情况可以使用匿名类,这样比较简单.

2.将匿名对象作为一个实参传递给一个方法,比如:abc(new Person());

? 内部类和外部类

定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。static的内部类行为上象一个独立的类,非static在行为上类似类的属性或方法且禁止声明static的方法。内部类可以访问外部类的所有方法与属性,但static的内部类只能访问外部类的静态属性与方法。但外部类不能直接访问内部类的成员。

要访问内部类中的成员函数,必须先创建一个外部类实例,通过外部类实例来生成一个内部类对象,因为内部类可以调用外部类的非静态的成员(函数、变量),因此外部类必须先生

本文来源:https://www.bwwdw.com/article/gkwb.html

Top