2020-09-04【Java编程思想】

tech2025-06-18  3

java 数字字符串判断

//?:0或1个, *:0或多个, +:1或多个 Boolean strResult = str.matches("-?[0-9]+.?[0-9]*"); if(strResult == true) { // 代表是数字字符串 }

《Java编程思想》

构造函数实际上是static方法,只不过该static声明是隐式的。因此,构造函数不能够被override,同样,它也不具有多态private方法本质上属于final方法,因为不能被子类访问 class Glyph { void draw() { System.out.println("Glyph.draw()"); } // 构造函数和 this 它不具有多态性 Glyph() { System.out.println("Glyph() before draw()"); // 在父类构造函数内部调用具有多态行为的函数将导致无法预测的结果 // 此时,子类对象还没初始化,不推荐【x】 draw(); System.out.println("Glyph() after draw()"); } } class RoundGlyph extends Glyph { // 在子类中,新方法名最好不要与基类的private方法采取同一名字, // 不推荐【x】 容易误解 private int radius = 1; // 构造函数和 this RoundGlyph(int r) { radius = r; System.out.println("RoundGlyph.RoundGlyph(). radius = " + radius); } void draw() { System.out.println("RoundGlyph.draw(). radius = " + radius); } } // test class public class PolyConstructors { public static void main(String[] args) { new RoundGlyph(5); } } java 编程单元(class)java 方法的动态绑定/ 通常情况下,我们不必判定是否应该进行动态绑定—它会自动发生。 class StaticSuper { public static String staticGet() { return "Base staticGet()"; } public String dynamicGet() { return "Base dynamicGet()"; } } // extends 继承和多态/ 单继承 class StaticSub extends StaticSuper { public static String staticGet() { return "Derived staticGet()"; } public String dynamicGet() { return "Derived dynamicGet()"; } } // java 测试类 public class StaticPolymorphism { // psvm 测试方法 public static void main(String[] args) { // new 对象 和 ioc 反转 StaticSuper sup = new StaticSub(); System.out.println(sup.staticGet()); System.out.println(sup.dynamicGet()); } }

Java中构造函数的调用顺序

分配内存调用基类构造函数按声明顺序调用成员的初始化方法调用子类构造函数只有非private方法才可以被覆盖父类和子类的同名属性都会分配不同的存储空间

一个spring Bean从创建到销毁

包扫描操作,并对其进行实例化操作依赖注入判断是否实现了BeanNameAware接口 封装 setter/getter判断是否实现了BeanFactoryAware接口 封装对象工厂类判断是否实现了ApplicationContextAware接口 获取上下文判断是否实现了BeanPostProcessor接口 ?判断Bean是否配置了init-method判断Bean是否实现了BeanPostProcessor接口 完成bean 初始化一般是在ApplicationContext执行close方法时会进行销毁操作。在销毁过程中,判断是否实现了DisposableBean接口,如果有则执行destroy方法。判断Bean是否配置了destroy-method,如果有,在销毁过程中会默认执行一次destroy-method方法。

spring 处理流程

BeanFactory添加事件(方法)实例化调用事件(事件监听)

springBoot 事务管理

class@EnableTransactionManagement //开启声明式事务@Configurationmethod@Transactional 事务回滚/提交@Override@Beanvar java 变量声明@Resource@Autowired <!-- spring-boot-starter-jdbc java 数据库连接api--> <!-- jdbc 驱动 例如: Oracle中的oci.dll--> <!-- 本地 api --> <!-- 客户端上的JDBC驱动程序使用套接字(Socket)来调用服务器上的中间件程序 --> <!-- 尊崇规范,java 访问数据库--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <scope>test</scope> </dependency> <!-- spring-boot-starter-data-jpa java 持久化 api 【规范】--> <!-- orm 对象关系映射 mapper 【maybatis 实现】--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <scope>test</scope> </dependency>

spring AOP、ORM、事务管理

<!-- dataSource数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- 连接池中保留的最大连接数。默认为15 --> <property name="maxPoolSize" value="${c3p0.pool.maxPoolSize}"/> <!-- 连接池中保留的最小连接数。默认为15 --> <property name="minPoolSize" value="${c3p0.pool.minPoolSize}" /> <!-- 初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值。默认为3 --> <property name="initialPoolSize" value="${c3p0.pool.initialPoolSize}"/> <!-- 定义在从数据库获取新连接失败后重复尝试获取的次数,默认为30 --> <property name="acquireIncrement" value="${c3p0.pool.acquireIncrement}"/> </bean> <!-- 事务管理 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 事务通知(隔离级别、传播行为) --> <tx:advice id="txAdivce" transaction-manager="txManager"> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="save*" propagation="REQUIRED"/> <tx:method name="find*" read-only="false"/> <tx:method name="get*" read-only="false"/> <tx:method name="view*" read-only="false"/> </tx:attributes> </tx:advice> <!-- 切入事务 --> <aop:config> <aop:pointcut expression="execution(* com.*.service.*.*(..))" id="txPointcut"/> <aop:advisor advice-ref="txAdivce" pointcut-ref="txPointcut"/> </aop:config>
最新回复(0)