Java 相关注意事项小结

程序是一系列有序指令的集合;

Java主要用于开发两类程序:

1)桌面应用程序
2)Internet应用程序
1,Java程序:三步走,编写--编译--运行;
2,使用记事本开发:
1)以.java为后缀名保存文件
2)使用javac命令编译.java文件,生成.class文件
3)使用java命令编译.class文件,输出结果
3,main()方法是java程序的执行的入口点;
4,\n是换行符,\t是制表符
5,包资源管理器:
1)用包阻止Java源文件,类似于文件夹
2)选择菜单“Window-show view-package explorer”打开
src目录:存放包和源文件
JRE系统库目录:存放程序运行必须的系统库文件
6,导航器:
1)类似于windows中的资源管理器
2)选择菜单:“window->show view-navigator”
bin目录:存放可执行的字节码文件
src目录:存放java源文件
7,public修饰的类的名称必须与Java源文件同名!

System.out.println()和System.out.print()区别就在于一个换行,使用换行符\n可以是两者达到相同的效果
8,Java数据类型:
数值类型:整型(byte,short,int ,long),实型(float ,double),
非数值类型:char ,String
9,计算剩余的,就是利用%取余运算符
10,自动类型转换规则:
规则1:如果一个操作数为double型,则整个表达式可提升为double型

规则2:满足自动类型转换的条件

两种类型要兼容:
数值类型(整型和浮点型)互相兼容;

目标类型大于源类型:
例如:double 型大于 int 型;int可以转换成double,double不能转换成int;大可转成小,小不能转成大
10,优先级顺序:
算术运算符>关系运算符>逻辑运算符
运算符
赋值运算符(=)

算术运算符(+、 – 、*、/、%);

关系运算符(>、<、>=、<=、 ==、 !=);

11,数据类型转换包括自动类型转换和强制类型转换
12,if选择结构:是根据条件判断之后再做处理
if(条件) {: //条件必须是布尔值,
//代码块} //只有一条语句时,建议不省略大括号
多重if结构:当需要满足多个条件时使用,并且使用逻辑运算符
运算符优先级顺序:!>算术运算符>比较运算符>&&>||

13,产生随机数(0~9)的方法如下:
int random=(int)(Math.random()*10);

14,四位数分解获得百位:num/100%10
15,多重if选择结构中的最后一个else可以省略;
16,Java中的if选择结构,包括以下形式:

基本if选择结构:可以处理单一或组合条件的情况;

if-else选择结构:可以处理简单的条件分支情况;

多重if选择结构:可以处理分段的条件分支情况;

嵌套if选择结构:可以处理复杂的条件分支情况

0,循环由循环条件和循环操作组成
1,使用while循环时:
1)分析是否存在重复操作:
2)使用while循环实现:
确定循环条件和循环操作
套用while语法写出代码
检查循环是否能够退出
while循环:如果条件不成立,则一次都不执行操作
2,在编写程序时,会出现错误,但不好发现和定位错误,方法如下:
1)通过代码阅读或者加输出语句查找程序错误
2)当程序结构越来越复杂时,需要专门的技术来发现和定位错误,就是“程序调试”
程序调试的主要方法:
设置断点,单步执行,观察变量(F5单步跳入,F6单步跳过)
3,do-while:
特点:先执行再判断,while后面的分号不可少,
无论条件对错与否,其至少执行一次循环操作,
4,实现整数反转(回文):
int val=12345;
int r_digit;
System.out.print(r_digit);
val=val/10;
5,循环次数固定的时候:for循环比while循环更简洁
6, Scanner s=new Scanner(System.in);
System.out.println("请输入商品编号:"); //两句标准语句之间要加入表示请求的语句
int input=s.nextInt(); //注意与上一句的位置顺序,若写在上一句的上面,则不会有效果
7,continue的使用情况:
当循环条件不满足时(如for循环中),可利用到continue,结束本次循环,继续下次循环的判断
8,for循环:
for(参数初始化;条件判断;更新循环变量){}
9,加法表:
Scanner s=new Scanner(System.in);
System.out.println("请输入数字:");
int val=s.nextInt();
for(i=0,j=val;i<=val;i++,j--){
System.out.println(i+"+"+j+"="+(i+j));
}
s.close();
10,continue 作用:跳过循环体中剩余的语句而执行下一次循环

continue跳出本次循环,进入下一次循环

break语句作用:终止某个循环,程序跳转到循环块外的下一条语句;
使用场合:

break常用于switch结构和循环结构中

continue一般用于循环结构中
11,循环结构:
while,do-while,for循环
1,需要多次重复执行一个或多个任务的问题时,
考虑使用循环来解决问题
2,无论哪一种循环结构,都有4个必不可少的部分,初始部分,循环条件,循环体,迭代部分
适用情况:

循环次数确定的情况,通常选用for循环

循环次数不确定的情况,通常选用while或do-while循环
12,数组何时使用

当数据繁琐,不利于处理时,使用数组。
数组是一个变量,存储相同数据类型的一组数据。
声明一个变量就是在内存中划出一块合适的空间
声明一个数组就是在内存空间划出一串连续的空间
13,数组长度固定不变,避免数组越界
14,double和float的区别???
15,数组中的所有元素必须是相同类型。
16,使用数组的四步:
1,声明数组,int[] a
2,分配空间,a=new int[5]
3,赋值,a[0]=8
4,处理数据,a[0]=a[0]*8
17,数据类型[ ] 数组名 = new 数据类型[大小] ;
18,声明数组:
为节省时间:
方法一:
边声明边赋值:int []score={89,85,96};
或者int[] score=new int[]{89,79,96};
方法二:动态地从键盘录入信息并赋值
Scanner input=new Scanner(System.in);
for(int i=0;i<30;i++){
score[i]=input.nextInt();
}
数组是引用类型,数组名并不是数组元素的内容,而是一个引用地址,方法参数传递的是数组地址,根据这个地址可以找到内存中存放数组元素的连续存储区,通过“数组名[数组元素下标]”的方式来访问数组元素。由于数组名实际上是一个内存地址,如果一个方法的返回值类型是数组,方法体重返回结果时应使用“return 数组名”,而不能在数组名后加中括号,并且方法头定义中用“类型[]”指明方法的返回类型。
例如:
public class Array{
static String[] getArray(){ //返回一个字符串型数组,方法的返回类型是数组类型
String[] array={"123","sdf","45gfd"};
retrun array; //返回的是数组名
}
static void printArray(String[] data){ //注意参数是数组类型,因为要输出数组元素
for(int i=0;i<data.length;i++){
System.out.println(data[i]);
}
}
public static void main(String[] args){
String[] rtnArray=getArray();
printArray(rtnArray);
}
}
使用Scanner类时:import java.util.Scanner;
二重循环是一个循环体内又包含另一个完整的循环结构;

在二重循环中,外层循环变量变化一次,内层循环变量要从初始值到结束值变化一遍

在二重循环中可以使用break、continue语句控制程序的执行

在二重循环中使用continue:
for(int i=0;i<classnum;i++){
for(int j=0;j<score.length;j++){
if(score[j]<0){
continue; //若执行continue则只执行到此,直接执行j++,不执行count++了
}
count++;
}
}
在二重循环中使用break:
for(int i=0;i<5;i++){
System.out.println("欢迎光临第"+(i+1)+"家店");
for(int j=0;j<3;j++){
System.out.println("要离开吗(y/n)?");
choice=s.nextLine();
if(‘y‘==choice){
break; //执行break,跳出内层(for)循环,继续执行外层(for)循环语句;
}
System.out.println("买了一件衣服");
count++;
}
}
break:跳出本层循环,
continue:继续本层下一轮循环
for循环执行顺序:
for(1,参数初始化;2,条件判断;4,更新循环变量){
3,执行循环体;
}
将字符d插入字符数组arr中:
char[] arr={‘a‘,‘b‘,‘c‘,‘e‘};
char ch=‘m‘;
int index=arr.length; //保存新增字符插入位置
for(int i=0;i<arr.length;i++){ //比较元素得到插入位置
if(ch<arr[i]){
index=i;
break;
}
}
for(int j=arr.length;j>index;j--){ //index下标开始的数组元素后移一个位置
arr[j]=arr[j-1];
}
arr[index]=ch; //插入数据
打印等腰三角形,直角三角形,倒直角三角形:
等腰三角形设计时,需要借助空格来实现
int rows=0;
System.out.println("请输入三角形行数:");
Scanner s=new Scanner(System.in);
rows=s.nextInt();
for(int i=1;i<=rows;i++){
for(int j=1;j<=rows-i;j++){
System.out.print(" ");
}
for(int k=1;k<=rows*2-1;k++){
System.out.print("*");
}
System.out.print("\n");
}
直角三角形:
for(int i=1;i<=rows;i++){
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.print(" ");
}
倒直角三角形:
for( int i =1 ;i<=rows;i++){
for(int j=1;j<=rows-i+1;j++){
System.out.print("*");
}
System.out.print("\n");
}
如下代码生成四位随机数:
 
int max = 9999;

int min = 1000;

cardNumber = (int)(Math.random()*(max-min)) +min;
注意equals函数的使用:
if (userName.equals(inputName) && password.equals(inputPassword))
Java中运算符有算术运算符、关系运算符和逻辑运算符等;

Java中的类型转换分自动类型转换和强制类型转换;

多重if和switch选择结构都可以用于多分支的情况,但使用场合不同;

while循环先判断再执行,do-while循环反之;

for循环适用于循环次数确定的情况

break和continue都可以改变程序执行的流程,但含义不同,使用场合也不同

类和对象:
当在类中声明成员变量时注意位置,在类里面(成员方法外面,也在主函数外面)声明成员变量:
import java.util.Scanner;
public class T{
Strin name;
int age;
public void show(){
Scanner input=new Scanner(System.in);
while(!"n".equals(name)){//除了字符n外的字符串等于name
if(age>=18 && age<=60){
System.out.println("20元");
}else{
System.out.println("免费"):
}
}
}
}
public class InitialVistor{
public static void main(String[[] args){
Scanner input=new Scanner();
Visitor v=new Visitor();
System.out.println("请输入姓名:");
v.name=input.next(); //注意是next即可
System.out.println("请输入年龄:");
v.age=input.nextInt();
v.show();
}
}
方法之间允许相互调用,不需要知道方法的具体实现,实现重用,提高效率 :
Student类的方法a( )调用Student类的方法b( ),直接调用:public void a( ) {
b( ); //调用b( )
}
Student类的方法a( )调用Teacher类的方法b( ),先创建类对象,然后使用“.”调用 :
public void a( ) {
Teacher t = new Teacher( );
t.b( ); //调用Teacher类的b()
}
return只有在方法类型不是void时才能使用;
return不能返回多个值:如return weight,height;//这是错误写法
方法不能嵌套定义(即方法里面定义方法)
不能在方法外部直接写程序逻辑代码!:
例如:
public class Student4 {

int age = 20;

if(age < 20) { //不能有这段代码

System.out.println("年龄不符合入学要求!"); //也不能有这段代码

}
//也不能有这段代码
public void showInfo() {

return "我是一名学生";

}

}

变量声明的位置决定变量作用域;局部变量则只能用在声明它的范围内,成员变量则可以用于该类的方法或其他类的方法;

变量作用域确定可在程序中按变量名访问该变量的区域

成员变量和局部变量的区别

作用域不同:

局部变量的作用域仅限于定义它的方法;

成员变量的作用域在整个类内部都是可见的

初始值不同

Java会给成员变量一个初始值;

Java不会给局部变量赋予初始值

在同一个方法中,不允许有同名局部变量

在不同的方法中,可以有同名局部变量

在同一个类中,成员变量和局部变量同名时,局部变量具有更高的优先级

JavaDoc注释:使用/**开始和*/结束,用来注释类,属性和方法等
/**

* AccpSchool类 //描述信息
*@author JadeBird
//@author:描述作者信息
*@version 1.0 2011/06/21 @version :描述版本信息

*/

例:
/**
* ScoreCalc类 //类的JavaDoc注释

* @author 北大青鸟

* @version 2.0 2013/06/01

*/

public class ScoreCalc {

/** Java成绩 */ //属性的JavaDoc注释

int java;

//...

/**

* 计算总成绩 //方法的JavaDoc注释

* @return total

*/

public int calcTotalScore() {

int total = java + c + db;

return total;

}

//...

}
1,定义类的方法必须包括以下三个部分:

方法的名称,
方法返回值的类型,
方法的主体

2,类的方法调用,使用如下两种形式

同一个类中的方法,直接使用“方法名()”调用;

不同类的方法,首先创建对象,再使用
“对象名.方法名()”来调用

3,在Java中,有成员变量和局部变量,它们的作用域各不相同;

4,JavaDoc注释以“/**”开头,以“*/”结尾


面向对象思想:
类的方法实现某个特定的功能,其他类不需要知道它如何实现,调用方法就可以了,不用重复写代码
Java获取随机数的3种方法:
注意:Java中,对于带参数形式的非void类型方法,调用方法后,要记得对返回值进行处理
例:
public boolean searchName (int start,int end,String name) {

boolean find = false; // 是否找到标识

// 指定区间数组中,查找姓名

for(int i=start-1;i<end;i++) {

if(names[i].equals(name)) {

find=true;

break;

}
}

return find; //注意返回值的处理

}

数组作为参数的方法:
public double calAvg( int[] scores ){

int sum=0;

double avg=0.0;

for(int i =0;i<scores.length;i++){

sum+=scores[i];

}

avg=(double)sum/scores.length;

return avg;

}
对象作为参数的方法:
利用面向对象思想将多个参数封装成对象,将对象作为参数,这是更好的实现方式。

例:在实现了增加一个学生姓名的基础上,增加学生的学号、年龄和成绩,并显示这些信息,如何实现?
方式一:设计带四个参数(学号、姓名、年龄、成绩)的方法

方式二:将学生学号、姓名、年龄、成绩封装在学生对象中,设计方法,以学生对象作为参数

包命名规范

包名由小写字母组成,不能以圆点开头或结尾

包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名

包名后续部分依不同机构内部的规范不同而不同

总结:
带参方法定义的一般形式


<访问修饰符> 返回类型 <方法名>(<参数列表>) {
//方法的主体
}

形参是在定义方法时对参数的称呼;

实参是在调用方法时传递给方法的实际的值;

调用带参方法时要求实参与形参要匹配

创建包使用关键字package;

导入包使用关键字import

String类(字符串类)位移java.lang包中,
String类提供了length()方法,确定字符串的长度 :

System.out.print("请输入密码: ");

pwd=input.next();

if( pwd.length()>=6 ){ //计算长度

System.out.print("注册成功! ");

}else{

System.out.print("密码长度不能小于6位!");

}
String类提供了equals( )方法,比较存储在两个字符串对象的内容是否一致

System.out.print("请输入用户名: ");

uname=input.next();
System.out.print("请输入密码: ");
pwd=input.next();

if( uname.equals("TOM") && pwd.equals("1234567") ){
System.out.print("登录成功! ");

}else{

System.out.print("用户名或密码不匹配,登录失败!");
}

“==”和equals()有什么区别呢?
==:判断两个字符串在内存中的首地址,即判断是否是同一个字符串对象;
equals():检查组成字符串内容的字符是否完全一致;
字符串连接:
方法一:使用“+”
方法二:使用String类的concat()方法
字符串常用提取方法:
搜索第一个出现的字符ch(或字符串value):返回出现第一个匹配的位置
如果没有找到字符或字符串,则返回-1
public int indexOf(int ch)
public int indexOf(String value)
搜索最后一个出现的字符ch(或字符串value):返回出现第一个匹配的位置
如果没有找到字符或字符串,则返回-1
public int lastIndexOf(int ch)
public int lastIndexOf(String value)
------------------------------------------------
public String substring(int index):提取从位置索引开始的字符串部分
public String substring(int beginindex, int endindex):提取beginindex和endindex之间的字符串部分
//beginindex: 字符串的位置从0开始算;endindex: 字符串的位置从1开始算
public String trim() :返回一个前后不含任何空格的调用字符串的副本
StringBuffer类:
StringBuffer:String增强版

对字符串频繁修改(如字符串连接)时,使用StringBuffer类可以大大提高程序执行效率;

StringBuffer声明
:
StringBuffer sb = new StringBuffer(); //创建空的StringBuffer对象

StringBuffer sb = new StringBuffer("aaa");
//创建一个变量存储字符串aaa
StringBuffer的使用


sb.toString(); //转化为String类型

sb.append("**"); //追加字符串

sb.insert (1, "**"); //插入字符串,在1的位置插入
例:
StringBuffer sb = new StringBuffer("青春无悔");

int num=110;

StringBuffer sb1 = sb.append("我心永恒");

StringBuffer sb2 = sb1.append(‘啊‘);

System.out.println(sb2); //青春无悔我心永恒啊

StringBuffer sb3 = sb2.append(num);

System.out.println(sb3);

//青春无悔我心永恒啊110,此处相当于sb3.toString();
例:
从后往前插入:
输入一串数字,从后往前每3位插入一个逗号:
public class insertString {
public static void main(String[] args){
System.out.println("请输入一串数字:");
Scanner s=new Scanner(System.in);
String input =s .next();
StringBuffer str=new StringBuffer(input); //关键语句
for(int i=str.length()-3;i>0;i=i-3){ //关键语句
//注意从后往前,获取长度
str.insert(i,",");
}
System.out.print(str);
}
}
价格的格式化输出:从小数点往前数3位插入一个逗号
public StringBuffer change(double d){

StringBuffer str=new StringBuffer(String.valueOf(d));

for(int i=str.indexOf(".")-3;i>0;i=i-3){

str.insert(i,‘,‘);

}

return str;
}

总结:
String类提供了大量的操作字符串的方法

获得字符串的长度:length();

比较字符串:equals();

连接字符串:concat();

提取字符串:substring()

搜索字符串:indexOf()

拆分字符串:split()

常用的StringBuffer类提供的方法

转换成String类型:toString();

连接字符串:append()

插入字符串:insert()
大小写问题:

使用equalsIgnoreCase()方法:比较时不考虑大小写问题

使用toLowerCase()方法
:变成小写
使用toUpperCase( )方法
:变成大写
通过字符串长度确定数组:
例:输入一段字符串,确定要查找的字符,输出是否包含该字符
public class Count {
public int counter(String inputs,String word){
//注意此处数组利用 输入的字符串的长度来确定
String[] str=new String[inputs.length()];
int count=0;
for(int i=0;i<str.length;i++){
str[i]=inputs.substring(i,i+1); //注意此处i,i+1
}
for(int j=0;j<str.length;j++){
if(str[j].equals(word)){//注意equals的使用
count++;

}
}
return count;
}
添加元素:
for(int i = 0; i < dvd.name.length; i++){
if(dvd.name[i] == null){ //查询最后一个空位置插入
dvd.name[i]=input;
dvd.state[i]=1;//置新增的DVD可借状态
System.out.println("新增《"+input+"》成功!");
break;
}
}
删除元素:遍历数组,查找匹配信息,若找到,每个元素前移一位:
//遍历数组,查找匹配信息
for(int i = 0 ; i < dvd.name.length; i++){
//查找到,每个元素前移一位
if(dvd.name[i]!=null &&dvd.name[i].equalsIgnoreCase(name)&&dvd.state[i]==1){
int j=i;
while(dvd.name[j+1]!=null){
dvd.name[j]=dvd.name[j+1];
dvd.state[j]=dvd.state[j+1];
dvd.date[j]=dvd.date[j+1];
j++;
}
//最后一个不为空的元素置空
dvd.name[j]=null;
dvd.date[j]=null;
System.out.println("删除《"+input+"》成功!");
flag=true;//置位,表示删除成功
break;
}else if(dvd.name[i]!=null &&dvd.name[i].equalsIgnoreCase(name)&&dvd.state[i]==0){
System.out.println("《"+input+"》为借出状态,不能删除!");
flag=true;//置位
break;
}
}
不匹配:
if(dvd.name[i] == null){ //无匹配
System.out.println("没有找到匹配信息!");
break;
}
可利用类SimpleDateFormat对字符串进行日期格式化:
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");

17,使用switch结构:特点:条件为等值判断,条件为整形或字符型;
default的顺序可以改变,但通常放在末尾,也可以省略,
18,switch和多重if的结构
相同:都用来处理多分枝条件的结构;
不同:
switch:只能处理等值条件判断的情况,而且条件必须为整形或字符行;
多重if结构:没有限制,特别适合某个变量处于某个连续区间的情况;
18,处理输入的数字异常:
Scanner对象的hasNextInt()方法,可以判断用户从键盘输入的字符是否是合法的数字
Scanner input = new Scanner(System.in);

if (input.hasNextInt()) {
//

}else{
System.out.println("请输入正确的数字!");

}

时间: 2024-08-19 03:54:20

Java 相关注意事项小结的相关文章

SAE Java相关问题小结

转自:http://blog.csdn.net/bhq2010/article/details/8580412 Sae中使用的servlet容器是jetty7.4.x 我想在web.xml中配置一个自己编写的servlet,实现web启动时的初始化工作,但是总是出现各种问题,下面总结了一下在sae中使用java的一些注意事项: 1.在eclipse中开发java web项目时,我总喜欢直接把需要的jar包复制到WEB-INF/lib下,但在开发sae项目时,最好把需要的jar包放到usr lib

Storm中Spout使用注意事项小结

Storm中Spout用于读取并向计算拓扑中发送数据源,最近在调试一个topology时遇到了系统qps低,处理速度达不到要求的问题,经过排查后发现是由于对Spout的使用模式不当导致的多线程同步等待.这里罗列几点个人觉得编写Spout代码时需要特别注意的地方: 1. 最常用的模式是使用一个线程安全的queue,如BlockingQueue,spout主线程从queue中读取数据:另外的一个或多个线程负责从数据源(如各种消息中间件.db等)读取数据并放入queue中. 2. 如果不关心数据是否丢

Java内部类的使用小结

内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的,也可用public,default,protected和private修饰.(而外部顶级类即类名和文件名相同的只能使用public和default). 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类.对于一个名为outer的外部类和其内部定义的名为inner的内部类.编译完成后出现outer.class和outer$inner.class两类.所以内部类的成员变量/方法名可

java相关的面试题目

1.java/c++/ruby/python集中语言的对比 java和c++ java和ruby java和python java相关的面试题目,布布扣,bubuko.com

Java相关配置合集

Java环境变量配置: 1.安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为C:\java\jdk1.6.0_08: 2.安装完成后,右击“我的电脑”,点击“属性”: 3.XP选择[高级]选项卡,WIN7选择[高级系统设置] ,然后点击“环境变量”: 4.在“系统变量”中新建变量名为:JAVA_HOME,变量值为:指明JDK安装路径,就是刚才安装时所选择的路径 C:\java\jdk1.6.0_08: 点确定 5.在“系统变量”找到path这个变量,选中后点编辑,鼠标放在变

java中String类小结

构建一个字符串 1.用字符串直接量: String message = new String("Welcome to java"); 2.用字符串直接量: String message = "Welcome to java"; 3.用字符数组 Char[] charArray = {'m', 'y'}; String message = new String(charArray); 不可变字符与限定字符串 String对象是不可变的,内容不能改变 java虚拟机为了

java 中的equals()小结

转载自http://www.cnblogs.com/jackyrong/archive/2006/08/20/481994.html Java中的equals是十分重要的,和= =要区别开来,最近在看孙卫琴的JAVA面向对象编程一书,觉得对其阐述写的不错,所以现在小结其主要内容,而且要将 = =和 equals列为重要的对比概念来学习1.声明格式public boolean equals(Object obj)其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回

Java访问权限控制小结

进行访问权限控制的两个原因 第一,可以控制类成员的可见性,使客户程序员只看到应该看到的内容 第二,可以使类的创建者随意改变类内部的工作方式,而不必担心会对客户端程序产生重大影响 四种访问权限 pulic 默认(包权限) protected private 用于域和方法 public表示所有人对本成员都可以访问 默认访问权限表示同一包下的类可以对本成员进行访问,其他包中的则不可以(!默认包) protected用于类的继承中,protected提供包访问权限,同时,子类也对protected成员具

一些Java相关的

都是从<Thinking in Java>英文第四版中摘抄的 _______________________________________________________________________________________________________________________ 变量初始化: The default values are only what Java guarantees when the variable is used as a member of a