方法
方法(method)是程序中最小的执行单元。
方法定义
把一些代码打包在一起,该过程称为方法定义。
方法调用
方法定义后并不是直接运行的,需要手动调用才能执行,该过程称为方法调用。
带返回值方法的调用
- 直接调用:
方法名(实参); - 赋值调用:
整数类型变量名=方法名(实参)﹔
public static void main(String[] args) {}
- 输出调用:
system.out.println(方法名((实参));
输出调用 赋值调用:可以显示返回值
赋值调用 最经常用到
66
81
类和对象
类(设计图)︰是对象共同特征的描述;
对象:是真实存在的具体东西。
在Java中,必须先设计类,才能获得对象。
定义类的补充注意事项
- 用来描述一类事物的类,专业叫做:Javabean类。
在Javabean类中,是不写main方法的。 - 在以前,编写main方法的类,叫做测试类。
我们可以在测试类中创建javabean类的对象并进行赋值调用。
- 类名首字母建议大写,需要见名知意,驼峰模式。
- 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。
实际开发中建议还是一个文件定义一个class类。 - 成员变量的完整定义格式是:修饰符教据类型变量名称=初始化值;一般无需指定初始化值,存在默认值。
如何得到对象?
public class类名{
1、成员变量(代表属性的,一般是名词)
2、成员方法(代表行为的,一般是动词)
}
类名对象名=new类名();
封装
面向对象三大特征
多态
封装
继承
对象代表什么,就得封装对应的数据,并提供数据对应的行为
构造方法的格式
public class student {
修饰符类名(参数){
方法体;
}
}
public Student(){
system.out.print1n("看看我执行了吗? ");
}
public Student(String name,int age){
this.name = name;
this.age = age;
}
1.方法名与类名相同,大小写也要一致
2.没有返回值类型,连void都没有
3.没有具体的返回值(不能由retrun带回结果数据)
③推荐的使用方式
无论是否使用,都手动书写无参数构造方法,
和带全部参数的构造方法
1.构造方法的作用?
- 创造对象的时候,由虚拟机自动调用,给成员变量进行初始化的。
2.构造方法有几种,各自的作用是什么? - 无参数构造方法:初始化的对象时,成员变量的数据均采用默认值。
- 有参数构造方法:在初始化对象的时候,同时可以为对象进行赋值。
3.构造方法有哪些注意事项? - 任何类定义出来,默认就自带了无参数构造器,写不写都有。
- 一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了。
- 建议在任何时候都手动写上空参和带全部参数的构造方法
标准的javabean类
构造方法
快捷键:
alt + insert
alt + Fn + insert
P86
8:50
87三种情况的对象内存图
92
//第一套体系:
nextInt();接收整数
nextDouble();接收小数
next();接收字符串
//遇到空格,制表符,回车就停止接受。这些符号后面的数据就不会接受了
//第二套体系:
nextLine();接收字符串
可以接收空格,制表符,遇到回车才停止接受数据
Scanner sc = new Scanner( System.in);
system.out.println("请输入一个整数");
int num1 = sc.nextInt( );
system.out.println( num1);
system.out.println("请输入第二个整数");
int num2 = sc.nextInt( );
system.out.println( num2 ) ;
//2.创建汽车对象,数据来自于键盘录入
Scanner sc = new Scanner(System.in);
for (int i = e; i < arr. length; i++) {
//创建汽车的对象
car c = new Car();
//录入品牌
System.out.println("请输入汽车的品牌");
String brand = sc.next( );
c.setBrand(brand);
//录入价格
System.out.println("请输入汽车的价格");
int price = sc.nextInt( );
c.setPrice(price);
//录入颜色
System.out.println("请输入汽车的颜色");
String color = sc.next( );
c.setcolor(color);
//把汽车对象添加到数组当中arr[i] = c;
}
-API和API帮助文档
**APl:**目前是JDK中提供的各种功能的Java类。
这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。
**API帮助文档:**帮助开发人员更好的使用API和查询API的一个工具。
- String是Java定义好的一个类。定义在java.lang包中,
所以使用的时候不需要导包。 - Java程序中的所有字符串文字(例如“abcdefg" )。
都被实为此类的对象。 - 字符串不可变,它们的值在创建后不能被更改
-String构造方法代码:
- 直接赋值
String name =“尼古拉斯·阿玮"; - new
构造方法 | 说明 |
---|---|
public string() | 创建空白字符串,不含任何内容 |
public string(String original) | 根据传入的字符串,创建字符串对象 |
public string(char[ ] chs) | 根据字符数组,创建字符串对象 |
public string(byte[] chs) | 根据字节数组,创建字符串对象 |
//传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
//需求:我要修改字符串的内容。abc Qbc
// abc --> { 'a ' , 'b', 'c '} --> { 'Q', 'b' , 'c '} --> "Qbc"
char[] chs = i 'a','b', 'c', 'd'};
string s4 = new string(chs);
system.out.print1n(s4); //abcd
//传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象
//应用场景:以后在网络当中传输的数据其实都是字节信息
//
byte[] bytes = {97,98,99,100};
string s5 = new string(bytes);
system.out.println(s5);//abcd
public class stringDemo {
public static void main( String[ ] args) {
String s1 = "abc" ;
string s2 = "abc" ;
}
}
当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在。
不存在:创建新的
存在:复用
字符串的比较
字符串比较
- boolean equals方法(要比较的字符串)
完全一样结果才是true,否则为false
★ - boolean equalslgnoreCase(要比较的字符串)
忽略大小写的比较
截取字符串
String substring(int beginIndex, int endlndex)
截取注意点:包头不包尾,包左不包右
只有返回值才是截取的小串
String substring(int beginlndex)
截取到末尾
StringBuilder概述
StringBuilder可以看成是一个容器,创建之后里面的内容是可变的
作用:提高字符串的操作效率
方法名 | 说明 |
---|---|
public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
public StringBuilder reverse() | 反转容器中的内容 |
public int length() | 返回长度(字符出现的个数) |
public String toString() | 通过toString()就可以实现把StringBuilder转换为String |
普及:
因为StringBuilder是Java已经写好的类java在底层对他做了一些特殊处理。
打印对象不是地址值而是属性值。
//1.创建对象
stringBuilder sb = new StringBuilder( );
//2.添加字符串
sb.append( "aaa" ) ;sb.append( "bbb" ) ;sb.append( "ccc" ) ;sb.append( "ddd" ) ;
system.out.println(sb) ; //aaabbbcccddd
//3.再把stringBuilder变回字符串
string str = sb.toString();
system.out.println(str);//aaabbbcccddd
使用stringBuilder的场景:
1.字符串的拼接
2.字符串的反转
StringJoiner
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ca5aee1d649429d83006236757e6e959.png)
子符串原理小结
扩展底层原理3:字符串拼接的底层原理
如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串。
如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存。
扩展底层原理4:StringBuilder提高效率原理图
所有要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存
扩展底层原理5:StringBuilder源码分析
默认创建一个长度为16的字节数组
添加的内容长度小于16,直接存
添加的内容大于16会扩容(原来的容量*2+2)
如果扩容之后还不够,以实际长度为准
108-110